Skip to content

Instantly share code, notes, and snippets.

View bensimner's full-sized avatar

Ben Simner bensimner

  • University of Cambridge
  • Cambridge, UK
View GitHub Profile
@bensimner
bensimner / Go.hs
Created June 21, 2015 00:18
Go simulator in Haskell
-- Go.hs - Go Simulation
-- Author: Ben Simner
--
-- A little incomplete Go simulator
module Go where
import qualified Data.Map as M
import Text.Read (readMaybe)
--import Debug.Trace (trace) --debugging
#!/usr/bin/env python3
'''
A Proper DocString
This does orbital stuff using PyQt5
Now with real gravity!
Author: Ben Simner
Date: 2015-08-11
'''
@bensimner
bensimner / arby.py
Last active December 2, 2015 10:42
Arby generator, inspired by QuickCheck
import random
import abc
class ArbyMeta(abc.ABCMeta):
_ARBYS = {}
def __init__(self, *args, **kwargs):
pass
def __new__(mcls, name, bases, namespace, _subtype=None):
@bensimner
bensimner / gen.py
Created January 27, 2016 21:59
Demonstration of generator properties in Python
def f(n):
yield from g(n)
return n
def g(n):
for i in range(n):
yield i
i = g(2)
print(next(i)) # 0
@bensimner
bensimner / deep_tee.py
Created February 4, 2016 12:16
Deep Tee
def deep_tee(iterator, n=2):
it = iter(iterator)
gen = (x for x in range(1))
gen_t = type(gen)
deques = [collections.deque() for _ in range(n)]
def gen(d):
while True:
if not d:
try:
v = next(it)
@bensimner
bensimner / cantor.py
Created March 31, 2016 12:06
Cantor's tuple function
import math
import collections
def pairs(n=2):
if n > 2:
initial_pair = pairs(n-1)
d = {}
if n == 1:
i = 0
@bensimner
bensimner / trace.py
Last active June 23, 2016 21:22
a trace function
#!/usr/bin/env python
import os
import sys
import math
from bdb import Bdb
def trace(fName):
with open(fName, 'r') as f:
program = f.readlines()
@bensimner
bensimner / arc
Last active January 17, 2019 22:19
an Atomic Reference Counter proof (possibly) in https://github.com/septract/starling-tool
/* Atomic reference counter
* Example taken from Derek: http://www.mpi-sws.org/~dreyer/talks/talk-dagstuhl16.pdf
*/
shared bool free;
shared int count;
thread bool f;
thread int c;
@bensimner
bensimner / lazy.py
Last active December 24, 2016 18:38
Lazy iterator
import itertools
class LazyStream:
'''This is a stream with 2 operations
> head
> tail
'''
_sentinal = object()
def __init__(self, iterator):
@bensimner
bensimner / __call__.py
Created January 22, 2017 22:09
don't try understand
class C(type):
class __call__:
def __init__(*args):
print('__init__C', args)
def __call__(*args):
print('__call__C', args)
class D(type):
class __call__(metaclass=C):