2月
02
FizzBuzzはもう古い!世界のナベアツ問題。
Filed Under (article, level☆☆, software) by on 02-02-2008
ネタ記事ですが、いろいろな実装が見たいので。
有名なプログラムでの問題にFizz Buzz問題というのがあります。
これは、
最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」(Bizz Buzz の場合は 「Bizz」)、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 (Bizz Buzz の場合は 「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者やためらった者は脱落となる。
という、牛タンゲームの簡単なやつみたいなものです。
これに似たことをする芸人さんがいます。
それが「世界のナベアツ」ことジャリズムの渡辺鐘(わたなべあつむ)です。
彼のネタの中で。
「3の倍数と3の付く数字だけアホになり、8の倍数だけ気持ち良くなります」
という天才としか言いようの無いネタがあります。これをプログラムにしてみましょう。
まずはFizzBuzz問題のほうから、
var i=0;
var comments=["","Buzz","Fizz"];
comments.push(comments[2]+comments[1]);
var id=setInterval(function(){
var flag=0;
flag|=(i%3==0);
flag*=2;
flag|=(i%5==0);
log((flag>0)?comments[flag]:i);
i++;
if(i>100){clearInterval(id);}
},10);
こんな感じです。
ここでは2、3分でやれ
と書いてあるので最初に思いついたやりかたをしてみました。
これをナベアツ問題のほうに書き直すとこんな感じ。
var i=0;
var suffix=["","ぅぅういえぇえあ","~~~"];
suffix.push(suffix[2]+suffix[1]);
var id=setInterval(function(){
var flag=0;
flag|=i.toString().match(/3/)?1:(i%3==0);
flag*=2;
flag|=(i%8==0);
log(i+suffix[flag]);
i++;
if(i>40){clearInterval(id);}
},10);
だいたい同じような問題です。
ですが、気持ちよくなる方法やアホになる方法などを工夫してみたり、
toStringのような文字列処理を無しでやってみるなど条件設定の付け概のある問題だとおもいます。
みなさんのいろんな実装お待ちしてますw

世界のナベアツ、最高ですよね!
print $_, ( /3/ or $_%3==0 )?’〜〜〜’:”, ($_%8)?”:’ぅぅういえぇえあ’, “¥n” for 1 .. 40;
髭。さん。
perl短えぇええええw
ナベアツのよさがこの問題をきっかけに伝わってくれればいいなと思ってます。
[...] via 日本野望の会-Yabooo.org ? FizzBuzzはもう古い!世界のナベアツ問題。 | http://www.yabooo.org/archives/60 [...]
剰余なし,文字列マッチなし版をHaskellでやってみました。
http://tom-lpsd.dyndns.org/tom/397/
ソースが長くなったのでリンク辿っていただけるとありがたいです(すいません
[...] 最近世界のナベアツ問題が再燃していて嬉しいpinkmacです。 [...]
tcl編:
http://altalt.dyndns.ws:8080/blog/blosxom.cgi/misc_ja/e20080507a.xhtml11
sh編:
http://altalt.dyndns.ws:8080/blog/blosxom.cgi/misc_ja/e20080508a.xhtml11