[Ruby]回分数の中央値を求める
プログラミング初心者です。以下の問題の実行速度を上げたいです。
問題:回文数の中央値
【概要】
数の範囲を指定します。
その範囲内にある回文数( seeWikipedia - 回文数) の、真ん中の値を計算してください。
例えば下表の通りです:
値の範囲 回文数 真ん中の値
99〜120 99, 101, 111 101
200〜232 202, 212, 222, 232 212, 222
【入出力】
入力は
99,120
のようになっています。
下限と上限がコンマ区切りで並んでいます。
下限以上で、上限以下の回文数の真ん中の値を求めてください。
出力も普通に10進数です。
範囲内にある回文数が奇数個の場合には、中央の値はひとつに決まるのでそれを。
偶数個の場合にはぴったり中央の値はありませんので、
中央付近の2つの値をコンマ区切りで昇順に出力してください。
ただし、範囲内に回文数がひとつもない場合は
'-'
を出力してください。
###発生している問題
入力の桁数が多くなって来ると(具体的には8桁以上)を超えて来ると、実行速度1秒を超えてエラーが出てしまいます。
###該当のソースコード
ruby:palindrome.rb
1 2def palindrome_middle(a,b) 3 4inputs = Array(a..b) 5 6palindrome = inputs.reject{ |num| num.to_s != num.to_s.reverse } 7 8 if palindrome.length % 2 == 0 && palindrome.length >= 1 9 idx1 = palindrome.length / 2 - 1 10 idx2 = idx1 + 1 11 print palindrome[idx1.floor],',',palindrome[idx2.floor] 12 elsif palindrome.length >= 1 13 idx = palindrome.length / 2 + 1 14 print palindrome[idx.floor - 1 ] 15 else 16 puts '-' 17 end 18 19end 20 21 22input = gets 23a,b = input.split(',').map(&:to_i) 24palindrome_middle(a,b) 25
###試したこと
処理の高速化を試みたのですが、配列を順番に処理したらこれが限界なのかなと思い、根本から書き直した方がいいのか、悩んでおります。
ぜひもっといいやり方がありましたら、ご教授願いたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。