4 ms·
There is “no way” to subvert this FizzBuzz interview when writing code in Python 3 only. def inf_range(a): while True: yield a a += 1 def
by ptspts 4y ago
There is “no way” to subvert this FizzBuzz interview when writing code in Python 3 only.
def inf_range(a):
while True:
yield a
a += 1
def take(n, it):
return [a for a, b in zip(it, range(n))]
def fizzbuzz():
return (a + b or str(c) for a, b, c in zip(
(a for _ in inf_range(1) for a in (("", "", "Fizz"))),
(a for _ in inf_range(1) for a in (("", "", "", "", "Buzz"))),
inf_range(1)))
print(take(30, fizzbuzz()))
For bonus points: which alphanumeric characters can be changed in the code above?
- Kamq 4y agoI always liked the version with no branching statements. In python it would be roughly: def fizz_str(n): return "FIZZ" def buzz_str(n): return "BUZZ" def fizz_buzz_str(n): return "FIZZBUZZ" def to_str(n): return str(n) indexes = [3, 0, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0] def fizz_buzz(n): funcs = [ to_str, fizz_str, buzz_str, fizz_buzz_str ] return funcs[indexes[n % 15]](n) for i in range(1, 101): print(fizz_buzz(i))
- raluk 4y agoHere is another version of similar idea as oneliner. Additional feature - no loops and no conditions. fb = lambda n : n == 0 or not fb(n-1) or not print(['{}',"fizz","buzz","fizzbuzz"][((n%3)==0)|(((n%5)==0)*2)].format(n)) fb(100)
- rahimnathwani 4y agoNice use of bitwise OR
- sjadoinqwoeihad 4y ago> 0, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0 I never noticed this symmetry in fizzbuzz before.
- eesmith 4y agoIt seems like I'm missing a joke. Is this style in homage to the linked-to page? I can't figure out why you're not using itertools nor re-using itertools names. Is it that translating from .. is that Haskell? .. to Python without idiomatic translation the subversion? from itertools import islice, cycle def fizzbuzz(): return (a + b or str(c) for c, (a, b) in enumerate(zip( cycle(("", "", "Fizz")), cycle(("", "", "", "", "Buzz")), ), start = 1)) >>> print(*islice(fizzbuzz(), 0, 30)) 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