2007年05月09日
FizzBuzz問題
FizzBuzz問題、面白そうだったので考えてみた。
考えてみて1分以内で戦略はできたが(15の剰余でフィルタした後、3の剰余でFIzz、5の剰余でBuzzを出す)、3の剰余と5の剰余を取るにも関わらず15の剰余も計算するのが、同じ事2度やっててどうにもいけてないやり方な気がして、5分くらい考えたが代案浮かばず。
あきらめてブクマを見てみる。
dankogai !dankogai, 一行野郎, oneliner perl -le 'print $_%15?$_%5?$_%3?$_:Fizz:Buzz:FizzBuzz for(1..100)'
いけてないと思ってたが弾さんも同じ戦略だったので一安心。
でもやっぱり15の剰余を使わないやり方ないか探してみると、
gomis 最短を目指してみる。perl -le 'print(($_%3?"":Fizz).($_%5?"":Buzz)or$_) for(1..100)'
あった。
なるほど、出力結果に対してorとるのか。
- 3の剰余、5の剰余 ⇒ 15の剰余
の部分を繰り返していないだけでなく、
- Fizz、Buzz ⇒ FizzBuzz
の冗長性もないので、私的にはこれチャンピオン。
と他人のばかり見ててもあれなので、自分でも書いてみる。
普通のやり方はやり尽くされてる感なので、他のやり方...といってもFizzBuzzロジックは他に思いつかなかったので、ループに手を入れてみる。
元記事に、
実際的な問題を解くのに再帰が使えない候補者をたくさん面接してきた。
云々あったので再帰を使ってみた。
perl -le '$f=sub{$a=shift;return if($a>100);print(($a%3?"":Fizz).($a%5?"":Buzz)or$a);$f->(++$a)};$f->(1);'
いやそれがどうしたと言われれば困りますけど。
でもなんか面白かったので、自分でも問題作りたくなった。
FizzBuzzみたいなシンプルで面白いのは作れないけど、何か自分の分野の周りでないかなーと思ってたら、こんなの思いついた。
- 長文テキストから、その中に含まれる地名を全てマッチングして抜き出し表示するプログラム
- 抜き出す対象の地名は、「東京」「大阪」等単独単語で、別リストとして持つ(市区町村、町丁目等の住所の木構造は考えなくてよい)
- 表記の揺れに対応する(例えば、住所リスト中に「市ヶ谷」とあり長文テキスト内が「市が谷」であってもマッチ)。とりあえずは「ケ、ヶ、ガ、が」「龍、竜」だけ考慮。(汎用的に作れれば越したことはない)
- 住所リスト中の表記も揺れている(「ヶ」「ケ」「が」「ガ」全て含まれる可能性がある)
- Builtin以外のPerlモジュールは使わない(表示にsay使いたいからPerl6::Sayとか、要求ロジックに使わない場合はおk。)
みたいな感じですけど、要求仕様判りますかね...?
昼休み終わったので、仕事が終われば自分でも考えてみます。
Excerpt: FizzBuzz問題 foreach my $n (1 .. 100) { my $matched = 0; if (! ($n % 3)) { pri...
Weblog: はやくプログラマーになりたい
Tracked: 2007年05月09日 15:31
Excerpt: Fizz-Buzz問題というのがあるらしい。 休出でひたすらデバッグしてたと...
Weblog: 紫電の徒然なる雑記帳
Tracked: 2007年05月13日 22:27
![[ここギコ!]](http://kokogiko.net/logo.png)



・「定義できない」とのたまうものを自説根拠の説明の中で延々と使う不誠実(笑)(むにゅう!)
・絵文字標準化でのキャリア批判に思うこと(kokogiko)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)
・絵文字標準化でのキャリア批判に思うこと(ひゅ〜)
・絵文字標準化でのキャリア批判に思うこと(kokogiko)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(kokogiko)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)