Last active
January 1, 2016 11:48
-
-
Save adomokos/8140070 to your computer and use it in GitHub Desktop.
Solving the "FizzBuzz" kata (http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz) in Clojure
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns fizzbuzz.core | |
(:gen-class)) | |
(defn- format-output [output current] | |
(cond | |
(= 0 (mod current 15)) (str output "FizzBuzz\n") | |
(= 0 (mod current 3)) (str output "Fizz\n") | |
(= 0 (mod current 5)) (str output "Buzz\n") | |
:else (str output current "\n"))) | |
(defn fizz-buzz-printer | |
([output current limit] | |
(let [product (format-output output current)] | |
(if (< current limit) | |
(fizz-buzz-printer product (+ 1 current) limit) | |
product))) | |
([start limit] | |
(fizz-buzz-printer "" start limit)) | |
([limit] | |
(fizz-buzz-printer 1 limit))) | |
(defn -main | |
[& args] | |
;; work around dangerous default behaviour in Clojure | |
(alter-var-root #'*read-eval* (constantly false)) | |
(print (fizz-buzz-printer 100))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns fizzbuzz.core-test | |
(:require [clojure.test :refer :all] | |
[fizzbuzz.core :refer :all])) | |
(deftest fizz-buzz-printer-test | |
(testing "with 1" | |
(is (= "1\n" (fizz-buzz-printer 1)))) | |
(testing "with 2" | |
(is (= "1\n2\n" (fizz-buzz-printer 2)))) | |
(testing "from 1-3" | |
(is (= "1\n2\nFizz\n" (fizz-buzz-printer 3)))) | |
(testing "from 1-4" | |
(is (= "1\n2\nFizz\n4\n" (fizz-buzz-printer 4)))) | |
(testing "from 3-4" | |
(is (= "Fizz\n4\n" (fizz-buzz-printer 3 4)))) | |
(testing "from 4-5" | |
(is (= "4\nBuzz\n" (fizz-buzz-printer 4 5)))) | |
(testing "from 4-6" | |
(is (= "4\nBuzz\nFizz\n" (fizz-buzz-printer 4 6)))) | |
(testing "from 9-11" | |
(is (= "Fizz\nBuzz\n11\n" (fizz-buzz-printer 9 11)))) | |
(testing "from 14-16" | |
(is (= "14\nFizzBuzz\n16\n" (fizz-buzz-printer 14 16))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment