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

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

 

paizaCランクレベルアップ問題と解答(2)Ruby

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

詳しくはコチラ

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

問題4 入力の配列による保持 (paizaランク D 相当)

整数 n と n 個の数 a_1, …, a_n が改行区切りで与えられます。与えられた a_1, …, a_n の中で最も大きい数を出力してください。

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

n
a_1
...
a_n

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

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

期待する出力
a_1, …, a_n の中で最も大きい数を出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ n ≦ 50
・各 a_i(1 ≦ i ≦ n)について 1 ≦ a_i ≦ 50
入力例1
2
4
7
出力例1
7
入力例2
3
20
19
2
出力例2
20

解答

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

#2行目以降の数値を配列として変数に代入する
numbers = readlines.map(&:to_i)

#配列の最大値を出力する
puts numbers.max

問題5 半角スペース区切りでの出力 (paizaランク D 相当)

整数 n が与えられるので、n 回、半角スペース区切りで paiza と出力してください。

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

n

1行目に整数nが与えられます。
入力値最終行の末尾に改行が1つ入ります。

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

期待する出力
paiza と n 回、半角スペース区切りで出力してください。最後の paiza の後には半角スペースは入れず、改行を入れ、余計な文字、空行を含んではいけません。

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

・1 ≦ n ≦ 50

入力例1
2
出力例1
paiza paiza
入力例2
3
出力例2
paiza paiza paiza

解答 (入力例1で解説)

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

#['paiza'] * n →["paiza", "paiza"] #↑にしてから.join(' ')で半角スペースを間に挟んで結合して出力する puts (['paiza'] * n).join(' ')

問題6 改行区切りでの出力 (paizaランク D 相当)

整数 n が与えられ、その後に n 個の整数 a_1, …, a_n が半角スペース区切りで与えられるので、a_1, …, a_n をそのままの順番で改行区切りで出力してください。

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

n
a_1 a_2 ... a_n

1 行目には整数 n が与えられ、2 行目には半角スペース区切りの n 個の数 a_1, …, a_n が 1 行で与えられます。
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
a_1, …, a_n をそのままの順番で改行区切りで出力してください。

a_1
...
a_n

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

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

・1 ≦ n ≦ 50
・各 a_i(1 ≦ i ≦ n)について、1 ≦ a_i ≦ 50

入力例1
2
1 5
出力例1
1
5
入力例2
3
4 30 12
出力例2
4
30
12

解答

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

#2行目の半角スペース刻みの入力値を受け取り変数に代入する
numbers = gets.split.map(&:to_i)

#出力する
puts numbers

paizaCランクレベルアップ問題と解答(1)Ruby

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

詳しくはコチラ

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

問題1 単純な入出力 (paizaランク D 相当)

文字列 s が与えられるので s をそのまま出力してください。

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

s

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

期待する出力
入力された文字列をそのまま出力してください。

s

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

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

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

解答  入力値を受け取り出力する

print gets

または

puts gets

問題2 複数行にわたる出力 (paizaランク D 相当)

整数 n が与えられるので、 n 回、改行区切りで paiza と出力してください。

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

n

整数 n が 1 行で与えられます。入力値最終行の末尾に改行が1つ入ります。

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

期待する出力
n 回 paiza と改行区切りで出力してください。

paiza
...
paiza

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

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

・1 ≦ n ≦ 50

入力例1
2
出力例1
paiza
paiza
入力例2
5
出力例2
paiza
paiza
paiza
paiza
paiza

解答

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

#n回paizaを出力する
n.times { puts 'paiza' }

問題3 複数行にわたる入力 (paizaランク D 相当)

整数 n と n 個の整数 a_1, …, a_n が改行区切りで与えられるので、 a_1, …, a_n を与えられた順に、改行区切りで出力してください。

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

n
a_1
...
a_n

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

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
期待する出力
a_1, …, a_n を入力された順に改行区切りで出力してください。

a_1
...
a_n

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

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

・1 ≦ n ≦ 50
・各 a_i(1 ≦ i ≦ n)について 1 ≦ a_i ≦ 50
入力例1
2
1
2
出力例1
1
2
入力例2
3
10
5
39
出力例2
10
5
39

解答

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

#n回入力値(数値)を出力する
n.times { puts gets.to_i }

paizaLvアップ問題と解答(標準出力25)Ruby

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

詳しくはコチラ

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

FINAL問題【出力形式を指定して出力】ペアの数値の入った表を罫線入りで出力 2 (paizaランク C 相当)

自然数 H, W, A, B が与えられます。縦に H 行、横に W 行で計 H * W 個の (A, B) という形式で文字列を出力してください。ただし、横は | (半角スペース 2 つとバーティカルライン) 区切りで、縦は = で区切って出力してください。また、縦の文字列間で = を出力する際は、その上の行と文字数がそろうように出力します。また、A と B は 9 けたになるように半角スペースを数値の前(右詰め)に埋めて出力してください。

入力される値
H W A B

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

期待する出力
答えの文字列を出力してください。

(A_{1,1}, B_{1,1}) | (A_{1,2}, B_{1,2}) ... (A_{1,W}, B_{1,W})
=================== ... ====================
(A_{2,1}, B_{2,1}) | (A_{2,2}, B_{2,2}) ... (A_{2,W}, B_{2,W})
=================== ... ====================
...
...
...
=================== ... ====================
(A_{H,1}, B_{H,1}) | (A_{H,2}, B_{H,2}) ... (A_{H,W}, B_{H,W})

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

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

* H, W は 1 以上 100 以下
* A, B は 0 以上 999,999,999 以下

入力例1
2 3 7 8
出力例1
( 7, 8) | ( 7, 8) | ( 7, 8)
========================================================================
( 7, 8) | ( 7, 8) | ( 7, 8)
入力例2
3 2 999999999 0
出力例2
(999999999, 0) | (999999999, 0)
===============================================
(999999999, 0) | (999999999, 0)
===============================================
(999999999, 0) | (999999999, 0)

解答 (出力例2で解説します)

#1行目の入力値を数値として各変数に代入する 
h, w, a, b = gets.split.map(&:to_i)

#空の配列で初期化する 
answer = []

#(999999999,           0) ←のようにするために式展開を利用する 
#{"%9d" % a}, #{"%9d" % b}と書くことで9桁の半角スペース埋めを表現できる
strings = ["(#{"%9d" % a}, #{"%9d" % b})"]

#縦の回数分繰り返す
h.times do |i|

#(999999999,           0) | (999999999,          0)
#↑のようにするためstringsを横(w)の回数で掛けて.join(" | ")でつなぎanswerに挿入する 
  answer << ( strings * w).join(" | ")

#"="を間に挟む(ループの最後は"="を挟まないようにする) 
  answer << "=" * (25 * w - 3) if i + 1 != h
end

# 出力する
puts answer

paizaLvアップ問題と解答(標準出力24)Ruby

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

詳しくはコチラ

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

問題4 ペアの数値の入った表を罫線入りで出力 (paizaランク C 相当)

自然数 H, W, A, B が与えられます。縦に H 行、横に W 行で計 H * W 個の (A, B) という形式の文字列を出力してください。ただし、横は | (半角スペース 2 つとバーティカルライン) 区切りで、縦は = で区切って出力してください。また、縦の文字列間で = を出力する際は、その上の行と文字数が等しくなるように出力します。

入力される値
H W A B

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

期待する出力
答えの文字列を出力してください。

(A_{1,1}, B_{1,1}) | (A_{1,2}, B_{1,2}) ... (A_{1,W}, B_{1,W})
=================== ... ====================
(A_{2,1}, B_{2,1}) | (A_{2,2}, B_{2,2}) ... (A_{2,W}, B_{2,W})
=================== ... ====================
...
...
...
=================== ... ====================
(A_{H,1}, B_{H,1}) | (A_{H,2}, B_{H,2}) ... (A_{H,W}, B_{H,W})

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

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

* H, W は 1 以上 100 以下
* A, B は 0 以上 9 以下
入力例1
2 3 7 8
出力例1
(7, 8) | (7, 8) | (7, 8)
========================
(7, 8) | (7, 8) | (7, 8)
入力例2
3 2 0 0
出力例2
(0, 0) | (0, 0)
===============
(0, 0) | (0, 0)
===============
(0, 0) | (0, 0)

解答  (入力例1で解説)

#1行目の入力値を数値として各変数に代入する
h, w, a, b = gets.split.map(&:to_i)

#空の配列で初期化する
answer = []
#(7, 8) ←ようにするために式展開を利用する
strings = ["(#{a}, #{b})"]

#縦の回数分繰り返す
h.to_i.times do |i|

#(7, 8) | (7, 8) | (7, 8)
#↑のようにするためstringsを横の回数で掛けて(" | ")でつなぎanswerに挿入する
  answer << (strings * w).join(" | ")

#ループの最後以外に"="を間に挟む
  answer << "=" * (9 * w - 3) if i + 1 != h
end

# 出力する
puts answer

paizaLvアップ問題と解答(標準出力23)Ruby

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

詳しくはコチラ

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

問題3 九九表を罫線入りで出力 (paizaランク C 相当)

九九表を、横の数値間では | (半角スペース 2 つとバーティカルライン)、縦の数値間では = で区切って出力してください。
ただし、数値を出力する際は 2 けたになるよう半角スペース埋めで出力します。また、縦の数値間で = を出力する際は、その上の行と文字数が等しくなるように出力します。

入力される値
なし

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

期待する出力
答えの文字列を出力してください。

S1
S2
S3
...
S9

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

条件
なし

解答

#九九の計算結果に" | "でつないで末尾に"\n"(改行コード)を追加する
line = 1.upto(9).map do |i|

# i 段の答えを" | "で連結し末尾に"\n"(改行コード)を追加
  1.upto(9).map { |j| "%2d" % (i * j) }.join(" | ") + "\n"
  end

# 配列 line を "=" * 42 + "\n"(改行コード)でつなぐ
answer = line.join("=" * 42 + "\n")

# 出力する
puts answer

または

#空の配列を作成
answer = []

#9回繰り返す
9.times do |i|

#9回繰り返す
  9.times do |j|

# 前後に半角スペース" "を配置して
# 1 * 1, 1 * 2, 1 * 3, 1 * 4, 1 * 5, 1 * 6, 1 * 7, 1 * 8, 1 * 9,
# 2 * 1, 2 * 2, 2 * 3・・・,と計算結果を配列に挿入していく。
    answer << " " + ((i + 1) * (j + 1)).to_s + " "

# ループの8回まで|(パイプ)を付加する 
    answer << ('|') if j <= 7

# ループの最後(9の倍数回)に"\n"(改行コード)を付加する
    answer << "\n" if j == 8

  end

# 1の段と2の段の間、2の段と3の段の間のように、段の間に=42個と改行コード"\n"を付加する
    answer << ("=" * 42) + "\n"
  end

# 繋げて出力する
puts answer.join

 

paizaLvアップ問題と解答(標準出力22)Ruby

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

詳しくはコチラ

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

問題1 2 つの文字列を出力 (paizaランク D 相当)

文字列 S, T が与えられます。S + T = ST という形式で文字列を出力してください。

入力される値
S
T

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

期待する出力
答えの文字列を出力してください。

S + T = ST

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

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

* S, T の長さは 1 以上 100 以下
* S, T の各文字はアルファベット大文字または小文字である

入力例1
kirishima
kyoko
出力例1
kirishima + kyoko = kirishimakyoko
入力例2
S
T
出力例2
S + T = ST

解答

#2行の入力値を受け取る
a, b = readlines.map(&:chomp)
#問題文のようになるように記述する(半角スペースの数に注意する)
puts a + " + " + b + " = " + a + b

問題2 文字列と N 個の整数の出力 (paizaランク C 相当)

自然数 N, A, B が与えられます。(A, B) という形式の文字列を N 回、カンマと半角スペース区切りで出力してください。

入力される値
 

N A B

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

期待する出力
答えの文字列を出力してください。

(A_1, B_1), (A_2, B_2), ... , (A_N, B_N)

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

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

* N は 1 以上 100 以下
* A, Bは 10 以上 99 以下

入力例1
3 10 99
出力例1
(10, 99), (10, 99), (10, 99)
入力例2
2 33 44
出力例2
(33, 44), (33, 44)

解答

#1行目の入力値を文字列として受け取る
n,a,b = gets.split

#問題文のようになるように記述する(半角スペースの数に注意する)
puts (["(" + a + ", " + b + ")"] * n.to_i).join(',')

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

 (["(" + a + ", " + b + ")"])

↑の部分を出力すると["(10, 99)"]

* n.to_i).join(',')

↑の部分で

①nを文字列から数値に変換して

②n倍する(入力例1の場合3)

③.join(‘,’)でカンマを繋げた時に付加することで末尾にカンマを付けさせないようにする。

paizaLvアップ問題と解答(標準出力21)Ruby

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

詳しくはコチラ

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

問題4 数値を M けた半角スペース埋めで出力 (paizaランク D 相当)

自然数 N, M が与えられます。N が M けたになるよう数値の前に半角スペースを埋めて出力してください。

入力される値
N M

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

期待する出力
答えの数値を解答の形式に従った形で出力してください。

N

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

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

* N, Mは自然数
* N は 0 以上 999 以下
* M は 1 以上 10 以下
* (N のけた数) ≦ M
入力例1
813 4
出力例1
813
入力例2
813 8
出力例2
813

解答

#1行目の入力値(数値)を受け取る
n, m = gets.split.map(&:to_i)
#半角スペースで埋めてnをm桁まで表示する
puts("%#{m}d".%(n))

または

#1行目の入力値(数値)を受け取る
n, m = gets.split.map(&:to_i)
#半角スペースで埋めてnをm桁まで表示する
puts sprintf("%#{m}d".%(n))

FINAL問題【出力幅を指定して出力】N 個の数値を M けた半角スペース埋めで出力 (paizaランク D 相当)

自然数 N, M と N 個の自然数 A_1, A_2, …, A_N が与えられます。それぞれの数値が M けたになるよう数値の前に半角スペースを埋めて、改行区切りで出力してください。

入力される値
N M
A_1
A_2
A_3
...
A_N

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

期待する出力
答えの数値を解答の形式に従った形で出力してください。

A_1
A_2
A_3
...
A_N

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

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

* N, Mは自然数
* N は 1 以上 99 以下
* M は 1 以上 10 以下
* A_i は 0 以上 999 以下
* (A_i のけた数の最大値) ≦ M
入力例1
4 3
0
8
81
813
出力例1
0
8
81
813

解答

#1行目の入力値(数値)を受け取る
n, m = gets.split.map(&:to_i)

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

#数値を受け取り変数に代入する
  number = gets.to_i

#↑のnumbersの数値を半角スペースで埋めてm桁まで表示する
  puts ("%#{m}d".%("#{number}"))
end

または

#1行目の入力値(数値)を受け取る
n, m = gets.split(' ').map(&:to_i)

#半角スペースで埋めて3桁まで表示する
n.times do |i|

#数値を受け取り変数に代入する 
  number = gets.to_i

#↑のnumbersの数値を半角スペースで埋めてm桁まで表示する 
  puts sprintf("%#{m}d".%("#{number}"))
end