数日前に職場でも話題になったネタ。
Fizz-Buzz問題の例はこんな感じだ。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
…まぁ、プログラムで飯を食っている人間で、さすがにこれが出来ん人はおらんと信じたいところだが、原文の言を信じるならば実際はそうではないらしい。
即興で書くとこんな感じだが…
#include <stdio.h> int main(void) { int i; for(i = 1; i <= 100; i++) { if(!(i % 3) || !(i % 5)) { printf("%s%s\n", (i%3) ? "" : "Fizz" , (i%5) ? "" : "Buzz"); } else { printf("%3d\n", i); } } return 0; }
確かに、書いた後「もっとシンプルにならんものか」とか考え込んだりせんわけでもない。
ただ、考え込むのは書いた後にやるべきことだったりするので、まずは2分以内にこいつもしくは同じ程度のコードは書いてみせるべきなんだろうな。
【おまけ】
暇つぶしに EmacsLisp版を書いてみるw
*scratch* buffer などで C-j で実行できるですよ。
(let ((i 1)) (while (< i 101) (if (or (= 0 (% i 3)) (= 0 (% i 5))) (insert (format "%s%s\n" (if (= 0 (% i 3)) (eval "Fizz") (eval "")) (if (= 0 (% i 5)) (eval "Buzz") (eval "")))) (insert (format "%3d\n" i))) (setq i (1+ i))))