寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Pythonによる西暦の和暦変換

Pythonによる西暦の和暦変換です。
西暦の入力から和暦の元号を表示する問題と、その提出コードの解答例です。
paizaラーニングのレベルアップ問題集「日付セット」からの出典です。
paiza.jp
・問題
 西暦年y、月m、日付dが与えられるので、和暦の元号を表示してください。
 和暦は、以下の条件を確認し、西暦から変換してください。
 明治は1912年7月29日まで
 大正は1912年7月30日から1926年12月24日まで
 昭和は1926年12月25日から1989年1月7日まで
 平成は1989年1月8日から2019年4月30日まで
 令和は2019年5月1日から

・入力される値:
 整数y m dが次のように、スペース区切りで1行で入力されます。
   y m d
 入力値最終行の末尾に改行が1つ入ります。
 文字列は標準入力から渡されます。

・期待する出力
 以下のような形式で、答えを出力してください。
   G年m月d日
 Gは"明治"、"大正"、"昭和"、"平成"、"令和"のいずれかの元号です。
 今回の問題では、元号のみで和暦年は表示しません。

・条件
 すべてのテストケースにおいて、以下の条件をみたします。
   1873≦y≦3000
   1≦m≦12
   1≦d≦31
 回答時点よりも未来の日付の元号が与えられた場合も「令和」として表示してください。
 西暦y年m月d日は、西暦1873年1月1日から、西暦3000年12月31日の間の有効な日付です。
 1873年は改暦後であるため、旧暦について考慮する必要はありません。

僕が作成、提出したコードは、以下のとおりです。

#Pythonによる西暦の和暦変換
#https://paiza.jp/works/mondai
#提出コードの解答例
#https://neguse-atama.hatenablog.com
y, m, d = map(int, input().split())

new_m = m
new_d = d
if int(m) < 10:
    m = str(m)
    new_m = "0" + m
if int(d) < 10:
    d = str(d)
    new_d = "0" + d
    
date = str(y) + str(new_m) + str(new_d)
date = int(date)

if date >= 20190501: 
    print("令和年{}月{}日".format(m, d))
elif date >= 19890108:
    print("平成年{}月{}日".format(m, d))
elif date >= 19261225:
    print("昭和年{}月{}日".format(m, d))
elif date >= 19120730:
    print("大正年{}月{}日".format(m, d))
else:
    print("明治年{}月{}日".format(m, d))

Pythonのバージョンは、3.x に対応します。
解法としては、暦やカレンダーなどの先入観を捨ててから、単純にデジタル表示をイメージした上で、西暦年、月、日付の並びを、そのまま8桁の数値に置き換えて、それらの大小関係を比較してみました。

paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。