過去問http://atcoder-scores.herokuapp.com/を解きます。
ABC055A – Restaurant
問題
すぬけくんはレストランに通うのが好きです。すぬけくん行きつけのレストランは何を食べても 1食 800で、15食食べる毎にその場で200円もらえます。
すぬけくんは今までで合計N食食べました。 今までに払った金額をx円、レストランからもらった金額をy円として、x−yを求めなさい。
自分の回答
def restaurant(n)
y = n / 15
p 800 * n - 200 * y
end
n = gets.chomp.to_i
restaurant(n)
食べた量(n)に800円をかけ、nを15で割ったものに200円をかけて引けば良いです。
ABC056A – Honest Or Dishonest
問題
シカのAtCoDeerくんとTopCoDeerくんが「正直者か嘘つきか」ゲームをしています。 このゲームでは、正直者は常にほんとうのことを言い、嘘つきは常に嘘を言います。 文字aとbが入力として与えられます。これらはそれぞれ H
か D
のどちらかです。
a=H
のとき、AtCoDeerくんは正直者です。a=D
のとき、AtCoDeerくんは嘘つきです。b=H
のとき、AtCoDeerくんは「TopCoDeerくんは正直者だ」と発言しています。b=D
のとき、AtCoDeerくんは「TopCoDeerくんは嘘つきだ」と発言しています。
これらから判断して、TopCoDeerくんが正直者かどうか判定してください。
自分の回答
def honest(a, b)
puts a == b ? "H" : "D"
end
a, b = gets.chomp.split(" ")
honest(a, b)
問題文を理解するのに少し時間がかかりました。
要は、aとbの値が同じ時は”H”で、aとbが違う時は”D”を出力すれば良いです。また、パターンは4通りしかありません。
a = H,b = H の時、AtCoDeerは正直者で「TopCoDeerくんは正直者だ」と発言しているので、TopCoDeerくんは正直者となるので、答えは”H”です。
a = H,b = D の時、AtCoDeerは正直者で「TopCoDeerくんは嘘つきだ」と発言しているので、TopCoDeerくんは正直者となるので、答えは”D”です。
a = D,b = H の時、AtCoDeerは嘘つきで「TopCoDeerくんは正直者だ」と発言しているので、TopCoDeerくんは嘘つきとなるので、答えは”D”です。
a = D,b = D の時、AtCoDeerは嘘つきで「TopCoDeerくんは嘘つきだ」と発言しているので、TopCoDeerくんは正直者となるので、答えは”H”です。
ABC057A – Remaining Time
問題
イルカはプログラミングコンテスト好きで、今日はAtCoderのコンテストに参加します。
現在時刻は、24時間表記 (0:00〜23:59)で A時ちょうどであり、コンテストがちょうど B時間後に始まります。
コンテストの開始時刻は、24時間表記で何時ちょうどでしょうか?
自分の回答
def time(a, b)
time = a + b
if time >= 24
time = time - 24
end
puts time
end
a, b = gets.chomp.split(" ").map(&:to_i)
time(a, b)
a + bをtimeとして、24以上であったらtimeから24を引いて出力します。自分で書いていて、あんまりコードはきれいじゃないなと思いました。
もっとよくする
def time(a, b)
time = a + b
puts time % 24
end
a, b = gets.chomp.split(" ").map(&:to_i)
time(a, b)
他の方のコードを見ると、24で割ったあまりを出力するのが、一番簡単そうですね。
例えば、timeが9の時は、0余り9となり、出力は9になります。timeが25の時は、1余り1となり、1が出力される形になります。
ABC058A – ι⊥l
問題
3本の柱が等間隔に並んでいます。柱の高さは左から順に aメートル, bメートル, cメートル です。 柱の先端が同一直線上に並んでいる時、つまりb−a=c−bを満たしているとき、 この柱の並び方を美しいと呼びます。
柱の並び方が美しいかどうかを判定してください。
自分の回答
def l(a, b, c)
puts b - a == c - b ? "YES" : "NO"
end
a, b, c= gets.chomp.split(" ").map(&:to_i)
l(a, b, c)
問題に答えがほぼ書いてありますね。b – a == c – bの時は”YES”を違う時は”NO”を出力しましょう。ちなみに僕は、”NO”を”No”としてしまったせいで不正解になったので、気をつけましょう。
ABC059A – Three letter acronym
問題
英小文字からなる3つの単語s1,s2,s3が空白区切りで与えられるので、単語の先頭の文字をつなげ、大文字にした略語を出力してください。
自分の回答
def acronym(a, b, c)
puts a[0] + b[0] + c[0]
end
a, b, c= gets.chomp.split(" ").map(&:upcase)
acronym(a, b, c)
前にやった問題(ABC048A_AtCoder *** Contest)と似たような問題ですね。インプットの時点で、それぞれの変数に振り分けています。また、インプットの時点でupcaseを使って大文字にしています。そして、それぞれの単語の頭文字を取り出せば良いです。