※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました
問題6 数字の文字列操作(時刻2) (paizaランク D 相当)
時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。与えられた時刻の 30 分後の時刻を同じ形式で出力してください。
- 入力される値
- 入力は以下のフォーマットで与えられます。
S
1 行目に文字列 S が与えられます。
S は “XX:XX” という形をしており、 “:” の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
- 期待する出力
- 与えられた時刻の 30 分後の時刻を “XX:XX” の形式で出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
- 条件
- すべてのテストケースにおいて、以下の条件をみたします。
・ S が表す時刻は最も遅くて 23:29
- 入力例1
-
01:02
- 出力例1
-
01:32
- 入力例2
-
12:31
- 出力例2
-
13:01
解答 (入力例2で解説)
#1行目の入力値を:(コロン)の部分で分割して変数に代入する["12","31"] strings = gets.split(':') #数値に変換して時を示す変数に代入する hours = strings[0].to_i #数値に変換して分を示す変数に代入する minutes = strings[1].to_i #30分加算した時に60分を超えたとき if minutes + 30 >= 60 #1時間増やす hours += 1 #30分減らす(30 - 60 ) minutes -= 30 #60分以上にならない時は30分加算する処理をする else minutes += 30 end #時間と分が10より小さい時に0埋めして(01:02)のように0つきの時間と分を表現できるようにする hours >= 10 ? hours : hours = "0#{hours}" minutes >= 10 ? hours : minutes ="0#{minutes}" #時間と分を:(コロン)を間に挟んで出力する puts hours.to_s + ":" + minutes.to_s