fork download
  1. # FizzBuzz (again).
  2.  
  3. # 1.
  4. # Start with the most obvious solution.
  5. # Notice the string/number pattern repeats with a period of 15.
  6.  
  7. def fizzbuzz_base(n):
  8. if n%3 == 0 and n%5 == 0:
  9. return 'FizzBuzz'
  10. if n%3 == 0:
  11. return 'Fizz'
  12. if n%5 == 0:
  13. return 'Buzz'
  14. return n
  15.  
  16. print('Ver.1 (base)')
  17. for i in range(1, 17):
  18. print(fizzbuzz_base(i))
  19.  
  20. # 2a.
  21. # Combine string table created using base version with
  22. # logical operator short-circuit (to avoid explicit if
  23. # statement).
  24.  
  25. def fizzbuzz_table_generator():
  26. for x in map(fizzbuzz_base, range(15)):
  27. yield x if isinstance(x, str) else ''
  28.  
  29. def fizzbuzz(n):
  30. return fizzbuzz.table[n % 15] or n
  31.  
  32. fizzbuzz.table = list(fizzbuzz_table_generator())
  33.  
  34. print('Ver.2a')
  35. print(fizzbuzz.table)
  36. for i in range(1, 17):
  37. print(fizzbuzz(i))
  38.  
  39. # 2b.
  40. # Combine int:string dictionary created using base version
  41. # with input as a default argument for get method.
  42.  
  43. def fizzbuzz_table_generator():
  44. for i in range(15):
  45. x = fizzbuzz_base(i)
  46. if isinstance(x, str):
  47. yield i, x
  48.  
  49. def fizzbuzz(n):
  50. return fizzbuzz.table.get(n % 15, n)
  51.  
  52. fizzbuzz.table = dict(fizzbuzz_table_generator())
  53.  
  54. print('Ver.2b')
  55. print(fizzbuzz.table)
  56. for i in range(1, 17):
  57. print(fizzbuzz(i))
  58.  
  59. # 3.
  60. # Combine string slicing with logical operator short-circuit.
  61.  
  62. def fizzbuzz(n):
  63. return 'Fizz'[n%3*4:] + 'Buzz'[n%5*4:] or n
  64.  
  65. print('Ver.3')
  66. for i in range(1, 17):
  67. print(fizzbuzz(i))
Success #stdin #stdout 0.1s 14180KB
stdin
Standard input is empty
stdout
Ver.1 (base)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
Ver.2a
['FizzBuzz', '', '', 'Fizz', '', 'Buzz', 'Fizz', '', '', 'Fizz', 'Buzz', '', 'Fizz', '', '']
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
Ver.2b
{0: 'FizzBuzz', 3: 'Fizz', 5: 'Buzz', 6: 'Fizz', 9: 'Fizz', 10: 'Buzz', 12: 'Fizz'}
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
Ver.3
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16