一日一題以上やって行こうと思っています(Ruby on Rails チュートリアルの息抜き)
書籍の回答がRubyらしくなかったのでやってみる。
#10進数、2進数、8進数のいずれも回文になる10進数の10以上で最小の値と求めよ。(引用:プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問)
問題を精査すると、調べる範囲が狭まっていくので良い問題だなと思ったのですが、最小値を見つけるためなので、このようにしてしまった。
kaibun.rb
(11..100000).each { |n|
if n.to_s == n.to_s.reverse &&
n.to_s(8) == n.to_s(8).reverse &&
n.to_s(2) == n.to_s(2).reverse
puts n
end
}
気付き
2進数では奇数はあり得ないなど、事前にふるいにかけることで計算量を減らすこと重要。
to_sメソッド使わない場合
10進数ー>2進数チェックって、こんな感じにしか書けんかった。
def decimal_to_binary_check(n)
a=[]
a<<0 if n ==0
while(n>0)
if n!=0
a<<n%2
n=n/2
end
end
a==a.reverse
end