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

paizaLvアップ問題と解答(標準入力8)Ruby

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

詳しくはコチラ

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

問題1 1 つの整数の入力 (paizaランク D 相当)

整数 a が与えられるので a を出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a が 1 行で与えられます。

a

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a を 1 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a は 1 以上 10,000 以下の整数

入力例1
813
出力例1
813

解答

numbers = gets.to_i
puts numbers

問題2 2 つの整数の半角スペース区切りの入力 (paizaランク D 相当)

整数 a, b が半角スペース区切りで与えられるので、改行区切りにして 2 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a, b が 半角スペース区切りで与えられます。

a b

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a, b を 2 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a
b
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a, b は 1 以上 10,000 以下の整数
入力例1
8 13
出力例1
8
13

解答 半角スペース刻みで与えられる入力値を配列にして受け取り→[8, 13]putsで出力する

numbers = gets.split.map(&:to_i)
puts numbers

問題35 つの整数の半角スペース区切りの入力 (paizaランク D 相当)

整数 a_1, a_2, a_3, a_4, a_5 が半角スペース区切りで与えられるので、改行区切りにして 5 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a_1, a_2, a_3, a_4, a_5 が 半角スペース区切りで与えられます。

a_1 a_2 a_3 a_4 a_5

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a_1, a_2, a_3, a_4, a_5 を 5 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_1
a_2
a_3
a_4
a_5
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a_1, a_2, a_3, a_4, a_5 は 1 以上 10,000 以下の整数
入力例1
2 0 8 1 3
出力例1
2
0
8
1
3

解答 半角スペース刻みで与えられる入力値を配列にして受け取り→[2, 0, 8, 1, 3]putsで出力する

numbers = gets.split.map(&:to_i) 
puts numbers

paizaLvアップ問題と解答(標準入力7)Ruby

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

詳しくはコチラ

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

問題4 100 行の整数の入力 (paizaランク D 相当)

整数 a_1, a_2, … , a_99, a_100 が 100 行で与えられるので a_1, a_2, … , a_99, a_100 を 100 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a_1, a_2, … , a_99, a_100 が 100 行で与えられます。

a_1
a_2
...
a_99
a_100

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a_1, a_2, … , a_99, a_100 を 100 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_1
a_2
...
a_99
a_100
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a_1, a_2, ... , a_99, a_100 は 1 以上 10,000 以下の整数
入力例1
4090
4199
9064
6517
9620
4155
5688
8290
819
8733
4409
556
6223
6231
6625
6413
2680
3673
7074
1685
1173
5231
79
1563
111
2777
258
1499
2293
8928
8159
939
4871
4535
5801
6821
6424
9405
5510
2836
9544
3251
5292
6832
7779
6457
87
5800
8807
6286
4921
5469
8405
8971
2315
4291
6946
991
4564
5922
8021
5101
8390
7023
7458
9225
8617
92
4249
4640
1314
2197
605
7658
7667
5680
9998
3050
5911
2892
9780
5342
692
6618
5590
2901
2113
1667
7247
8755
150
6878
9835
554
9970
7940
452
7535
9976
4574
出力例1
4090
4199
9064
6517
9620
4155
5688
8290
819
8733
4409
556
6223
6231
6625
6413
2680
3673
7074
1685
1173
5231
79
1563
111
2777
258
1499
2293
8928
8159
939
4871
4535
5801
6821
6424
9405
5510
2836
9544
3251
5292
6832
7779
6457
87
5800
8807
6286
4921
5469
8405
8971
2315
4291
6946
991
4564
5922
8021
5101
8390
7023
7458
9225
8617
92
4249
4640
1314
2197
605
7658
7667
5680
9998
3050
5911
2892
9780
5342
692
6618
5590
2901
2113
1667
7247
8755
150
6878
9835
554
9970
7940
452
7535
9976
4574

解答 readlines.map(&:to_i)で複数行の入力値(数値)を受け取り変数に代入

numbers = readlines.map(&:to_i)
puts numbers

問題5 1,000行の整数の入力

整数 a_1, a_2, … , a_999, a_1000 が 1,000 行で与えられるので a_1, a_2, … , a_999, a_1000 を 1,000 行で出力してください。

期待する出力

a_1, a_2, … , a_999, a_1000 を 1,000 行で出力してください。

入力例  (・・・で途中省略しています。)

1189
8004
7243
.
.
.

5095

期待する出力(・・・で途中省略しています。)

1189
8004
7243
.
.
.

5095

解答 readlines.map(&:to_i)で複数行の入力値(数値)を受け取り変数に代入

numbers = readlines.map(&:to_i)
puts numbers

FINAL問題  1,000個の整数の半角スペース区切りの入力

整数 a_1, a_2, … , a_999, a_1000 が半角スペース区切りで与えられるので、改行区切りにして 1000 行で出力してください。

期待する出力

a_1, a_2, … , a_999, a_1000 を 1000 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

入力例

5294 3387 953 7129 ・・・ 4344

期待する出力

5294 3387 953 7129 ・・・ 4344

解答 readlines.map(&:to_i)で複数行の入力値(数値)を受け取り変数に代入

numbers = readlines.map(&:to_i)
puts numbers

paizaLvアップ問題と解答(標準入力6)Ruby

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

詳しくはコチラ

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

問題1 1 行の整数の入力 (paizaランク D 相当)

整数 a が 1 行で与えられるので a を 1 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a が 1 行で与えられます。

a

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a を 1 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a は 1 以上 10,000 以下の整数

入力例1
813
出力例1
813

解答 gets.to_iで入力値(数値)を受け取り変数に代入

numbers = gets.to_i
puts numbers

問題2 2 行の整数の入力 (paizaランク D 相当)

整数 a, b が 2 行で与えられるので a, b を 2 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a, b が 2 行で与えられます。

a
b

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a と b を 1 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a
b
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a, b は 1 以上 10,000 以下の整数

入力例1
81
3
出力例1
81
3

解答 readlines.map(&:to_i)で複数行の入力値(数値)を受け取り変数に代入

numbers = readlines.map(&:to_i)
puts numbers

問題3 5 行の整数の入力 (paizaランク D 相当)

整数 a_1, a_2, a_3, a_4, a_5 が 5 行で与えられるので a_1, a_2, a_3, a_4, a_5 を 5 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
整数 a_1, a_2, a_3, a_4, a_5 が 5 行で与えられます。

a_1
a_2
a_3
a_4
a_5

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a_1, a_2, a_3, a_4, a_5 を 5 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_1
a_2
a_3
a_4
a_5
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a_1, a_2, a_3, a_4, a_5 は 1 以上 10,000 以下の整数
入力例1
1
2
3
4
5
出力例1
1
2
3
4
5

解答 readlines.map(&:to_i)で複数行の入力値(数値)を受け取り変数に代入

numbers = readlines.map(&:to_i)
puts numbers

paizaLvアップ問題と解答(標準入力5)Ruby

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

詳しくはコチラ

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

問題3 半角スペース区切りの 3 つの入力 (paizaランク D 相当)

文字列 s_1, s_2, s_3 が半角スペースで区切られて 1 行で与えられます。
各文字列を出力するごとに改行し 3 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s_1, s_2, s_3 が半角スペースで区切られて 1 行で与えられます。

s_1 s_2 s_3

入力値最終行の末尾に改行が1つ入ります。

文字列は標準入力から渡されます。

期待する出力
入力された文字列 s_1, s_2, s_3 をそれぞれ改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

s_1
s_2
s_3
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s_1, s_2, s_3 は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
good morning paiza
出力例1
good
morning
paiza

解答 #半角スペース刻みで与えられる入力値を配列にして受け取る→[“good”, “morning”, “paiza”]それをputsで出力する

#半角スペース刻みで与えられる入力値を配列にして受け取る→["good", "morning", "paiza"]
strings = gets.split
#出力する
puts strings

問題4 半角スペース区切りの 10 個の入力 (paizaランク D 相当)

文字列 s_1, s_2, … s_9, s_10 が半角スペースで区切られて 1 行で与えられます。
各文字列を出力するごとに改行し 10 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s_1, s_2, … s_9, s_10 が半角スペースで区切られて 1 行で与えられます。

s_1 s_2 ... s_9 s_10

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
入力された文字列 s_1, s_2, … s_9, s_10 をそれぞれ改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

s_1
s_2
...
s_9
s_10

条件

すべてのテストケースにおいて、以下の条件をみたします。

・s_1, s_2, … s_9, s_10 は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
VypymzW25l 3xsXWAK NYwbs2MRC kh4 mr38o8W9 94 fEJ 6THlW fJFTy n
出力例1
VypymzW25l
3xsXWAK
NYwbs2MRC
kh4
mr38o8W9
94
fEJ
6THlW
fJFTy
n

解答 #半角スペース刻みで与えられる入力値を配列にして受け取る→[“VypymzW25l”, “3xsXWAK”, “NYwbs2MRC”, “kh4”, “mr38o8W9”, “94”, “fEJ”, “6THlW”, “fJFTy”, “n”]
それをputsで出力する

#半角スペース刻みで与えられる入力値を配列にして受け取る→["VypymzW25l", "3xsXWAK", "NYwbs2MRC", "kh4", "mr38o8W9", "94", "fEJ", "6THlW", "fJFTy", "n"]
 strings = gets.split
#出力する
puts strings

FINAL問題 半角スペース区切りの 1,000 個の入力

文字列 s_1, s_2, … s_999, s_1000 が半角スペースで区切られて 1 行で与えられます。
各文字列を出力するごとに改行し 1,000 行で出力してください。

期待する出力

入力された文字列 s_1, s_2, … s_999, s_1000 をそれぞれ改行区切りで出力してください。また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

入力例 (・・・で途中省略しています。)

FCrj 7A7SbR9i S ・・・pNeapDUhm

期待する出力 (・・・で途中省略しています。)

FCrj
7A7SbR9i
S
.
.
.
pNeapDUhm

解答

  1. 文字列を半角スペースごとに分割する
  2. putsで出力する
strings = gets.split
puts strings

paizaLvアップ問題と解答(標準入力4)Ruby

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

詳しくはコチラ

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

問題1 1 つの入力 (paizaランク D 相当)

半角スペースを含まない文字列 s が 1 行で与えられるので、そのまま出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s が 1 行で与えられます。

s

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
入力された文字列 s をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

s

 

条件
すべてのテストケースにおいて、以下の条件をみたします。

・sは数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
hello
出力例1
hello

解答

#文字列を変数に代入
strings = gets.chomp
#出力する
puts strings

問題2 半角スペース区切りの 2 つの入力 (paizaランク D 相当)

文字列 s_1, s_2 が半角スペースで区切られて 1 行で与えられます。
各文字列を出力するごとに改行し 2 行で出力してください。

入力される値
以下の形式で標準入力によって与えられます。
半角スペースで区切られた文字列 s_1, s_2 が 1 行で与えられます。

s_1 s_2

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
入力された文字列 s_1, s_2 をそれぞれ改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

s_1
s_2
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s_1, s_2 は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列
入力例1
hello paiza
出力例1
hello
paiza

解答 gets.splitで半角スペース刻みで与えられる入力値を配列にして受け取る→["hello", "paiza"]

#半角スペース刻みで与えられる入力値を配列にして受け取る→["hello", "paiza"]
strings = gets.split
#出力する
puts strings

paizaLvアップ問題と解答(標準入力3)Ruby

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

詳しくはコチラ

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

2 つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

文字列Hello paizaを、半角スペースで分割して出力してください。

入力される値
なし

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
Hello paizaを半角スペースで区切り、区切られた文字列を改行区切りにして 2 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

Hello
paiza

解答  改行コードを途中で挟んで出力する

puts "Hello " + "\n" + "paiza "

3 つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

文字列He likes paizaを、半角スペースで分割して出力してください。

入力される値
なし

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
He likes paizaを半角スペースで区切り、区切られた文字列を改行区切りにして 3 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

He
likes
paiza

解答 改行コードを途中で挟んで出力する

puts "He " + "\n" + "likes " + "\n" + "paiza "

【半角スペース区切りでの文字列の分割】5 つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

文字列one two three four fiveを、半角スペースで分割して出力してください。

入力される値
なし

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
one two three four fiveを半角スペースで区切り、区切られた文字列を改行区切りにして 5 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

one
two
three
four
five
条件
なし

解答 %wを使うことで簡単にできる

puts %w[one two three four five ]

paizaLvアップ問題と解答(標準入力2)Ruby

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

詳しくはコチラ

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

問題4 10 行の入力 (paizaランク D 相当)

s_1, s_2, s_3, … s_9, s_10 の 10 個の文字列が与えられます。
文字列を与えられた順番通りに出力してください。

入力例1

one
two
three
four
five
six
seven
eight
nine
ten

出力例1

one
two
three
four
five
six
seven
eight
nine
ten

解答

# 複数行の入力値を受け取り変数に配列として代入していく
strings = readlines(chomp: true)
# 配列をputsで出力すると1行ずつ出力できる
puts strings

問題5 1,000 行の入力

s_1, s_2, s_3, … s_999, s_1000 の 1,000 個の文字列が与えられます。
文字列を与えられた順番通りに出力してください。

入力例1   (・・・で途中省略しています。)

paiza0
paiza1
paiza2
.
.
.

paiza999

期待する出力 (・・・で途中省略しています。)

paiza0
paiza1
paiza2
.
.
.

paiza999

解答 問題1と同じでできる

# 複数行の入力値を受け取り変数に配列として代入していく
strings = readlines(chomp: true)
# 配列をputsで出力すると1行ずつ出力できる 
puts strings

PaizaLvアップ問題と解説(Ruby)その11

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

詳しくはコチラ

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

問題1 改行区切りでの N 個の整数の入力 (paizaランク D 相当)

1 行目で整数 N が与えられます。
2 行目以降で、N 個の整数 a_1, … , a_N が N 行で与えられます。
a_1, … , a_N を改行区切りで出力してください。

入力される値
以下の形式で標準入力によって与えられます。
1 行目に整数 N が、2 行目から (N + 1) 行目に整数 a_1, … , a_N が N 行で与えられます。

N
a_1
...
a_N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a_1, … , a_N を改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_1
...
a_N

 

条件
すべてのテストケースにおいて、以下の条件をみたします。

・入力はすべて整数
・1 ≦ N ≦ 100
・1 ≦ a_i ≦ 10,000 (1 ≦ i ≦ N)
入力例1
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
出力例1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

解答 1行目の入力値(数値)を受け取り変数に代入する
20回1行ずつ入力値を出力することを繰り返す

n = gets.to_i
n.times { puts gets.to_i }

問題2 2 行目で与えられる N 個の整数の入力 (paizaランク D 相当)

1 行目で整数 N が与えられます。
2 行目で、N 個の整数 a_1, … , a_N が半角スペース区切りで与えられます。
a_1, … , a_N を改行区切りで出力してください。

入力される値
以下の形式で標準入力によって与えられます。
1 行目に整数 N が、2 行目に整数 a_1, … , a_N が半角スペース区切りで与えられます。

N
a_1 ... a_N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a_1, … , a_N を改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_1
...
a_N
条件
すべてのテストケースにおいて、以下の条件をみたします。

・入力はすべて整数
・1 ≦ N ≦ 100
・1 ≦ a_i ≦ 10,000 (1 ≦ i ≦ N)
入力例1
6
6561 3785 6338 9568 4956 557

出力例1
6561
3785
6338
9568
4956
557

解答

n = gets.to_i 
numbers = gets.split.map(&:to_i)
n.times { |i| puts numbers[i] }

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

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

詳しくはコチラ

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

FINAL問題 文字列 (paizaランク C 相当)

パイザ君の家の前では毎週日曜日に工事が行われます。この先 N 週間、工事が日曜日の何時に始まり、どれくらいの時間続くのかは分かっています。パイザ君は工事の間は家を離れようと思っているので、それぞれの日に工事が何時に終わるのかを知りたいと思いました。

工事が N 週間続くとして、各週日曜日の工事が始まる時刻と、工事が何時間何分続くのかに関する情報が与えられるので、工事が終わる時刻を 00:00 から 23:59 までの 24 時間表記で出力してください(ここで「工事が終わる時刻」とは、工事が h 時間 m 分続くとした場合、工事が始まった時刻の h 時間 m 分後を指します)。

入力される値
入力は以下のフォーマットで与えられます。

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 行出力してください。時刻の表記は入力と同じフォーマットに従うものとし、 24 時以降は翌日の時刻を記し、 00:00 から 23:59 までの間に収まるように、また、時や分を表す数字が1桁の場合には十の位を 0 で埋めてください。たとえば 24 時は 00:00、 27 時は 03:00 となります。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≤ N ≤ 50
・ 0 ≤ h_i ≤ 23
・ 0 ≤ m_i ≤ 59

入力例1
1
13:00 1 30
出力例1
14:30
入力例2
2
15:59 0 1
23:20 1 0
出力例2
16:00
00:20

解答  (入力例2で解説)

#1行目の入力値(数値)を変数に代入する
n = gets.to_i

#n回繰り返す
n.times do
  
# timeに[15,59]というように:(コロン)の部分で分割して配列として代入していく
# hに0、mに1というように数値として代入する
  time,h,m = gets.split.map.with_index { |val,i| i == 0 ? val.split(':') : val.to_i }

#数値に変換して時を示す変数に代入する(このときhを加算)
  hours = (time[0].to_i + h)

#数値に変換して分を示す変数に代入する(このときmを加算)
  minutes = (time[1].to_i + m)

#分が60以上の時
  if minutes >= 60

#1時間増やす
     hours += 1

#60分減らす
     minutes -= 60
  end
#時間が24以上の時−24する
  hours -= 24 if hours >= 24

#時間と分が10より小さい時に0埋めして(01:02)のように0つきの時間と分を表現できるようにする 
  hours = "0#{hours}" if hours < 10 
  minutes ="0#{minutes}" if minutes < 10

#時間と分を:(コロン)を間に挟んで出力する 
  puts hours.to_s + ":" + minutes.to_s 
end

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