|
まるケン |
|
#24860
プログラムの実行時間を語るには、マシンのスペックの条件が大事かと。 ちなみに、rubyでかいたプログラムをVictorのちっちゃいノートInterLink(PentiumM、1GHz)で走らせたところ、3.3秒くらいで出ました。 まだまだ速くできるところは残っていますが、以下にプログラムを晒します。 (段下げのために全角スペースを使ってます) j = k = 0 (12345..98765).each do |i| (a=i.to_s.split('').uniq).delete('0') if(a.size == 5) then j += 1 k += 1 if((i%3) == 0) end end p j, k プログラムの解説: 数字が重複しようが0が入ろうが、全くかまわずに12345から98765までの連続した数字を作ります。(12345..98765) そのそれぞれについて(each do ・・・ end)、数字を文字列に変換(to_s)し、構成する文字を一桁ずつばらし(split)、ここではじめて重複する文字を除き(uniq)、さらに'0'を取り除きます(delete)。 この結果の桁数(size)が、元の桁数(=5)と等しかった場合は、今回の問題で作れる数字であると言うことで、その総数(変数j)を1増やします。 また、この結果の数字が3で割り切れるならば、その総数(変数k)を1増やします。 全部終わったら結果の表示。(p) Let's ruby!! |
|
4月12日(火) 10:22:46
MAIL:take4310@mobile.email.ne.jp HomePage:まるケンの部屋 24874 |