Skip to content

Instantly share code, notes, and snippets.

@Gorcenski
Created February 12, 2020 23:54
Show Gist options
  • Save Gorcenski/04a2a4598d55eab0272ee0041437b706 to your computer and use it in GitHub Desktop.
Save Gorcenski/04a2a4598d55eab0272ee0041437b706 to your computer and use it in GitHub Desktop.
Four line extensible fizzbuzz because I'm a bad person
import numpy as np
from functools import reduce
def fizzbuzz(i, **kwargs):
polyvec = lambda order : np.concatenate(([1], np.zeros(order - 1), [-1]))
polybuilder = lambda f: lambda x : sum(f * np.array([np.exp(1j * x * k * 2 * np.pi / np.lcm.reduce([v for k, v in kwargs.items()])) for k in range(len(f) - 1, -1, -1)]))
p = polybuilder(reduce(lambda q, r : np.convolve(q, r), [polyvec(np.lcm.reduce([v for k, v in kwargs.items()]) // v) for v in [v for k, v in kwargs.items()]], [1]))
return reduce(lambda x, y : x + y, [k * bool(np.abs(polybuilder(polyvec(np.lcm.reduce([v for k, v in kwargs.items()]) // v))(i)) < 1e-7) for k, v in kwargs.items()], str(i) * bool(np.abs(p(i)) > 1e-7))
print([fizzbuzz(i, fizz=3, buzz=5, baz=7, bar=11) for i in range(100)])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment