技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

プログラマ脳を鍛える数学パズル 07

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

1964/10/10 から 2020/7/25 までの日付を

  1. 8 桁整数に直す
  2. 二進数に変換する
  3. 前後の並びを反転する
  4. 数字に戻す

この時 4 の結果と 1 が一致する日付を探す…というもの

これは多分日付ライブラリの使い方を問う問題

from datetime import date, timedelta

current_date = date(1964, 10, 10)
end_date = date(2020, 7, 25)

while end_date > current_date:
    date_int = int(current_date.strftime('%Y%m%d'))
    str_bin = bin(date_int)[2:]
    reverse = str_bin[::-1]
    if str_bin == reverse:
        # 二進数で回文すれば同じ日付やろ
        print(current_date)
    current_date = current_date + timedelta(days = 1)

date の関数が何使うか分からなかったので、help(date) すると、ドキュメントが現れる。
これは関数のドキュメントコメントなのだけど、インタラクティブシェルでこれが見れるのは Python ならでは。

あと、使い方に迷ったら REPL(Read Eval Print Loop. 読み取ってその場で解釈して print するループ。要するにシェルみたいに書いたその場で実行する環境)できるのも強い。
ちなみに Java は 10 から確か使えたはず。Scala は言うに及ばず、Ruby/PHP なんかもこれができる。というかVM持ってるような言語は大体できる。
ちょっと調べて見たら IGCC なんて C/C++ 用 REPL があった…公式言語仕様じゃないけどマジか…