Skip to content

Instantly share code, notes, and snippets.

View cls's full-sized avatar

Connor Lane Smith cls

View GitHub Profile
@cls
cls / dissre.py
Last active March 19, 2024 07:22
Python regular expression bytecode disassembler
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 / mircrev.c
Last active February 28, 2021 00:18
Reversal of mIRC rich text (ASCII only)
#include <ctype.h>
#define BIT(X) (1 << (X))
#define CTRL(X) ((X) - '@')
enum { None = -1 };
enum {
Bold = CTRL('B'),
Colour = CTRL('C'),
@cls
cls / codons.c
Last active May 9, 2020 15:02
Counting DNA codons. Mostly an exploration of multidimensional array pointers. (No input checking.)
#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 / base64.hpp
Last active January 23, 2020 07:52
Straightforward constexpr Base64 block encoding in C++14
#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 / braille.c
Last active June 24, 2018 14:53
Conversion from ASCII to Braille Computer Notation (UK)
#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 / nmgrep.sh
Last active June 1, 2018 20:22
Script to grep objects' symbol tables
#!/bin/sh
pattern="$1"
shift
if [ $# -gt 1 ]
then
GREP_OPTIONS="$GREP_OPTIONS --with-filename"
export GREP_OPTIONS
fi
@cls
cls / sample-list.lisp
Last active May 25, 2018 14:52
Reservoir sampling over a list in Common 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 16:02
Derivative of a function in Standard ML, using Real.nextAfter
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 / mk_idmap.sml
Last active April 9, 2018 21:27
Higher-order relabelling function, ported from OCaml to Standard ML
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 March 25, 2018 18:29
Execute sed substitution expression over files in a git tree
#!/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