General FizzBuzz: Difference between revisions
Content added Content deleted
m (→Fast Version without Modulo: clean up & add explanation) |
(→Generator using counters instead of modulo: simplify) |
||
Line 2,907: | Line 2,907: | ||
<lang Python>from collections import defaultdict |
<lang Python>from collections import defaultdict |
||
N = 100 |
|||
FACTOR_TO_WORD = { |
|||
3: "Fizz", |
3: "Fizz", |
||
5: "Buzz", |
5: "Buzz", |
||
} |
} |
||
def fizzbuzz(n= |
def fizzbuzz(n=N, factor_to_word=FACTOR_TO_WORD): |
||
factors = defaultdict(list) |
factors = defaultdict(list) |
||
for mod in mods: |
|||
factors[mod].append(mod) |
|||
for |
for factor in factor_to_word: |
||
factors[factor].append(factor) |
|||
yield i |
|||
for i in range(1, n+1): |
|||
res = '' |
|||
for factor in sorted(factors.pop(i, ())): |
|||
factors[i+factor].append(factor) |
|||
res += factor_to_word[factor] |
|||
yield res or i |
|||
yield res |
|||
if __name__ == '__main__': |
if __name__ == '__main__': |