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

Comments:

Post a comment