tetraの外部記憶箱

«前の日記(2008-05-24) 最新 次の日記(2008-06-30)» 編集
Category;

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

_ [Ruby][math] 「世界のナベアツ」問題を正規表現を使わずに解いてみる

for i in 1..1000
    nabeatsu = ""
    if i%3 == 0
        nabeatsu = "アホ"
    end
    num = i
    while num >1
        if num%10 == 3
            nabeatsu = "アホ"
        end
        num = num/10
    end
    if i%5 == 0
        nabeatsu += "犬"
    end
    print i,"\t",nabeatsu,"\n"
end