今日はネットで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
コード投稿について
ここでみんなが投稿したコードのサイズや早さが見えるんだけど、
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月の最初までにはコツみたいなの勉強しておきたい。
コメント