#!/usr/bin/env ys-0 # This program has multiple implementations of "fizzbuzz". # usage: yamlscript fizzbuzz.ys [] [] # The main function runs a certain requested fizzbuzz implementation function # for a certain requested number (default is 100). defn main(count=100 impl=1): fizzbuzz =: "fizzbuzz-$impl" when-not ENV.'YS_TEST': say: "Running function '$fizzbuzz' with count=$count" function =: resolve(fizzbuzz.symbol()) result =: function(count) mapv say: result # These implementation functions were adapted from # https://rosettacode.org/wiki/FizzBuzz#Clojure defn fizzbuzz-1(n): map: fn(x): cond: zero?(x % 15): 'FizzBuzz' zero?(x % 5): 'Buzz' zero?(x % 3): 'Fizz' =>: x =>: 1 .. n defn fizzbuzz-2(n): loop [i 1, l []]: if (i > n): =>: l recur inc(i): conj l: cond: zero?(i % 15): 'FizzBuzz' zero?(i % 5): 'Buzz' zero?(i % 3): 'Fizz' =>: i defn fizzbuzz-3(n): map: fn(x): s =: str: when zero?(x % 3): 'Fizz' =>: (zero?(x % 5) && 'Buzz') || nil if empty?(s): x s rng: 1 n