今日はネットでFizz-Buzz問題という面白そうなものを見つけた。

Fizz-Buzz問題

はじめに

どうしてプログラマに・・・プログラムが書けないのか?
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

かなりの試行錯誤の末に、コードを書こうともがいている人たちというのは、
単に大きな問題に対して苦労しているのではないことがわかった。
やや小さな問題(連結リストを実装するというような)に対して苦労するということでさえない。
彼らはまったくちっぽけな問題に苦労しているのだ。

それで、そういった類の開発者を見分けるための質問を作り始め、
私が「Fizz-Buzz問題」と呼んでいる問題のクラスを考え出した。
これはイギリスの学校の子供たちがよくやっている遊び(というかやらされている遊び)にちなんで名付けた。
Fizz-Buzz問題の例はこんな感じだ。

1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、
3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

さっそく私も実際に考えてみました!
単純な問題なんだけど、どうすれば短くなるのか、
効率よく作れるか、とか考えるのが面白いですねー。

HSP言語

#runtime "hsp3cl.hrt"
for i,1,101,1:t="":f="":if i\3=0:t="Fizz"
if i\5=0:f="Buzz"
if t=""&f="":mes i:else:mes t+f
next

Size:122
Statistics:0B / 68B / 38B

C言語

次は1年間学校で勉強がんばったC言語です!

#include <stdio.h>
main(){int i;for(i=1;i<101;i++){if(!!(i%3)&!!(i%5)){printf("%d\n",i);}else{printf("%s%s\n",i%3?"":"Fizz",i%5?"":"Buzz");}}}

Size:143
Statistics:0B / 71B / 68B

コード投稿について

anarchy golf – FizzBuzz

ここでみんなが投稿したコードのサイズや早さが見えるんだけど、
GolfScriptっていうのが、すごいファイルサイズ短くて気になった。Rubyで作られてるらしい

オマケ

ちなみにサイズを測るのは、HSP言語で作りました

p = "C:/****":exist p:i = strsize
sdim b,i:bload p,b,i:repeat i:n=peek(b,cnt)
if ' '=n|'\t'=n|$d=n|$a=n:else:if '/'<n&n<':'|'@'<n&n<'['|'`'<n&n<'{':a++:else:s++
loop:mes "Size:"+i:mes "Statistics:0B / "+a+"B / "+s+"B"

ところで

>実際的な問題を解くのに再帰が使えない候補者をたくさん面接してきた。
>これらは基本的なスキルであり、それを欠いた人に多くのプログラミング経験があるとは思えない。

って書いてあるけど、再帰は結構、苦手。再帰で応用とかかなり頭つかって面倒。
7月の最初までにはコツみたいなの勉強しておきたい。