Ruby」カテゴリーアーカイブ

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

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

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

詳しくはコチラ

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

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

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

入力される値
N

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

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

N

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

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

* N は自然数
* N は 0 以上 999 以下

入力例1
12
出力例1
12
入力例2
0
出力例2
0

解答  putsを使う場合

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

または  sprintfを使う場合

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

問題2 数値をゼロ埋めで出力 (paizaランク D 相当)

自然数 N が与えられます。N が 3 けたになるよう数値の前に 0 を埋めて出力してください。

入力される値
N

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

期待する出力
答えの数値を出力してください。

N

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

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

* N は自然数
* N は 0 以上 999 以下

入力例1
12
出力例1
012
入力例2
0
出力例2
000

解答  putsを使う場合  (問題1とほぼ同じ)

#1行目の入力値(数値)を受け取る
n = gets.to_i
#3桁まで0で埋めて表示する
puts("%03d".%(n))

または  sprintfを使う場合 (問題1とほぼ同じ)

#1行目の入力値(数値)を受け取る 
n = gets.to_i
#3桁まで0で埋めて表示する
puts sprintf("%03d",n)

問題3 複数の数値を半角スペース埋めで出力 (paizaランク D 相当)

自然数 N が与えられます。N 個の自然数が与えられるので、それぞれを数値 M_i について以下の処理を行ってください。
* M_i が 3 けたになるよう数値の前に半角スペースを埋めて出力してください。

入力される値
N
M_1
M_2
M_3
...
M_N

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

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

M_1
M_2
M_3
...
M_N

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

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

* N, M_iは自然数
* N は 0 以上 9,999 以下
* M_i は 0 以上 999 以下
入力例1
12
0
8
81
813
0
0
0
0
0
0
0
0
出力例1
0
8
81
813
0
0
0
0
0
0
0
0

解答

#1行目の入力値(数値)を受け取る
n = gets.to_i

#複数行の入力値を受け取り配列として代入していく↓
#["0", "8", "81", "813", "0", "0", "0", "0", "0", "0", "0", "0"]
numbers = readlines.map(&:chomp)


numbers.each do |i|
#半角スペースで埋めて3桁まで表示する 
  puts sprintf ("%3d".%(i))
end

または

n = gets.to_i
numbers = readlines.map(&:chomp)
#半角スペースで埋めて3桁まで表示する
numbers.each do |i|
puts ("%3d".%(i))
end

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

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

詳しくはコチラ

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

問題1 N 個の文字を半分ずつ出力 (paizaランク D 相当)

偶数 N が入力されます。まず、 1 行目には 1 以上 N / 2 以下の数値を半角スペース区切りですべて出力してください。次に、 2 行目には N / 2 + 1 以上 N 以下の数値を半角スペース区切りですべて出力してください。
各行の末尾には、半角スペースの代わりに改行を入れてください。

入力される値
N

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

期待する出力
答えの数値を出力してください。

1 2 3 ... N/2
N/2+1 N/2+2 ... N

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

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

* N は偶数
* N は 1 以上 1,000 以下

入力例1
8
出力例1
1 2 3 4
5 6 7 8

解答

# 入力値(数値)を受け取る 
n = gets.to_i

#[1, 2, 3, 4, 5, 6, 7, 8]を作成
numbers = [*1..n]

#(n / 2)の長さで分割する→[[1, 2, 3, 4], [5, 6, 7, 8]]
ary = numbers.each_slice(n / 2).to_a
# 出力する(このとき半角スペースを間に挟んで結合する) 
ary.size.times { |i| puts ary[i].join(' ') }

問題2 数値を異なる長さで 2 行出力 (paizaランク D 相当)

自然数 N, M が与えられます。1 行目には 1 以上 N 以下の数値を半角スペース区切りで出力してください。また、2 行目には 1 以上 M 以下の数値を半角スペース区切りで出力してください。
さらに、各行の末尾には、半角スペースの代わりに改行を入れてください。

入力される値
N M

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

期待する出力
答えの数値を出力してください。

1 2 3 ... N
1 2 3 ... M

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

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

* N, Mは 0 以上 1,000 以下
入力例1
3 5
出力例1
1 2 3
1 2 3 4 5

解答

# 半角スペース刻みの入力値を受け取り変数に代入
n, m = gets.split.map(&:to_i)
# 1からnまで半角スペースを間に挟んで出力する
puts [*1..n].join(' ')
# 1からmまで半角スペースを間に挟んで出力する
puts [*1..m].join(' ')

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

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

詳しくはコチラ

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

問題1 2 * 2 の出力 (paizaランク D 相当)

4 つの数値 0, 8, 1, 3 をこの順に、2 行 2 列の形で出力してください。
ただし、数値の間には半角スペースを、各行の末尾には、半角スペースの代わりに改行を入れてください。

入力される値
ありません。

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

期待する出力
答えの数値を出力してください。

0 8
1 3

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

条件
なし

解答

puts "0 8"
puts "1 3"

または

puts [["0 8"],["1 3"]]

問題2 3 * 3 の出力 (paizaランク D 相当)

9 個の数値が半角スペース区切りで入力されます。この数値を 3 行 3 列の形式で出力してください。
具体的には、入力された数値を N_1 , N_2 , N_3 , …, N_9 とするとき、 1 行目にはN_1 からN_3 を、2 行目には N_4 から N_6 を、3 行目には N_7 から N_9 を出力してください。
ただし、数値の間には半角スペースを、各行の末尾には、半角スペースの代わりに改行を入れてください。

入力される値
N_1 N_2 N_3 ... N_9

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

期待する出力
答えの数値を出力してください。

N_1 N_2 N_3
N_4 N_5 N_6
N_7 N_8 N_9

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

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

* 入力される数値はすべて 0 以上 1,000 以下

入力例1
0 1 2 3 4 5 6 7 8
出力例1
0 1 2
3 4 5
6 7 8

解答

numbers = gets.split.each_slice(3).to_a
numbers.size.times do |i|
  puts numbers[i].join(' ')
end

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

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

詳しくはコチラ

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

FINAL問題【特定の文字で区切り 1 行で出力】大きな数値を 3 けたごとにカンマ区切りで出力 2 (paizaランク C 相当)

大きな数値Nが入力されます。 位の小さい方から 3 けたごとにカンマ区切りで出力してください。
ただし、Nのけた数は 3 の倍数とは限りません。

入力される値
N

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

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

期待する出力
答えの数値を出力してください。

M

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

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

* Nは自然数
* Nは 0 以上 10 ^ 1,000 以下

入力例1
123456789
出力例1
123,456,789
入力例2
813
出力例2
813
入力例3
12345678901234567890
出力例3
12,345,678,901,234,567,890

解答 (入力例3で解説)

#↓入力値を文字列として受け取りバラバラにして反転する(gets.chars.reverse)
#["0", "9", "8", "7", "6", "5", "4", "3", "2", "1", "0", "9", "8", "7", "6", "5", "4", "3", "2", "1"]
numbers = gets.chars.reverse

#配列の長さの回数分繰り返す(20回) 
numbers.size.times do |i|

#3の倍数かつループの最後以外の時 
  if (i + 1) % 3 == 0 && i + 1 != numbers.size

#,(カンマ)を挿入する 
    numbers[i] << ','
  end
end
#繋げて反転して出力する
puts numbers.join.reverse

※ポイント

①入力値が3桁の倍数の桁ではないことに注意する

文字列として受け取りバラバラにしてから反転(numbers = gets.chars.reverse)

カンマを挿入していくことでどの桁でも対応をすることができる。

②あとは問題5と同じやり方をしてから最後にまた反転してもとに戻せば良い

#繋げて反転して出力する puts numbers.join.reverse

numbers[i] << ‘,’の意味

配列[ 1 , 2 ] << 3   は   配列[1,2,3]となるので

配列の3の倍数のあとに,(カンマ)を挿入しているよ

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

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

詳しくはコチラ

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

問題3 カンマ区切りで 10 個出力 1 (paizaランク D 相当)

10 個の数値が半角スペース区切りで与えられます。これらの数値すべて受け取り、そのまま出力してください。ただし、数値を出力した直後に必ずカンマを、末尾にはさらに改行も出力してください。

入力される値
N1 N2 N3 ... N10

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

期待する出力
答えの数値を出力してください。

N1,N2,N3,...,N10,

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

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

* 入力される数値はすべて 0 以上 1,000 以下
入力例1
0 1 2 3 4 5 6 7 8 9
出力例1
0,1,2,3,4,5,6,7,8,9,
入力例2
994 267 101 579 874 986 32 528 253 822
出力例2
994,267,101,579,874,986,32,528,253,822,

解答

#半角スペース刻みの入力値を受け取り配列を作成して変数に代入[5, 1] 
numbers = gets.split
#,(カンマ)を間に結合し、末尾にもカンマをつけて出力する 
puts numbers.join(',') + ","

問題4 カンマ区切りで 10 個出力 2 (paizaランク D 相当)

10 個の数値が半角スペース区切りで与えられます。これらの数値をカンマ区切りで出力してください。ただし、末尾にはカンマではなく改行を出力してください。

入力される値
N1 N2 N3 ... N10

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

期待する出力
答えの数値を出力してください。

N1,N2,N3,...,N10

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

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

* 入力される数値はすべて 0 以上 1,000 以下

入力例1
0 1 2 3 4 5 6 7 8 9
出力例1
0,1,2,3,4,5,6,7,8,9
入力例2
462 218 867 547 11 630 845 689 891 630
出力例2
462,218,867,547,11,630,845,689,891,630
#半角スペース刻みの入力値を受け取り配列を作成して変数に代入[5, 1] 
numbers = gets.split.map(&:to_i) 
#,(カンマ)を間に結合して出力する 
puts numbers.join(',')

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

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

詳しくはコチラ

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

問題1 カンマ区切りで 2 つ出力 (paizaランク D 相当)

2 つの数値が半角スペース区切りで与えられます。これらの数値をカンマ区切りで出力してください。

入力される値
N M

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

期待する出力
答えの数値を出力してください。

N,M

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

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

* 1 ≦ N, M ≦ 10

入力例1
5 1
出力例1
5,1
入力例2
2 1
出力例2
2,1

解答

#半角スペース刻みの入力値を受け取り配列を作成して変数に代入[5, 1]
numbers = gets.split.map(&:to_i)
#,(カンマ)を間に結合して出力する
puts numbers.join(',')

問題2バーティカルライン区切りで 3 つの文字列を出力 (paizaランク D 相当)

3 つの文字列が改行区切りで与えられます。
これらの文字列をバーティカルライン | 区切りで出力してください。

入力される値
S1
S2
S3

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

期待する出力
答えの数値を出力してください。

S1|S2|S3

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

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

* すべての文字列の長さは 1 以上 10 以下
* すべての文字列は英小文字からなる
入力例1
paiza
kirishima
kyoko
出力例1
paiza|kirishima|kyoko
入力例2
tvnmmtuzwn
yykehmocjk
vwsqozutch
出力例2
tvnmmtuzwn|yykehmocjk|vwsqozutch

解答

#半角スペース刻みの入力値を受け取り配列を作成して変数に代入[5, 1]
numbers = gets.split.map(&:to_i)
#|(パイプ)を間に結合して出力する
puts numbers.join('|')

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

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

詳しくはコチラ

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

問題1 1 行または 2 行の出力 (paizaランク D 相当)

数値 N (N = 1 または 2) が入力されます。N = 1 の場合は 1 を、N = 2 の場合は 1 と 2 を改行区切りで出力してください。

入力される値
N

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

期待する出力
答えの数値を出力してください。

* N = 1 のとき

1

* N = 2 のとき

1
2

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

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

* N = 1 または 2

入力例1
1
出力例1
1
入力例2
2
出力例2
1
2

解答

# 標準入力値を受け取り変数に代入
n = gets.to_i
# 1からnまで1行ずつ出力する
puts [*1..n]

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

数値 N が入力されます。1 から N までの数値をすべて、改行区切りで出力してください。

入力される値
N

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

期待する出力
答えの数値を出力してください。

1
2
...
N

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

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

* 1 ≦ N ≦ 5

入力例1
1
出力例1
1
入力例2
2
出力例2
1
2

解答

# 標準入力値を受け取り変数に代入
n = gets.to_i
# 1からnまで1行ずつ出力する
puts [*1..n]

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

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

詳しくはコチラ

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

問題4 入力された 10 個の文字列を出力 (paizaランク D 相当)

10 個の文字列 S_1, S_2, S_3, …, S_10 が改行区切りで与えられます。
これらの文字列をすべて、半角スペース区切りで出力してください。

入力される値
S_1
S_2
S_3
...
S_10

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

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

S_1 S_2 S_3 ... S_10

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

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

* S_i の長さは 1 以上 10 以下
* S_i は英小文字列

入力例1
q
bpdi
u
ky
meqt
rrnc
co
jjw
e
fwio
出力例1
q bpdi u ky meqt rrnc co jjw e fwio

解答 複数行の入力値を受け取り半角スペースを間に挟んで結合して出力する。

strings = readlines.map(&:chomp)
puts strings.join(' ')

FINAL問題【文字列の出力】入力された 10 個の文字列を出力 (paizaランク D 相当)

10 個の文字列 S_1, S_2, S_3, …, S_10 が半角スペース区切りで与えられます。
これらの文字列をすべて、改行区切りで出力してください。

入力される値
S_1 S_2 S_3 ... S_10

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

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

S_1
S_2
S_3
...
S_10

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

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

* S_i の長さは 1 以上 1,000 以下
* S_i は英小文字列

入力例1
a a a a a a a a a a
出力例1
a
a
a
a
a
a
a
a
a
a

解答  半角スペース刻みの入力値を受け取り、出力する。

strings = gets.split
puts strings

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

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

詳しくはコチラ

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

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

文字列 paiza を出力してください。

入力される値
入力はありません。

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

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

paiza

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

条件
なし

解答   putsで文字列を出力できる

puts 'paiza'

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

文字列 paizalearning を半角スペース区切りで出力してください。

入力される値
入力はありません。

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

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

paiza learning

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

条件
なし

解答  配列を文字列として作成

puts %w[paiza learning].join(' ')

または

puts ["paiza", "learning"].join(' ')

問題3 入力された 2 つの文字列を出力 (paizaランク D 相当)

2 つの文字列 S, T が入力されます。S, T を改行区切りで出力してください。

入力される値
S
T

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

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

S
T

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

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

* S, T の長さは 1 以上 10 以下
* S, T は英小文字列

入力例1
paiza
learning
出力例1
paiza
learning

解答  複数行の文字列の入力値を受け取り出力する。

strings = readlines.map(&:chomp)
puts strings