Skip to content

Instantly share code, notes, and snippets.

@walkermatt
Last active July 12, 2017 14:08
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save walkermatt/08e971e28eb023a128ca to your computer and use it in GitHub Desktop.
Save walkermatt/08e971e28eb023a128ca to your computer and use it in GitHub Desktop.
fizzbuzz without conditionals in Clojure
;; fizzbuzz without conditionals in Clojure
; Simple patten matching using a single map lookup
(defn fizzbuzz [x]
(let [v [(= (mod x 3) 0) (= (mod x 5) 0)]]
({[true false] "fizz"
[false true] "buzz"
[true true] "fizzbuzz"
[false false] x} v)))
;; Tests
(= (fizzbuzz 1) 1)
(= (fizzbuzz 3) "fizz")
(= (fizzbuzz 5) "buzz")
(= (fizzbuzz 6) "fizz")
(= (fizzbuzz 7) 7)
(= (fizzbuzz 15) "fizzbuzz")
; Test from 1 to 100
(= (map fizzbuzz (range 1 101)) '(1, 2, "fizz", 4, "buzz", "fizz", 7, 8, "fizz", "buzz", 11, "fizz", 13, 14, "fizzbuzz", 16, 17, "fizz", 19, "buzz", "fizz", 22, 23, "fizz", "buzz", 26, "fizz", 28, 29, "fizzbuzz", 31, 32, "fizz", 34, "buzz", "fizz", 37, 38, "fizz", "buzz", 41, "fizz", 43, 44, "fizzbuzz", 46, 47, "fizz", 49, "buzz", "fizz", 52, 53, "fizz", "buzz", 56, "fizz", 58, 59, "fizzbuzz", 61, 62, "fizz", 64, "buzz", "fizz", 67, 68, "fizz", "buzz", 71, "fizz", 73, 74, "fizzbuzz", 76, 77, "fizz", 79, "buzz", "fizz", 82, 83, "fizz", "buzz", 86, "fizz", 88, 89, "fizzbuzz", 91, 92, "fizz", 94, "buzz", "fizz", 97, 98, "fizz", "buzz"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment