Skip to content

Instantly share code, notes, and snippets.

@RWJMurphy
Created March 26, 2018 23:02
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 RWJMurphy/3b57af8bfb263c66ed8be739e865c4e7 to your computer and use it in GitHub Desktop.
Save RWJMurphy/3b57af8bfb263c66ed8be739e865c4e7 to your computer and use it in GitHub Desktop.
golf all the fizzbuzz
from itertools import combinations as c
s = sorted
def a(m):return reduce(lambda x,y:(x[0]+2**y[0],x[1]+y[1]),m,(0,''))
def p(x):return [None]+[x for _,x in s([a(d) for r in range(len(x)) for d in c(enumerate(x), r+1)])]
def metabuzz(m):
n=s([(v,k) for k,v in m.items()])
return '''def o(i):return str(%r[k(i)] or i)
def k(n):return sum([(n%%v==0)<<i for i,v in enumerate(%r)])
print "\\n".join(map(o, range(1, 101)))'''%(p([v for _,v in n]),[k for k,_ in n])
print(metabuzz({'fizz': 3, 'buzz': 5}))

prints

def o(i):return str([None, 'fizz', 'buzz', 'fizzbuzz'][k(i)] or i)
def k(n):return sum([(n%v==0)<<i for i,v in enumerate([3, 5])])
print "\n".join(map(o, range(1, 101)))

and

exec(metabuzz({'fizz': 3, 'buzz': 5}))

prints

1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
...
print(metabuzz(dict(fooz=3, barz=7, bazz=11, quxz=17)))
def o(i):return str([None, 'fooz', 'barz', 'foozbarz', 'bazz', 'foozbazz', 'barzbazz', 'foozbarzbazz', 'quxz', 'foozquxz', 'barzquxz', 'foozbarzquxz', 'bazzquxz', 'foozbazzquxz', 'barzbazzquxz', 'foozbarzbazzquxz'][k(i)] or i)
def k(n):return sum([(n%v==0)<<i for i,v in enumerate([3, 7, 11, 17])])
print "\n".join(map(o, range(1, 101)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment