Programming note」カテゴリーアーカイブ

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

paizaCランクレベルアップ問題と解答(5) 数字の文字列操作(0埋め) Ruby

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

詳しくはコチラ

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

問題4 数字の文字列操作(0埋め) (paizaランク D 相当)

0 ~ 999 の整数 n が与えられます。 n が 3 桁の数である場合には n をそのまま出力し、 n が 2 桁の数である場合には n の先頭に 0 をひとつ、 1 桁の数である場合には n の先頭に 0 をふたつ加えたものを出力してください。

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

n

1 行目に整数 n が与えられます。

n

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

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

期待する出力
n を 3 桁で 0 埋めしたものを出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・0 ≤ n ≤ 999
入力例1
7
出力例1
007
入力例2
123
出力例2
123

解答  文字列として受け取らないとうまくいきません

#1行目の入力値(文字列)を変数に代入する 
strings = gets.chomp

#1桁の時00を追加する
  if strings.size == 1
     puts "00#{strings}"

#2桁の時0を追加する
  elsif strings.size == 2
     puts "0#{strings}"

#その他はそのまま出力する
  else puts strings
end

問題5 数字の文字列操作(時刻1) (paizaランク D 相当)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。入力された時刻を時と分に分け、時、分の順番で改行区切りで出力してください。

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

S

1 行目に文字列 S が与えられます。

S

S は “XX:XX” という形をしており、 “:” の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。 

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

期待する出力
入力された時刻を時と分に分け、時、分の順番で改行区切りで出力してください(2行出力する)。その際、入力値の十の位が 0 である場合には一の位だけ出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
入力例1
12:34
出力例1
12
34
入力例2
01:03
出力例2
1
3

解答 (入力例1で解説)

#1行目の入力値を:(コロン)の部分で分割して変数に数値として代入する[12, 34]
strings = gets.split(':').map(&:to_i)

#出力する
puts strings

※ポイント (入力例2で解説)

入力値01:03の場合
strings = gets.split(‘:’).map(&:to_i) で

stringsは[1,3]となる。これは数値に変換する時0は無視されるため
あとはputs stringsで出力する

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

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

詳しくはコチラ

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

問題1 整数と文字列 (paizaランク D 相当)

整数 n と、 n 個の整数 a_1, …, a_n が改行区切りで与えられるので、各 a_i (1 ≤ i ≤ n) の文字列としての長さを改行区切りで出力してください。

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

n
a_1
...
a_n

1 行目には整数 n が与えられ、 2 行目から (n + 1) 行目には n 個の整数 a_1, …, a_n が改行区切りで与えられます。 

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

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

期待する出力
各 a_i (1 ≤ i ≤ n) の文字列としての長さを改行区切りで出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・1 ≤ n ≤ 50
・各 a_i (1 ≤ i ≤ n) について、 0 ≤ a_i ≤ 10000
入力例1
2
10
100
出力例1
2
3
入力例2
3
1234
0
99
出力例2
4
1
2

解答 文字列として受け取らないとエラーになるので注意

#1行目の入力値(数値)を変数に代入する
n = gets.to_i
#n回繰り返し改行を打ち消してから受け取った入力値(文字列)の長さを出力する
n.times { puts gets.chomp.size }

または length と size は同じ(エイリアス)

#1行目の入力値(数値)を変数に代入する
n = gets.to_i
#n回繰り返し改行を打ち消してから受け取った入力値(文字列)の長さを出力する
n.times { puts gets.chomp.length }

問題2 部分文字列 (paizaランク D 相当)

文字 a と文字列 S が与えられるので、 S に a が含まれているかどうか判定し、含まれている場合には “YES” を、そうでない場合には “NO” を出力してください。

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

a
S

1 行目に文字 a が、 2 行目に文字列 S が与えられます。入力値最終行の末尾に改行が1つ入ります。

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

期待する出力
S に a が含まれている場合には “YES” を、そうでない場合には “NO” を出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a, S はそれぞれ大文字または小文字のアルファベットからなる文字、文字列
・S の長さは 1 以上 10 以下
入力例1
Z
Kirishima
出力例1
NO
入力例2
a
paiza
出力例2
YES

解答

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

#2行目の入力値を受け取り変数に代入
strings = gets.chomp

#変数xの文字列が存在したときYESと出力
  if strings.include?(x)
     puts "YES"

#変数xの文字列が存在しないときNOと出力する
  else puts "NO"
end

別解   3項演算子を使うと短く書くことができる

#1行目の入力値(文字列)を変数に代入する
x = gets.chomp

#2行目の入力値を受け取り変数xの文字列が存在したときYESと出力
#2行目の入力値を受け取り変数xの文字列が存在しないときNOと出力する
puts gets.chomp.include?(x) ? "YES" : "NO"

paizaCランクレベルアップ問題と解答(3) FINAL問題 標準入出力 Ruby

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

詳しくはコチラ

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

FINAL問題 標準入出力 (paizaランク C 相当)

毎年 5 月 1 日に、自分が運営している会社の社員一覧表を作成しています。表は年度ごとに更新され、社員の名前と年齢が載っています。
ところで、会社のメンバーは昨年度から全く変わらず、社員の誕生日は全員 7 月 7 日だったので、前年度の一覧表の年齢欄をそれぞれ +1 するだけで今年度の表が作れることにパイザ君は気づきました。

昨年度の一覧表が与えられるので、今年度の一覧表を出力してください。

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

N
s_1 a_1
...
s_N a_N

1 行目には社員の数を表す整数 N が与えられ、2 行目 〜 (N + 1) 行目の各行では、社員の名前を表す文字列 s_i とその社員の昨年度の年齢を表す整数 a_i が半角スペース区切りで与えられます(1 ≤ i ≤ N)。

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

期待する出力
入力された通りの順番で、社員 s_i の名前と、その社員の今年度の年齢を半角スペース区切りでN行出力してください。

s_1 (a_1 + 1)
...
s_N (a_N + 1)

末尾に改行を入れ、余計な文字、空行を含んではいけません。

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

・1 ≤ N ≤ 50
・s_i(1 ≤ i ≤ N)は 1 文字以上 10 文字以下の文字列
・s_i(1 ≤ i ≤ N)の各文字は英小文字または英大文字または数字
・18 ≤ a_i ≤ 120(1 ≤ i ≤ N)
入力例1
1
Yamada 30
出力例1
Yamada 31
入力例2
3
Tanaka 18
Sato 50
Suzuki 120
出力例2
Tanaka 19
Sato 51
Suzuki 121

解答 (入力例1で解説)

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

#各変数を空の配列で初期化する
name,age = [],[]

#n回繰り返す
n.times.map do |i|

#2行目の先頭の文字列を文字列としてnameに代入する(name = val)
#2行目の後ろの数値を数値として変数に代入する(このとき+1してから代入する:age = val.to_i + 1)
  gets.split.map.with_index { |val, i| i == 0 ? name = val : age = val.to_i + 1}

# 半角スペースを間に挟んで文字列(name)と文字列(age.to_s)を出力する
# age.to_sで文字列に変換する
  puts name + " " + age.to_s
end