今更、FizzBuzz問題
はてブ - どうしてプログラマに・・・プログラムが書けないのか?より。
言語はEmacs Lisp
あえて無駄な処理も多し。
;; FizzBuzz -*- coding; iso-2022-jp -*-
(defun FizzBuzz (min max)
(let ((buf (get-buffer-create "*FizzBuzz*"))
(num min)
(fizz 0)
(buzz 0))
(when (>= min max)
(throw 'error
"Value ileagal"))
(buffer-disable-undo buf)
(pop-to-buffer buf)
(with-current-buffer buf
(toggle-read-only -1)
(erase-buffer)
(while (<= num max)
(let ((mod3 (% num 3))
(mod5 (% num 5)))
(progn
(cond
((and (eq mod3 0) (not (eq mod5 0)))
(insert "Fizz")
(incf fizz))
((and (not (eq mod3 0)) (eq mod5 0))
(insert "Buzz")
(incf buzz))
((and (eq mod3 0) (eq mod5 0))
(insert "FizzBuzz")
(incf fizz)
(incf buzz))
(t
(insert (format "%d" num))))
(insert "\n")
(incf num))))
(set-buffer-modified-p nil)
(toggle-read-only 1)
(message "%s:%d %s:%d" "Fizz" fizz "Buzz" buzz))))
# どっか間違えてなきゃいいけど。
ちなみに、whileループ内の本質的な部分だけなら、さすがに1分くらいでできたと思う。
けど、色々考えてこうなってます。
以降、これを基本形として改善していってみる。
# そもそもの問題とは離れるけどね。
今更、FizzBuzz問題 More ログイン