Created
February 14, 2020 09:03
-
-
Save phantamanta44/8d17edcb3e59a3716f8cafde35c86678 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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