第95回【Python】文字列
現在取り組んでいるのは、paiza ラーニング問題集「C ランクレベルアップメニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 95 回目です。
社内が暑い。サーバーや複数の PC からの放熱でとにかく暑い。クーラーをつけても LeoSaki(旦那)の席は奥ばった場所なので、なかなか冷気が訪れない。扇風機を独占させてもらっています。
それでは、今日も頑張ってみようと思います。
文字列
パイザ君の家の前では毎週日曜日に工事が行われます。この先 N 週間、工事が日曜日の何時に始まり、どれくらいの時間続くのかは分かっています。パイザ君は工事の間は家を離れようと思っているので、それぞれの日に工事が何時に終わるのかを知りたいと思いました。
工事が N 週間続くとして、各週日曜日の工事が始まる時刻と、工事が何時間何分続くのかに関する情報が与えられるので、工事が終わる時刻を 00:00 から 23:59 までの 24 時間表記で出力してください(ここで「工事が終わる時刻」とは、工事が h 時間 m 分続くとした場合、工事が始まった時刻の h 時間 m 分後を指します)。
入力された通りの順番で、各週の工事が終わる時刻を N 行出力してください。時刻の表記は入力と同じフォーマットに従うものとし、 24 時以降は翌日の時刻を記し、 00:00 から 23:59 までの間に収まるように、また、時や分を表す数字が1桁の場合には十の位を 0 で埋めてください。たとえば 24 時は 00:00、 27 時は 03:00 となります。
N
t_1 h_1 m_1
...
t_N h_N m_N
1 行目には工事が続く週の数を表す正整数 N が与えられ、 2 行目から (N + 1) 行目には工事が始まる時刻と、工事がどれくらい続くのかについての情報が、 “t_i h_i m_i" という形式で与えられます(1 ≤ i ≤ N)。これは時刻 t_i に工事が始まり、 h_i 時間 m_i 分工事が続くことを意味しています。t_i, h_i, m_i は各行において半角スペース区切りで与えられます。
t_i は 24 時間表記で時刻を表す文字列で、 “AB:XY" という形をしており、これは AB 時 XY 分を表します。ただし、今回は 00:00 から 23:59 までの 24 時間表記を採用し、時・分を表す数字が 1 桁の場合には十の位を 0 で埋めます。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≤ N ≤ 50
・ 0 ≤ h_i ≤ 23
・ 0 ≤ m_i ≤ 59
入力例
2
15:59 0 1
23:20 1 0
出力例
16:00
00:20
datetime を利用すれば結構簡単、な気がする。しかし、模範解答はとても面倒なことをしていた。
Python
import datetime
N = int(input())
for _ in range(N):
t,h,m = input().split()
tdata = datetime.datetime.strptime(t,'%H:%M')
tdata_add = tdata + datetime.timedelta(hours=int(h),minutes=int(m))
print(f'{tdata_add:%H:%M}')
Python(模範解答)
N = int(input())
for i in range(N):
t, h, m = input().split()
th = int(t[:2])
tm = int(t[3:])
h = int(h)
m = int(m)
ah = th + h
am = tm + m
if am >= 60:
ah += 1
am -= 60
if ah >= 24:
ah -= 24
ah = str(ah)
am = str(am)
if len(ah) == 1:
ah = "0" + ah
if len(am) == 1:
am = "0" + am
print(ah + ":" + am)
VBA
N = Cells(1, 1)
For i = 1 To N
THM = Split(Cells(i + 1, 1), " ")
T = Format(THM(0), "hh:mm")
Debug.Print Format(DateAdd("h", Val(THM(1)), DateAdd("n", Val(THM(2)), T)), "hh:mm")
Next
最後に
便利な関数を使って素早くコードを書くのも技術のうち、と思う。模範解答にあるやり方だと、読みづらいし、何をやっているか分かりづらい・・・こともないか。手間はかかっていそうだけれど。
よく問題を読んでみると、パイザ君は最大 50 週の日曜日に最大 23 時間 59 分、家を離れる必要があるようで、そうなったらもう文句を言ってもいい気がする。まぁ、パイザ君が勝手に家を離れるだけなので、家を離れるほどの騒音ではないのかもしれない。LeoSaki(旦那)なら我慢して家に閉じこもるかなぁ。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません