Skip to content

Instantly share code, notes, and snippets.

@nicksspirit
Created January 29, 2022 16:14
Show Gist options
  • Select an option

  • Save nicksspirit/7887a329185132dea2e751b71605508c to your computer and use it in GitHub Desktop.

Select an option

Save nicksspirit/7887a329185132dea2e751b71605508c to your computer and use it in GitHub Desktop.
A functional programming approach to fizzbuzz in python
from typing import Callable
def is_multiple(x: int, num: int) -> bool:
return x % num == 0
def in_number(x: int, num: int) -> bool:
return str(num) in str(x)
def fizz_buzz(i: int, fn: Callable[[int, int], bool]) -> str:
fizz = "Fizz" if fn(i, 3) else ""
buzz = "Buzz" if fn(i, 5) else ""
fizzbuzz = fizz + buzz
return fizzbuzz if fizzbuzz else str(i)
if __name__ == "__main__":
tdata1 = [1, 2, 3, 4, 5]
assert [fizz_buzz(i, is_multiple) for i in tdata1] == [
"1",
"2",
"Fizz",
"4",
"Buzz",
]
tdata2 = [15, 30, 35, 36, 40]
assert [fizz_buzz(i, is_multiple) for i in tdata2] == [
"FizzBuzz",
"FizzBuzz",
"Buzz",
"Fizz",
"Buzz",
]
print("FizzBuzz Output")
for i in range(1, 101):
print(fizz_buzz(i, is_multiple), end=", ")
# Extra Credit
tdata3 = [13, 2, 15, 4, 50]
assert [fizz_buzz(i, in_number) for i in tdata3] == [
"Fizz",
"2",
"Buzz",
"4",
"Buzz",
]
tdata4 = [31, 30, 35, 36, 40]
assert [fizz_buzz(i, in_number) for i in tdata4] == [
"Fizz",
"Fizz",
"FizzBuzz",
"Fizz",
"40",
]
print("\n\nExtra Credit")
for i in range(1, 101):
print(fizz_buzz(i, in_number), end=", ")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment