summaryrefslogtreecommitdiff
path: root/misc/fizzbuzz.nix
blob: 8306bd1ec786b3b668b69bb194b93401d57e0d7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
max: let
  inherit (builtins) concatStringsSep filter isString map toString;

  mod = num: denom: num / denom * denom == num;

  results = {
    "15" = "fizzbuzz";
    "3" = "fizz";
    "5" = "buzz";
  };

  fizzbuzz = num: let
    a = filter isString (map (d:
      if mod num d
      then results.${toString d}
      else d) [15 3 5]);
  in
    if a == []
    then toString num
    else builtins.elemAt a 0;

  generate = i: max:
    if i == max
    then ["${fizzbuzz i}\n"]
    else [(fizzbuzz i)] ++ (generate (i + 1) max);
in
  concatStringsSep "\n" (generate 1 max)