※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました
問題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
					