日別アーカイブ: 2022年9月1日

paizaCランクレベルアップ問題と解答(6) 整数と文字列 Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました

問題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