はじめに
ハンズオン学習の一環として、昨日からpaizaのプログラミング問題集をのそのそ取り組みだし、
Dランクの問題がすんなり解けるようになったので、本日はCランクを解いてみました。
使用言語はRubyです。
問題1:じゃんけんの結果
自分の回答
n = gets.to_i
win = 0
n.times do
alice, bob = gets.chomp.split
if (alice == "G" && bob == "C") || (alice == "C" && bob == "P") || (alice == "P" && bob == "G")
win += 1
end
end
puts win
問題2:プレゼント応募企画の実施
自分の回答
N,X,Y = gets.split.map(&:to_i)
(1..N).each do |i|
if i % X == 0 && i % Y == 0
puts "AB"
elsif i % X == 0
puts "A"
elsif i % Y == 0
puts "B"
else
puts "N"
end
end
設問を読んで、FizzBuzz問題だ!となったのが嬉しい
文章問題で、この感じ見覚えあるな〜とか思たり、
前はこういう式を用いて解いたな〜という感じで見当がつくようになると
自分の中に知識がストックされていっている実感があって楽しいです。
問題3:枠で囲む
自分の回答
n = gets.chomp
i = n.length + 2
i.times do
end
puts "+" * i
puts "+" "#{n}" "+"
puts "+" * i
出力例1
+++++++
+Paiza+
+++++++
躓いたところ
- まず、上下の"+"は、nに代入される文字数+2なので、
nの文字数を出すlengthメソッドを使い、それに+2をした数字をiに代入。
その数字分、”+”を出力するには...?というところで止まってしまい、
以下のようにしました。
i.times do
print i
end
しかしこれだと、puts "+" "#{n}" "+"の下にもう一度同じ式を書かなきゃいけない...?
もっと良い記述方法はないかと思ったのですが、
単純に"+"に変数iに代入した数字を掛け算すればいい
こんな簡単なことがパッと出てきませんでした...
なので、nを囲む上下の"+"は以下のように記述。
puts "+" * i
- puts "+" "#{n}" "+"で出力した文字が以下のように崩れる
+Paiza
+
末尾の"+"が改行されてしまいます。
これは単純に入力値をnに代入する時、chompメソッドをつけることで解消。
設問にも
入力は 1 行となり、末尾に改行が 1 つ入ります。
と丁寧に書いてあったのに見落としてました...
chompメソッドは入力値末尾の改行コードを消してくれるメソッドです。
慣れてくると、設問内容の読み飛ばしをしてしまう癖があるので、気をつけたいと思います。
問題4:渋滞の距離
自分の回答
N,M = gets.split.map(&:to_i)
count = 0
N.times do
A = gets.to_i
if A <= M
count += A
end
end
puts count
問題5:折り紙の貼り合わせ
自分の回答
N,D = gets.split.map(&:to_i)
overlap = 0
(N-1).times do
overlap += gets.to_i
end
i = N * D - overlap
volume = D * i
puts volume
今後の課題
- 設問の意味を理解するのに時間を使ってしまいがち
- 設問内容の読み飛ばしを気をつける
- 変数名
- 問題5のコード後半にある単純な計算式などの記述をもっと短縮させたい