LoginSignup
0
2

More than 5 years have passed since last update.

『Q01 10進数で回文』10進数で回文プログラマ脳を鍛える数学パズル

Last updated at Posted at 2017-05-11

一日一題以上やって行こうと思っています(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
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2