LoginSignup
0
1

More than 3 years have passed since last update.

プログラマ脳を鍛える数学パズルQ07 日付の2進数変換

Posted at

問題概要

日付をyyyymmddの整数で表し、これを2進数に変換し、逆順に並べ、10進数に戻したとき、もとの日付と同じになるものを見つける。

Code

import datetime as dt

start = dt.datetime(1964, 10, 1)
end = dt.datetime(2020, 7, 24)

for days in range((end - start).days):
    day = start + dt.timedelta(days)
    daystr = day.strftime("%Y%m%d") #yymmdd
    daybin = bin(int(daystr))
    daybinr = str(daybin)[:1:-1] #2進数を表す頭の"0b"を除外して逆順にする
    daystrr = str(int(daybinr, 2))
    if daystr == daystrr:
        print(daystr)

補足

2進法や文字列の逆順については、Q01を参照。

日付の演算

datetime.timedelta で 秒、分、時間、日、週の演算ができる。
このモジュールはなぜか月、年は対応していなくて、これにはdateutil.relativedeltaという別のモジュールを使う。

参考:Pythonで翌日や翌月みたいな日付の計算をする


import datetime as dt
from dateutil.relativedelta import relativedelta

today = dt.datetime(2020, 4, 22, 14, 21, 50)

print(today + dt.timedelta(seconds = 5)) #2020-04-22 14:21:55
print(today - dt.timedelta(minutes = 30)) #2020-04-22 13:51:50
print(today + dt.timedelta(hours = 10)) #2020-04-23 00:21:50
print(today + dt.timedelta(days = 10)) #2020-05-02 14:21:50
print(today - dt.timedelta(weeks = 1)) #2020-04-15 14:21:50
print(today + relativedelta(months = 3)) #2020-07-22 14:21:50
print(today - relativedelta(years = 5)) #2015-04-22 14:21:50
0
1
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
1