Skip to content

Instantly share code, notes, and snippets.

@divs1210
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save divs1210/5d2d605339d6bc551ca0 to your computer and use it in GitHub Desktop.
Save divs1210/5d2d605339d6bc551ca0 to your computer and use it in GitHub Desktop.
Babbage's Difference Engine in Python
def diff(seq):
""" [1,4,9] => [3,5] """
return map(lambda x,y: x-y, seq[1:], seq[:-1])
def triangle(seq):
""" [1,4,9] => [[1,4,9],[3,5],[2]] """
diffs=[seq]
for i in range(1, len(seq)):
diffs.append(diff(diffs[i-1]))
return diffs
def reductions(seq):
""" [1,4,9] => [1,5,14] """
l = [seq[0]]
for i in range(1, len(seq)):
l.append(seq[i]+l[i-1])
return l
def infer(pattern, n):
""" infer([1,4,9], 10) => [1,4,9,16,25 ... 100] """
gen_seq = [seq[-1] for seq in triangle(pattern)]
gen_seq.reverse()
elements = pattern[:-1]
for count in range(len(pattern)-1, n):
elements.append(gen_seq[-1])
gen_seq = reductions(gen_seq)
return elements
@divs1210
Copy link
Author

This is a Python port of some Clojure code that I wrote about some time back in a blog post .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment