Paizaの標準出力メニュー全問のrubyでの解答例
PaizaのRuby言語の標準出力メニューの解答例を書いてみました。
一部正解にならないものもありますが、
その場合※で補足してあります。
初学者なのでかなり汚い部分、
プロから見ると慣例と外れている部分もあると思いますが、
お見逃しを。
あくまでもご参考までにお願いします。
※21年12月27日一部の答えを修正
STEP: 1 1 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step1
puts 813
STEP: 2 2 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step2
puts 8
puts 13
STEP: 3 3 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step3
puts 8
puts 1
puts 3
STEP: 4 10 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step4
#813, 1, 2, 923874, 23648, 782356, 3256, 2342, 24324, 112
puts 813
puts 1
puts 2
puts 923874
puts 23648
puts 782356
puts 3256
puts 2342
puts 24324
puts 112
※最初に入力する文字列をコピペしておくと
数字の入力途中で候補の数字を入れてくれるので便利です!
STEP:5【改行あり出力】1,000 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_boss
for i in 1..1000
puts i
end
STEP: 6 2 つの数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step1
puts "1 1"
STEP: 7 3 つの数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step2
puts "8 1 3"
STEP: 8 10 個の数値を出力 (末尾に半角スペース有)
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step3
for i in 1..10
print "#{i} "
end
※ 末尾に半角スペースがあるので
Putsで一つずつ入力すると
それを忘れて答えにならずに「あれ?」となる。
STEP: 9 10 個の数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step4
for i in 1..9
print "#{i} "
end
puts 10
STEP:10 半角スペース区切りの出力】1,000 個の数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_boss
for i in 1..999
print "#{i} "
end
puts 1000
STEP: 11 1 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step1
puts "paiza"
STEP: 12 2 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step2
puts "paiza learning"
STEP: 13 入力された 2 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step3
s = gets
t = gets
puts s
puts t
STEP: 14 入力された 10 個の文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step4
s = Array.new(10)
for i in 1..10
s[i] = gets.chomp
end
for j in 1..9
print "#{s[j]} "
end
puts s[10]
STEP:15 文字列の出力】入力された 10 個の文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_boss
s = gets.split(' ')
for i in 1..10
puts s[i-1]
end
STEP: 16 1 行または 2 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__n_line_step1
N = gets.to_i
if N == 1
puts 1
else
puts 1
puts 2
end
STEP: 17 数行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__n_line_step2
n = gets.to_i
n.times {|i| puts i + 1}
STEP: 18 10 行以内の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__n_line_step3
n = gets.to_i
n.times {|i| puts i + 1}
STEP:19【n 行の出力】1,000 行以内の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__n_line_boss
n = gets.to_i
n.times {|i| puts i + 1}
STEP: 20 カンマ区切りで 2 つ出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step1
n,m = gets.split(' ')
puts "#{n},#{m}"
STEP: 21 バーティカルライン区切りで 3 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step2
s1 = gets.chomp
s2 = gets.chomp
s3 = gets
puts "#{s1}|#{s2}|#{s3}"
STEP: 22 カンマ区切りで 10 個出力 1
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step3
s = gets.split(' ')
10.times {|i| print "#{s[i]},"}
STEP: 23 カンマ区切りで 10 個出力 2
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step4
s = gets.split(' ')
9.times {|i| print "#{s[i]},"}
puts s[9]
STEP: 24 半角スペースとバーティカルライン区切りで 10 個出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step5
n = Array.new(10)
10.times {|i| n[i] = gets.chomp}
9.times {|j| print "#{n[j]} | "}
puts n[9]
STEP: 25 大きな数値を 3 けたごとにカンマ区切りで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step6
n = gets
a = n.scan(/.{1,#{3}}/)
puts a.join(',')
STEP:26【特定の文字で区切り 1 行で出力】大きな数値を 3 けたごとにカンマ区切りで出力 2
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_boss
n = gets.to_s
if n.size % 3 == 0
a = n.scan(/.{1,#{3}}/)
puts a.join(',')
elsif n.size % 3 == 1
b = n.scan(/.{1,#{1}}/)
print "#{b[0]},"
c = n.slice(1..(n.size))
d = c.scan(/.{1,#{3}}/)
print d.join(',')
else
e = n.scan(/.{1,#{2}}/)
print "#{e[0]},"
f = n.slice(2..(n.size))
g = f.scan(/.{1,#{3}}/)
print g.join(',')
end
※問題の判定だと違いますが、解答にかけるとちゃんと通ります。
この文章は当たっていればそれでいいという精神で書いてます。
STEP: 27 2 * 2 の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step1
puts "0 8"
puts "1 3"
STEP: 28 3 * 3 の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step2
n = gets.split(' ')
puts "#{n[0]} #{n[1]} #{n[2]}"
puts "#{n[3]} #{n[4]} #{n[5]}"
puts "#{n[6]} #{n[7]} #{n[8]}"
STEP: 29 九九表の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step3
9.times do|i|
8.times do |j|
print "#{(i+1)*(j+1)} "
end
puts (i+1)*9
end
STEP:30 n * n の 2 次元配列の表示】N * N の九九表の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_boss
n = gets.to_i
n.times do |i|
(n-1).times do |j|
print "#{(i+1)*(j+1)} "
end
puts (i+1) * (n)
end
STEP: 31 N 個の文字を半分ずつ出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step1
n = gets.to_i
(n / 2 - 1).times {|i| print "#{i + 1} "}
puts n/2
(n / 2 - 1).times {|j| print "#{(n / 2) + j + 1} "}
puts n
STEP: 32 数値を異なる長さで 2 行出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step2
n,m =gets.split(' ').map(&:to_i)
(n - 1).times {|i| print "#{i + 1} "}
puts n
(m - 1).times {|j| print "#{j + 1} "}
puts m
STEP: 33 直角三角形の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step3
n = gets.to_i
n.times do |i|
i.times {|j| print "#{j + 1} "}
puts i + 1
end
STEP: 34 すべての行の長さが不定な 2 次元配列の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step4
n = gets.to_i
m = gets.split(' ').map(&:to_i)
n.times do |i|
(m[i]-1).times {|j| print "#{j + 1} "}
puts m[i]
end
STEP: 35 【行によって長さが違う二次元配列の表示】すべての行の長さと値が不定な 2 次元配列の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_boss
n,m = gets.split(' ').map(&:to_i)
a = gets.split(' ').map(&:to_i)
b = gets.split(' ').map(&:to_i)
c = 0
d = 0
m.times do |i|
(b[c]-1).times do |j|
print "#{a[d]} "
d = d + 1
end
d = d + 1
puts a[d - 1]
c = c + 1
end
※この問題はc = 0, d =0 という
関数を使うことを思いつけるかどうかが鍵となるようです。
STEP: 36 1 つの実数を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step1
n = gets.to_f
puts n
STEP: 37 1 つの実数を出力 2
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step2
n = gets.to_f
puts n
STEP: 38 1 つの実数を出力 3
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step3
n = gets.to_f
puts n.round(3)
※この答えは80点です。
答えを十で割って十でかけても0.0001を足しても
小数点以下第三位の0が無視されてしまいます。
いくら調べてもわからないので、
100点はもしかするとrubyの言語では無理なのかもしれません。
すみません。入れる方法ありました。
n = gets.to_f
printf("%2.3f", n)
STEP: 39 1 つの実数を出力 4
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step4
n,m = gets.split(' ').map(&:to_f)
puts n.round(m.to_i)
※前の答えと同様にこの答えも80点です。
100点はもしかするとrubyの言語では無理なのかもしれません。
こちらも同様にちゃんと入力できる答えがありました。
n,m = gets.split(' ').map(&:to_f)
printf("%2.#{m.to_i}f", n)
STEP:40【実数をフォーマット指定して出力】複数の実数を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_boss
q = gets.to_i
n = Array.new(q)
m = Array.new(q)
q.times do |i|
n[i],m[i] = gets.split(' ').map(&:to_f)
puts n[i].round(m[i].to_i)
end
※この答えは10点です。
小数点以下の0が無視されるのでどうしても無理です。
ちゃんとした解答方法はあるのでしょうか?
q = gets.to_i
n = Array.new(q)
m = Array.new(q)
q.times do |i|
n[i],m[i] = gets.split(' ').map(&:to_f)
printf("%2.#{m[i].to_i}f", n[i])
puts ""
end
すみません。解き直しても90点にしかならないです。
なぜかがわかりません。
STEP: 41 数値を半角スペース埋めで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_step1
n = gets.to_i
if n > 99
puts n
elsif n > 9
puts " #{n}"
else
puts " #{n}"
end
※答えを見て、問題の意味がわかるという問題です。
せめてhmtlに空白を入れるなりして欲しいのですが…
STEP: 42 数値をゼロ埋めで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_step2
n = gets.to_i
if n > 99
puts n
elsif n > 9
puts "0#{n}"
else
puts "00#{n}"
end
STEP: 43 複数の数値を半角スペース埋めで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_step3
n = gets.to_i
m = Array.new(n)
n.times do|i|
m[i] = gets.to_i
if m[i] > 99
puts m[i]
elsif m[i] > 9
puts " #{m[i]}"
else
puts " #{m[i]}"
end
end
STEP: 44 数値を M けた半角スペース埋めで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_step4
n,m = gets.split(' ').map(&:to_s)
if m.to_i == 1
puts n.slice(n.size)
elsif m.to_i == 2
if n.to_i > 9
puts n
else
puts " #{n}"
end
else
if n.to_i > 99
(m.to_i - 3).times {print " "}
print n
elsif n.to_i > 9
(m.to_i - 2).times {print " "}
print n
else
(m.to_i - 1).times {print " "}
print n
end
end
STEP:45【出力幅を指定して出力】N 個の数値を M けた半角スペース埋めで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_boss
n,m = gets.split(' ').map(&:to_i)
a = Array.new(n)
n.times do |i|
a[i] = gets.to_s
if m == 1
puts a[i].slice(a[i].size)
elsif m == 2
if a[i].to_i > 9
puts a[i]
else
puts " #{a[i]}"
end
else
if a[i].to_i > 99
(m - 3).times {print " "}
puts a[i]
elsif a[i].to_i > 9
(m - 2).times {print " "}
puts a[i]
else
(m - 1).times {print " "}
puts a[i]
end
end
end
STEP: 46 2 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step1
s = gets.to_s.chomp
t = gets.to_s.chomp
puts "#{s} + #{t} = #{s}#{t}"
STEP: 47 文字列と N 個の整数の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step2
n,a,b = gets.split(' ').map(&:to_i)
(n-1) .times {print "(#{a}, #{b}), "}
print "(#{a}, #{b})"
STEP: 48 九九表を罫線入りで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step3
8.times do |i|
8.times do |j|
if (i + 1) * (j + 1) < 10
print " "
print (i + 1) * (j + 1)
else
print (i + 1) * (j + 1)
end
print "|"
end
if (i + 1) * 9 < 10
print " "
puts (i + 1) * 9
else
puts (i + 1) * 9
end
25.times {print "="}
puts "="
end
print " 9|"
7.times do |k|
print (k + 2) * 9
print "|"
end
puts "81"
※このコードはほぼほぼ答えと合致しますが、何故か答えが違うと出ます。
理由がわからないのでちょっとこの問題は保留にします。
STEP: 49 ペアの数値の入った表を罫線入りで出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step4
h,w,a,b = gets.split(' ').map(&:to_i)
c = 0
(h - 1).times do
(w - 1).times do |i|
print "("
if a > 9
print a
else
print " #{a}"
end
print ","
if b > 9
print b
else
print " #{b}"
end
print ")|"
c = c + 1
end
print "("
if a > 9
print a
else
print " #{a}"
end
print ","
if b > 9
print b
else
print " #{b}"
end
puts ")"
c.times {print "========"}
puts "========"
c = 0
end
(w - 1).times do
print "("
if a > 9
print a
else
print " #{a}"
end
print ","
if b > 9
print b
else
print " #{b}"
end
print ")|"
end
print "("
if a > 9
print a
else
print " #{a}"
end
print ","
if b > 9
print b
else
print " #{b}"
end
puts ")"
※この問題もほぼほぼ答え通りの結果が出たのではないかと思うのですが、
何故か間違い、どこが違うかがわからないので保留にします。
自由に書くメソッドをうまく使えば省略できるのかもしれませんが、
現段階ではメソッドの使い方がよくわかりません。
(次の問題をやることでsizeのメソッドを使えば解決できると気づきましたが、
えらい苦労したので、そのままこのコードを貼っておきます。
STEP 50 :【出力形式を指定して出力】ペアの数値の入った表を罫線入りで出力 2
h,w,a,b = gets.split(' ').map(&:to_i)
c = 0
(h - 1).times do
(w - 1).times do
print "("
(9 - a.to_s.size).times {print " "}
print "#{a},"
(9 - b.to_s.size).times {print " "}
print "#{b}) | "
c = c + 1
end
print "("
(9 - a.to_s.size).times {print " "}
print "#{a},"
(9 - b.to_s.size).times {print " "}
puts "#{b})"
c.times { print "======================="}
puts "======================"
c = 0
end
(w - 1).times do
print "("
(9 - a.to_s.size).times {print " "}
print "#{a},"
(9 - b.to_s.size).times {print " "}
print "#{b}) | "
end
print "("
(9 - a.to_s.size).times {print " "}
print "#{a},"
(9 - b.to_s.size).times {print " "}
puts "#{b})"
※この答えも失敗します。数がデカすぎてチェックが当たっているのか確認できず、
正解を出すのを断念したので、答えに近いと思われるコードだけ貼って
お茶を濁しておきます。
そもそも罫線を何本引くかの正解がよくわからないし、
正解っぽい本数にしても正解にならないので、
断念せざるを得ませんでした。