Skip to content

Instantly share code, notes, and snippets.

@phantamanta44
Created February 14, 2020 09:03
Show Gist options
  • Save phantamanta44/8d17edcb3e59a3716f8cafde35c86678 to your computer and use it in GitHub Desktop.
Save phantamanta44/8d17edcb3e59a3716f8cafde35c86678 to your computer and use it in GitHub Desktop.
def cycle(elems):
mapping = { elems[i]: elems[(i + 1) % len(elems)] for i in range(len(elems)) }
return lambda e: mapping[e] if e in mapping else e
def compose(f, g):
return lambda e: f(g(e))
def cmp_list(a, b):
return all(a[i] == b[i] for i in range(len(a)))
def cmp_order(f, g, seq):
f_seq = seq
g_seq = seq
while True:
f_seq = list(map(f, f_seq))
g_seq = list(map(g, g_seq))
f_id = cmp_list(f_seq, seq)
g_id = cmp_list(g_seq, seq)
if f_id or g_id:
return f_id and g_id
def fizzbuzz(i):
cycle_i = cycle(range(i))
buf = []
if cmp_order(cycle_i, compose(cycle_i, cycle(range(i, i + 3))), range(i + 3)):
buf.append('fizz')
if cmp_order(cycle_i, compose(cycle_i, cycle(range(i, i + 5))), range(i + 5)):
buf.append('buzz')
print(''.join(buf) if len(buf) else i)
for i in range(1, 100):
fizzbuzz(i)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment