Skip to content

Instantly share code, notes, and snippets.

Avatar

Connor Lane Smith cls

  • Oxford Nanopore Technologies
  • Berkshire, UK
View GitHub Profile
@cls
cls / roman.c
Last active Aug 29, 2015
Roman numeral parser
View roman.c
#include <stdio.h>
enum { I, V, X, L, C, D, M, StackSize };
const int values[] = { 1, 5, 10, 50, 100, 500, 1000 };
int
unroman(const char *s)
{
int stack[StackSize];
@cls
cls / debruijn.hs
Last active Oct 21, 2017
Untyped lambda calculus with De Bruijn indices as a nested data type
View debruijn.hs
import Control.Applicative (liftA2)
data Term a = App (Term a) (Term a)
| Lam (Term (Maybe a))
| Var a
instance Functor Term where
fmap f (App s t) = App (fmap f s) (fmap f t)
fmap f (Lam t) = Lam (fmap (fmap f) t)
fmap f (Var x) = Var (f x)
@cls
cls / next.sh
Last active May 27, 2016
Script to execute the next binary along in $PATH
View next.sh
#!/bin/sh
dir=${1%/*}
bin=${1##*/}
shift
unset flag
set -f
IFS=:
@cls
cls / CovariantIterator.java
Last active Aug 29, 2015
Adaptor for covariant iterators in Java
View CovariantIterator.java
import java.util.Iterator;
public class CovariantIterator<T extends U, U> implements Iterator<U>
{
private Iterator<T> iter;
public CovariantIterator(Iterator<T> it)
{
this.iter = it;
}
@cls
cls / intern.c
Last active Aug 29, 2015
Interning strings with a prefix tree
View intern.c
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *
intern(const char *s)
{
union tree {
const char *str;
@cls
cls / mircrev.c
Last active Feb 28, 2021
Reversal of mIRC rich text (ASCII only)
View mircrev.c
#include <ctype.h>
#define BIT(X) (1 << (X))
#define CTRL(X) ((X) - '@')
enum { None = -1 };
enum {
Bold = CTRL('B'),
Colour = CTRL('C'),
@cls
cls / nmgrep.sh
Last active Jun 1, 2018
Script to grep objects' symbol tables
View nmgrep.sh
#!/bin/sh
pattern="$1"
shift
if [ $# -gt 1 ]
then
GREP_OPTIONS="$GREP_OPTIONS --with-filename"
export GREP_OPTIONS
fi
@cls
cls / dissre.py
Last active Feb 10, 2017
Python regular expression bytecode disassembler
View dissre.py
import re
import sre_compile
import sre_parse
from sre_constants import *
opcodes = dict((v,k) for (k,v) in OPCODES.items())
atcodes = dict((v,k) for (k,v) in ATCODES.items())
chcodes = dict((v,k) for (k,v) in CHCODES.items())
def print_dis(s, indent):
@cls
cls / repack.py
Last active Feb 16, 2017
Repacking structs to minimise bit wastage
View repack.py
from queue import PriorityQueue
class Field:
def __init__(self, size, align):
self.size = size
self.align = align
class Struct:
def __init__(self, fields):
size = 0
@cls
cls / catalan.py
Created Feb 20, 2017
Calculating the Catalan number series
View catalan.py
from fractions import Fraction
def catalan(n):
c = 1
for k in range(2, n + 1):
c *= Fraction(n + k, k)
return int(c)