プログラマ脳を鍛える数学パズルをひたすらPythonで:Q1[回文数]
プログラマ脳を鍛える
PaizaのスキルチェックにおいてBランクからなかなか抜け出せないので 気分転換も含めプログラマ脳を鍛える数学パズルをPythonで解いていこうと思います!
この書籍は基本的に一つの問題に対して3つのStepが用意されています。
- 問題の説明
- 解説とCodeの記載(Rubyが多い)
- Point説明&コラム
ざっと見た感じわかりやすく面白い。 まさに暇つぶしにもってこいって感じです。
問題[1]:回文数
問題内容は10進数でも2進数でも8進数でも上から読んでも下から読んでも同じ数字になること。
(例)
- 10進数:9
- 2進数:1001
- 8進数:11
では、9より上の10進数で回文数になる値は何? というのが問題です。
Code
まずはruby
num = 11 while true if num.to_s == num.to_s.reverse && num.to_s(8) == num.to_s(8).reverse && num.to_s(2) == num.to_s(2).reverse puts num break end num += 2 end
同じことをPythonで
num = 11 while True: if str(num) == str(num)[::-1]\ and str(format(num, 'b')) == str(format(num, 'b'))[::-1]\ and str(format(num, 'o')) == str(format(num, 'o'))[::-1]: print(num) break num += 2
もう少し簡単にしてみる
def palindrome(x): return str(x) == str(x)[::-1] n = 11 while True: if palindrome(n) and palindrome(format(n, 'b')) and palindrome(format(n, 'o')): print(n) break n += 2
and とか or で記述が長くなるときに改行で"\"を使うのをはじめて知りました...。