LoginSignup
0
2

More than 1 year has passed since last update.

paizaの標準出力メニュー全問のRubyでの解答例

Last updated at Posted at 2021-12-20

Paizaの標準出力メニュー全問のrubyでの解答例

PaizaのRuby言語の標準出力メニューの解答例を書いてみました。
一部正解にならないものもありますが、
その場合※で補足してあります。
初学者なのでかなり汚い部分、
プロから見ると慣例と外れている部分もあると思いますが、
お見逃しを。
あくまでもご参考までにお願いします。
※21年12月27日一部の答えを修正
STEP: 1 1 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step1

step1.rb
puts 813

STEP: 2 2 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step2

step2.rb
puts 8
puts 13

STEP: 3 3 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step3

step3.rb
puts 8
puts 1
puts 3

STEP: 4 10 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step4

step4.rb
#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

step5.rb
for i in 1..1000
  puts i
end

STEP: 6 2 つの数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step1

step6.rb
puts "1 1"

STEP: 7 3 つの数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step2

step7.rb
puts "8 1 3"

STEP: 8 10 個の数値を出力 (末尾に半角スペース有)
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step3

step8.rb
for i in 1..10
  print "#{i} "
end

※ 末尾に半角スペースがあるので
Putsで一つずつ入力すると
それを忘れて答えにならずに「あれ?」となる。

STEP: 9 10 個の数値を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__space_oneline_step4

step9.rb
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

step10.rb
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

step11.rb
puts "paiza"

STEP: 12 2 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step2

step12.rb
puts "paiza learning"

STEP: 13 入力された 2 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step3

step13.rb
s = gets
t = gets
puts s
puts t

STEP: 14 入力された 10 個の文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__string_output_step4

step14.rb
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

step15.rb
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

step16.rb
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

step17.rb
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

step18.rb
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

step19.rb
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

step20.rb
n,m = gets.split(' ')
puts "#{n},#{m}"

STEP: 21 バーティカルライン区切りで 3 つの文字列を出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step2

step21.rb
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

step22.rb
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

step23.rb
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

step24.rb
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

step25.rb
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

step26.rb
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

step27.rb
puts "0 8"
puts "1 3"

STEP: 28 3 * 3 の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step2

step28.rb
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

step29.rb
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

step30.rb
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

step31.rb
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

step32.rb
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

step33.rb
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

step34.rb
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

step35.rb
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

step36.rb
n = gets.to_f

puts n

STEP: 37 1 つの実数を出力 2
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step2

step37.rb
n = gets.to_f

puts n

STEP: 38 1 つの実数を出力 3
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_step3

step38.rb
n = gets.to_f

puts n.round(3)

※この答えは80点です。
答えを十で割って十でかけても0.0001を足しても
小数点以下第三位の0が無視されてしまいます。
いくら調べてもわからないので、
100点はもしかするとrubyの言語では無理なのかもしれません。

すみません。入れる方法ありました。

step40.rb
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

step39.rb
n,m = gets.split(' ').map(&:to_f)

puts n.round(m.to_i)

※前の答えと同様にこの答えも80点です。
100点はもしかするとrubyの言語では無理なのかもしれません。

こちらも同様にちゃんと入力できる答えがありました。

step39.rb
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

step40.rb
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が無視されるのでどうしても無理です。
ちゃんとした解答方法はあるのでしょうか?

step40.rb
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

step41.rb
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

step42.rb
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

step43.rb
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

step44.rb
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

step45.rb
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

step46.rb
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

step47.rb
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

step48.rb
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

step49.rb
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

step50.rb
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})"

※この答えも失敗します。数がデカすぎてチェックが当たっているのか確認できず、
正解を出すのを断念したので、答えに近いと思われるコードだけ貼って
お茶を濁しておきます。
そもそも罫線を何本引くかの正解がよくわからないし、
正解っぽい本数にしても正解にならないので、
断念せざるを得ませんでした。

0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2