2008-06-24
_ [Ruby][programing] 「世界のナベアツ」問題
お笑い芸人・世界のナベアツの持ちネタで、自然数を順に数え上げてゆき、「3の倍数と3のついた数字の時だけアホになる」というものがあるそうだ。
このネタが面白いのか否か、僕にはサッパリわからないのだが、プログラミングの心得のある者の間では、この問題を如何にしてプログラムで表現するのか?という点で、興味を引いているらしい。
まあ「3の倍数」の判定は簡単なのですけど、「3のついた数字」の判定において、これを数学的に解くのか、もしくは正規表現で調べるのかという点で、激論が交わされているらしいw
1〜1000までについてのナベアツ数判定プログラムをRubyで書くと、こんな感じかな?
for i in 1..1000 nabeatsu = "普通" num = i.to_s if i%3 == 0 nabeatsu = "アホ" elsif /3/ =~ num nabeatsu = "アホ" end print i,"\t",nabeatsu,"\n" end
実行結果。
$ ruby nabeatsu.rb
1 普通 2 普通 3 アホ 4 普通 5 普通 6 アホ 7 普通 8 普通 9 アホ 10 普通 11 普通 12 アホ 13 アホ 14 普通 15 アホ 16 普通 17 普通 18 アホ 19 普通 20 普通 ・・・
正規表現を使ってしまうと簡単すぎる。
_ [programing] Fizz-Buzz問題
Fizz-Buzz問題の例はこんな感じだ。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
Fizz-Buzz問題とは
まんま「世界のナベアツ」じゃんwww