電球は幾つ点いているか

たまには,Rubyで数学っぽいことをしないと.
404 Blog Not Found:コマネチ大学数学科第12講 + javascriptより.

1から1000までの番号とスイッチがついた電球があります。まず、1の倍数の電球のスイッチを押し、次に2の倍数のスイッチを押し....これを1000回行った後、点灯している電球の数はいくつあるでしょう?ただし、最初の状態では電球は消灯状態です。

これを,とりあえずRubyで.


どういう答えになるのかは,上の参照先を見て頂きたい.

def lamp(max)
    lamps = Array.new(max){false}
    lamps.each_index do |i|
        i += 1
        (1 .. (max/i)).each do |x|
            if lamps[i * x - 1]
                lamps[i * x - 1] = false
            else
                lamps[i * x - 1] = true
            end
        end
    end
    on = []
    lamps.each_with_index do |e, i|
        on << i += 1 if e
    end
    on
end

p lamp(10000).length

あんまり美しくない.とりあえずの実行結果.

$ ruby 1000lamps.rb 
100

ホントに100か?あ,そりゃ10000だから,そりゃそうか.


まぁなんというか,ただやりたかっただけ.