Skip to content

Instantly share code, notes, and snippets.

View louisswarren's full-sized avatar

Louis Warren louisswarren

View GitHub Profile
@louisswarren
louisswarren / picklejson.py
Last active November 18, 2021 23:53
Convert between pickle and json sequences
import sys
import pickle
import json
def usage():
print("Usage:")
print(f"\t{sys.argv[0]} --tojson [PICKLE FILES]")
print(f"\t{sys.argv[0]} --topickle [JSON FILES]")
JD = json.JSONDecoder()
@louisswarren
louisswarren / dice.c
Created October 26, 2021 03:10
Roll dice for a while in C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned long long counts[6] = {0};
unsigned long long trials = 0;
void
roll_dice(void)
{
@louisswarren
louisswarren / generator.c
Last active October 1, 2021 00:58
Generators in C
#include <stdio.h>
#define FIRST(N, ...) (N)
#define foreach(X, F, ...) \
for (init_##F(__VA_ARGS__), X = F(FIRST(__VA_ARGS__));\
FIRST(__VA_ARGS__)->_running;\
X = F(FIRST(__VA_ARGS__)))
struct count_state {
int _running;
@louisswarren
louisswarren / menger.py
Last active August 28, 2021 01:01
3D SVG renderer for menger sponges
import numpy as np
from svg import *
compose = lambda f: lambda g: lambda *a, **k: f(g(*a, **k))
PURPLE = '#6a1eb0'
ORANGE = '#ff824a'
BLUE = '#75c1ff'
VP_WIDTH = 2.0
@louisswarren
louisswarren / graphs.mac
Last active January 7, 2024 14:46
Graphs in maxima
anyp(pred, seq) := lreduce(lambda([P, x], P or pred(x)), seq, false);
allp(pred, seq) := lreduce(lambda([P, x], P and pred(x)), seq, true);
walklength(seq) := (length(seq)-1)/2;
walkverts(seq) := makelist(seq[2*i-1], i, 1, walklength(seq)+1);
walkedges(seq) := makelist(seq[2*i], i, 1, walklength(seq));
closedp(seq) := is(first(seq) = last(seq));
vertexset(G) := first(G);
edgeset(G) := second(G);
@louisswarren
louisswarren / pool.c
Created May 11, 2021 10:18
Linked list pool
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#define POOL_NODE_HEADERS struct pool_node *prev, *next
struct pool_node {
POOL_NODE_HEADERS;
};
@louisswarren
louisswarren / findunicode.c
Last active May 5, 2021 22:25
Strip unicode (why was this tricky in php?)
#include <stdio.h>
#define BUF_SZ (1 << 16)
size_t
find_unicode(char *p, size_t n)
{
size_t i;
for (i = 0; i < n; ++i) {
if (p[i] & 128)
@louisswarren
louisswarren / Makefile
Last active April 26, 2021 03:10
Menger sponge sides
.PHONY: default
default: menger8.png
%.png: %.pbm
convert $^ $@
menger%.pbm: menger
./$^ $* > $@
menger%.svg: menger.py
@louisswarren
louisswarren / Makefile
Last active April 30, 2021 05:08
Key expansion
.PHONY: default
default: keys
./keys
keys: CFLAGS += -lcrypto
@louisswarren
louisswarren / list.c
Last active April 7, 2021 10:25
Ordered lists in C
#include <stdio.h>
#include <stdlib.h>
struct list_entry {
struct list_entry *next;
int value;
};
struct list {
struct list_entry *head;