Skip to content

Instantly share code, notes, and snippets.

@SeijiEmery
Last active July 28, 2018 19:07
Show Gist options
  • Save SeijiEmery/474346b6bb3fa09858a0ca3adf7d0876 to your computer and use it in GitHub Desktop.
Save SeijiEmery/474346b6bb3fa09858a0ca3adf7d0876 to your computer and use it in GitHub Desktop.
FizzBuzz, in increasing levels of cleverness + obfuscation
def fizzbuzz (n):
fizz = n % 3 == 0
buzz = n % 5 == 0
if fizz and buzz:
return "FizzBuzz"
elif fizz:
return "Fizz"
elif buzz:
return "Buzz"
else:
return str(n)
print(list(map(fizzbuzz, range(1, 100 + 1))))
fizzbuzz = lambda n: [[
"FizzBuzz", "Fizz", "Buzz", str(n)
][ (0 if (n % 3) == 0 else 1) +
(0 if (n % 5) == 0 else 2) ]
for n in range(1, n + 1) ]
print(fizzbuzz(100))
def fizzbuzz ():
sieve = [ 0 ] * 15
for x in range(0, 15, 3):
sieve[x] += 1
for x in range(0, 15, 5):
sieve[x] += 2
def fizzbuzz (n):
return [ "{n}", "Fizz", "Buzz", "FizzBuzz" ][sieve[n % 15]].format(**locals())
return lambda n: list(map(fizzbuzz, range(1, n + 1)))
fizzbuzz = fizzbuzz()
print(fizzbuzz(100))
def fizzbuzz ():
fill = lambda s, k, v: [ x + v if i % k == 0 else x for i, x in enumerate(s) ]
s = fill(fill([ 0 ] * 15, 3, 1), 5, 2)
def fizzbuzz (n):
return [ "{n}", "Fizz", "Buzz", "FizzBuzz" ][s[n % 15]].format(**locals())
return lambda n: list(map(fizzbuzz, range(1, n + 1)))
fizzbuzz = fizzbuzz()
print(fizzbuzz(100))
def fizzbuzz ():
fill = lambda s, k, v: [ x + v if i % k == 0 else x for i, x in enumerate(s) ]
s = fill(fill([ 0 ] * 15, 3, 1), 5, 2)
return lambda n: [[ str(n), "Fizz", "Buzz", "FizzBuzz" ][s[n % 15]] for n in range(1, n + 1)]
def fizzbuzz (n):
return [ "{n}", "Fizz", "Buzz", "FizzBuzz" ][s[n % 15]].format(**locals())
return lambda n: list(map(fizzbuzz, range(1, n + 1)))
fizzbuzz = fizzbuzz()
print(fizzbuzz(100))
def fizzbuzz ():
def branch (n):
l = [ (n - 1) >> 1 ] + [ 0 ] * (n - 1)
return lambda p: p[1] + l[p[0] % n]
fill = lambda xs, n: list(map(branch(n), enumerate(xs)))
xs = fill(fill([ 0 ] * 15, 3), 5)
return lambda n: [[ "{n}", "Fizz", "Buzz", "FizzBuzz" ][xs[n % 15]].
format(**locals())
for n in range(1, n + 1)
]
fizzbuzz = fizzbuzz()
print(fizzbuzz(100))
['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32', 'Fizz', '34', 'Buzz', 'Fizz', '37', '38', 'Fizz', 'Buzz', '41', 'Fizz', '43', '44', 'FizzBuzz', '46', '47', 'Fizz', '49', 'Buzz', 'Fizz', '52', '53', 'Fizz', 'Buzz', '56', 'Fizz', '58', '59', 'FizzBuzz', '61', '62', 'Fizz', '64', 'Buzz', 'Fizz', '67', '68', 'Fizz', 'Buzz', '71', 'Fizz', '73', '74', 'FizzBuzz', '76', '77', 'Fizz', '79', 'Buzz', 'Fizz', '82', '83', 'Fizz', 'Buzz', '86', 'Fizz', '88', '89', 'FizzBuzz', '91', '92', 'Fizz', '94', 'Buzz', 'Fizz', '97', '98', 'Fizz', 'Buzz']
['1', '2', 'Buzz', '4', 'Fizz', 'Buzz', '7', '8', 'Buzz', 'Fizz', '11', 'Buzz', '13', '14', 'FizzBuzz', '16', '17', 'Buzz', '19', 'Fizz', 'Buzz', '22', '23', 'Buzz', 'Fizz', '26', 'Buzz', '28', '29', 'FizzBuzz', '31', '32', 'Buzz', '34', 'Fizz', 'Buzz', '37', '38', 'Buzz', 'Fizz', '41', 'Buzz', '43', '44', 'FizzBuzz', '46', '47', 'Buzz', '49', 'Fizz', 'Buzz', '52', '53', 'Buzz', 'Fizz', '56', 'Buzz', '58', '59', 'FizzBuzz', '61', '62', 'Buzz', '64', 'Fizz', 'Buzz', '67', '68', 'Buzz', 'Fizz', '71', 'Buzz', '73', '74', 'FizzBuzz', '76', '77', 'Buzz', '79', 'Fizz', 'Buzz', '82', '83', 'Buzz', 'Fizz', '86', 'Buzz', '88', '89', 'FizzBuzz', '91', '92', 'Buzz', '94', 'Fizz', 'Buzz', '97', '98', 'Buzz', 'Fizz']
['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32', 'Fizz', '34', 'Buzz', 'Fizz', '37', '38', 'Fizz', 'Buzz', '41', 'Fizz', '43', '44', 'FizzBuzz', '46', '47', 'Fizz', '49', 'Buzz', 'Fizz', '52', '53', 'Fizz', 'Buzz', '56', 'Fizz', '58', '59', 'FizzBuzz', '61', '62', 'Fizz', '64', 'Buzz', 'Fizz', '67', '68', 'Fizz', 'Buzz', '71', 'Fizz', '73', '74', 'FizzBuzz', '76', '77', 'Fizz', '79', 'Buzz', 'Fizz', '82', '83', 'Fizz', 'Buzz', '86', 'Fizz', '88', '89', 'FizzBuzz', '91', '92', 'Fizz', '94', 'Buzz', 'Fizz', '97', '98', 'Fizz', 'Buzz']
['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32', 'Fizz', '34', 'Buzz', 'Fizz', '37', '38', 'Fizz', 'Buzz', '41', 'Fizz', '43', '44', 'FizzBuzz', '46', '47', 'Fizz', '49', 'Buzz', 'Fizz', '52', '53', 'Fizz', 'Buzz', '56', 'Fizz', '58', '59', 'FizzBuzz', '61', '62', 'Fizz', '64', 'Buzz', 'Fizz', '67', '68', 'Fizz', 'Buzz', '71', 'Fizz', '73', '74', 'FizzBuzz', '76', '77', 'Fizz', '79', 'Buzz', 'Fizz', '82', '83', 'Fizz', 'Buzz', '86', 'Fizz', '88', '89', 'FizzBuzz', '91', '92', 'Fizz', '94', 'Buzz', 'Fizz', '97', '98', 'Fizz', 'Buzz']
['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32', 'Fizz', '34', 'Buzz', 'Fizz', '37', '38', 'Fizz', 'Buzz', '41', 'Fizz', '43', '44', 'FizzBuzz', '46', '47', 'Fizz', '49', 'Buzz', 'Fizz', '52', '53', 'Fizz', 'Buzz', '56', 'Fizz', '58', '59', 'FizzBuzz', '61', '62', 'Fizz', '64', 'Buzz', 'Fizz', '67', '68', 'Fizz', 'Buzz', '71', 'Fizz', '73', '74', 'FizzBuzz', '76', '77', 'Fizz', '79', 'Buzz', 'Fizz', '82', '83', 'Fizz', 'Buzz', '86', 'Fizz', '88', '89', 'FizzBuzz', '91', '92', 'Fizz', '94', 'Buzz', 'Fizz', '97', '98', 'Fizz', 'Buzz']
['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32', 'Fizz', '34', 'Buzz', 'Fizz', '37', '38', 'Fizz', 'Buzz', '41', 'Fizz', '43', '44', 'FizzBuzz', '46', '47', 'Fizz', '49', 'Buzz', 'Fizz', '52', '53', 'Fizz', 'Buzz', '56', 'Fizz', '58', '59', 'FizzBuzz', '61', '62', 'Fizz', '64', 'Buzz', 'Fizz', '67', '68', 'Fizz', 'Buzz', '71', 'Fizz', '73', '74', 'FizzBuzz', '76', '77', 'Fizz', '79', 'Buzz', 'Fizz', '82', '83', 'Fizz', 'Buzz', '86', 'Fizz', '88', '89', 'FizzBuzz', '91', '92', 'Fizz', '94', 'Buzz', 'Fizz', '97', '98', 'Fizz', 'Buzz']
[Finished in 0.5s]
@SeijiEmery
Copy link
Author

SeijiEmery commented Jul 28, 2018

note: formatting in the last example is ofc intentionally obfuscated to act as a wtf filter to detect inexperienced python programmers (ie. wtf, why is there a for statement AFTER the return... if you're asking this question you clearly don't understand python or list comprehensions)

Works b/c technically you can do anything you want w/ indentation in python so long as it's inside of an unterminated list :P

@SeijiEmery
Copy link
Author

Obviously, the last example is more efficient b/c it's branchless :P

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