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
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 {
A = CHAR_TO_BASE('A'),
C = CHAR_TO_BASE('C'),
G = CHAR_TO_BASE('G'),
T = CHAR_TO_BASE('T'),
};
@cls
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)
else
do (let ((rand (random enum)))
(when (< rand size)
(setf (aref sample rand) item)))
@cls
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)
in
(f pos - f neg) / (pos - neg)
end
@cls
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
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 =
foldl
(fn (x, acc) =>
let val new_id = mk_id () in
fn id => if id = x then new_id else acc id
end)
(fn _ => raise NotFound)
@cls
cls / git-sed.sh
Created Mar 25, 2018
Execute sed substitution expression over files in a git tree
View git-sed.sh
#!/bin/sh
expr="$1"
shift
pattern="$(printf "%s" "$expr" | sed -n 's/^s\/\(\([^\\\/]\|\\.\)*\)\/\([^\\\/]\|\\.\)*\/g\?$/\1/p')"
if [ -z "$pattern" ]
then
printf "usage: git sed s/lhs/rhs/[g] [file...]\n" > /dev/stderr
@cls
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>
void
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
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
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
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 *);
int
main(void)
{
char buf[BUFSIZ];
You can’t perform that action at this time.