有名なプログラムでの問題に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
« コンピュータって0と1だけなんだよね。 – プログラマのための英文法(笑) »
世界のナベアツ、最高ですよね!
print $_, ( /3/ or $_%3==0 )?’〜〜〜’:”, ($_%8)?”:’ぅぅういえぇえあ’, “¥n” for 1 .. 40;
Comment: 髭。 – 02. February 2008 @ 9:52 pm
髭。さん。
perl短えぇええええw
ナベアツのよさがこの問題をきっかけに伝わってくれればいいなと思ってます。
Comment: hiroki_daichi – 03. February 2008 @ 5:28 pm
[...] via 日本野望の会-Yabooo.org ? FizzBuzzはもう古い!世界のナベアツ問題。 | http://www.yabooo.org/archives/60 [...]
Pingback: PINKMAC - 世界のナベアツに挑戦のつもり – 04. February 2008 @ 1:31 am
剰余なし,文字列マッチなし版をHaskellでやってみました。
http://tom-lpsd.dyndns.org/tom/397/
ソースが長くなったのでリンク辿っていただけるとありがたいです(すいません
Comment: tom – 04. February 2008 @ 7:33 am
[...] 最近世界のナベアツ問題が再燃していて嬉しいpinkmacです。 [...]
Pingback: 日本野望の会-Yabooo.org » 野望会はスイーツ(笑)の夢を見るか? | – 23. April 2008 @ 12:38 am
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
Comment: くまいじ – 09. May 2008 @ 1:23 am