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