日別アーカイブ: 2022年8月28日

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