Skip to content

Instantly share code, notes, and snippets.

Connor Lane Smith cls

  • Oxford Nanopore
  • Berkshire, UK
Block or report user

Report or block cls

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
cls / codons.c
Last active May 9, 2020
Counting DNA codons. Mostly an exploration of multidimensional array pointers. (No input checking.)
View codons.c
#include <stdio.h>
#define CHAR_TO_BASE(C) (((C) >> 1) & 3)
enum base {
cls / sample-list.lisp
Last active May 25, 2018
Reservoir sampling over a list in Common Lisp
View sample-list.lisp
(defun sample-list (items &optional (size 1))
(let ((sample (make-array size :fill-pointer 0)))
(loop for item in items
for enum from 1
if (<= enum size)
do (vector-push item sample)
do (let ((rand (random enum)))
(when (< rand size)
(setf (aref sample rand) item)))
cls / derivative.sml
Created May 12, 2018
Derivative of a function in Standard ML, using Real.nextAfter
View derivative.sml
fun derivative (f : real -> real) (x : real) : real =
let val pos = Real.nextAfter (x, Real.posInf)
val neg = Real.nextAfter (x, Real.negInf)
(f pos - f neg) / (pos - neg)
cls / braille.c
Last active Jun 24, 2018
Conversion from ASCII to Braille Computer Notation (UK)
View braille.c
#include <stdio.h>
static const unsigned char braille[0x100] = {
0x40, 0x7c, 0x48, 0x70, 0x78, 0x68, 0x6f, 0x44, 0x58, 0x5c, 0x54, 0x56, 0x42, 0x64, 0x72, 0x4c,
0x7f, 0x61, 0x63, 0x69, 0x79, 0x71, 0x6b, 0x7b, 0x73, 0x6a, 0x52, 0x46, 0x66, 0x76, 0x74, 0x62,
0x00, 0x3c, 0x08, 0x30, 0x38, 0x28, 0x2f, 0x04, 0x18, 0x1c, 0x14, 0x16, 0x02, 0x24, 0x32, 0x0c,
0x3f, 0x21, 0x23, 0x29, 0x39, 0x31, 0x2b, 0x3b, 0x33, 0x2a, 0x12, 0x06, 0x26, 0x36, 0x34, 0x22,
0x6e, 0x41, 0x43, 0x49, 0x59, 0x51, 0x4b, 0x5b, 0x53, 0x4a, 0x5a, 0x45, 0x47, 0x4d, 0x5d, 0x55,
0x4f, 0x5f, 0x57, 0x4e, 0x5e, 0x65, 0x67, 0x7a, 0x6d, 0x7d, 0x75, 0x77, 0x50, 0x7e, 0x60, 0x6c,
0x2e, 0x01, 0x03, 0x09, 0x19, 0x11, 0x0b, 0x1b, 0x13, 0x0a, 0x1a, 0x05, 0x07, 0x0d, 0x1d, 0x15,
cls / mk_idmap.sml
Last active Apr 9, 2018
Higher-order relabelling function, ported from OCaml to Standard ML
View mk_idmap.sml
exception NotFound
fun mk_idmap (mk_id : unit -> 'b) : ''a list -> ''a -> 'b =
(fn (x, acc) =>
let val new_id = mk_id () in
fn id => if id = x then new_id else acc id
(fn _ => raise NotFound)
cls /
Created Mar 25, 2018
Execute sed substitution expression over files in a git tree
pattern="$(printf "%s" "$expr" | sed -n 's/^s\/\(\([^\\\/]\|\\.\)*\)\/\([^\\\/]\|\\.\)*\/g\?$/\1/p')"
if [ -z "$pattern" ]
printf "usage: git sed s/lhs/rhs/[g] [file...]\n" > /dev/stderr
cls / row_align.c
Last active Mar 18, 2018
Translate raw two-dimensional bitmap into word-aligned rows
View row_align.c
#include <stdint.h>
#include <string.h>
row_align(uint8_t *dst, const uint8_t *src, const size_t width_in_bits, const size_t height)
const size_t width_in_whole_bytes = width_in_bits / 8;
if (width_in_bits % 32 == 0) { // word-aligned
memcpy(dst, src, width_in_whole_bytes * height);
cls / functional-templates.hpp
Last active Mar 9, 2018
Type-level linked lists, with map, filter, and foldr
View functional-templates.hpp
#include <type_traits>
namespace type_list {
class nil {};
template<class Head, class Tail>
class cons {};
// map f [] = []
cls / base64.hpp
Last active Jan 23, 2020
Straightforward constexpr Base64 block encoding in C++14
View base64.hpp
#include <array>
#include <tuple>
constexpr std::array<char, 4> base64(uint8_t octet0, uint8_t octet1, uint8_t octet2)
constexpr std::array<char, 64> table = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
cls / suffix-array.c
Last active Dec 30, 2017
Constructing a simple suffix array
View suffix-array.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int pstrcmp(const void *, const void *);
char buf[BUFSIZ];
You can’t perform that action at this time.