56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
#!/usr/bin/env ys-0
|
|
|
|
# This program has multiple implementations of "fizzbuzz".
|
|
|
|
# usage: yamlscript fizzbuzz.ys [<count>] [<fizzbuzz-fn-#>]
|
|
|
|
# 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
|