[AtCoder]AtCoder過去問を解く⑥[Ruby]

プログラミング

過去問http://atcoder-scores.herokuapp.com/を解きます。

ABC065A – Expired?

問題

高橋君は胃が強いので、賞味期限をX日まで過ぎた食品を食べてもお腹を壊しません。 賞味期限をX+1日以上過ぎた食品を食べると、お腹を壊します。

また、賞味期限を過ぎずに食べると、おいしく感じます。そうでない場合、おいしく感じません。

高橋君は、賞味期限のA日前に食品を買ってきて、買ってからB日後に食べました。

高橋君が食品をおいしく感じた場合 delicious を、おいしくは感じなかったがお腹は壊さなかった場合 safe を、お腹を壊した場合 dangerous を出力するプログラムを作成してください。

自分の回答

def expired(x, a, b)
  if b <= a
    puts "delicious"
  elsif b <= a + x 
    puts "safe"
  else
    puts "dangerous"
  end
end

x, a, b = gets.chomp.split(" ").map(&:to_i)
expired(x, a, b)

ちょっと考えました。問題が理解しにくかったら、状況を図で書いてみたりしてもいいかもしれません。

食べた日(b)が賞味期限(a)より小さかったら”delicious”、bが食べてもお腹を壊さない期間内(a+x)であれば、”safe”、それ以上は”dangerous”を出力すれば良いです。

ABC066A – ringring

問題

snuke 君は自転車を買いに来ました。snuke 君はすでに買う自転車を決めたのですが、その自転車にはベルが付いていないため、 自転車とは別にベルも買う必要があります。

snuke 君は安全意識が高いので、ベルをどちらの手でも鳴らせるよう、両方のハンドルに1つずつ 付けることにしました。

お店にあるベルは3種類で、それぞれ a円、b円、c円です。 この3つのうち、異なる2つのベルを選んで買うときの、値段の合計の最小値を求めて下さい。

自分の回答

def ringring(bells)
  bells.sort!
  p bells[0] + bells[1]
end

bells = gets.chomp.split(" ").map(&:to_i)
ringring(bells)

3つの値を配列(bells)に入れて、sortで低い順に並べて、最初の2つを足せば良いですね。

ABC067A – Sharing Cookies

問題

すぬけくんは3匹のヤギにクッキーを渡したいです。

すぬけくんはA枚のクッキーが入った缶と、b枚のクッキーが入った缶を持っています。 すぬけくんはA,B,A+Bのいずれかの枚数のクッキーをヤギたちに渡すことができます。

3匹のヤギが同じ枚数ずつ食べられるようにクッキーを渡すことが可能かどうか判定してください。

自分の回答

def sharing(a, b)
  cookies = a + b
  puts a % 3 == 0 || b % 3 == 0 || cookies % 3 == 0 ? "Possible" : "Impossible"
end

a, b = gets.chomp.split(" ").map(&:to_i)
sharing(a, b)

気をつけるところは、A,B,A+Bのいずれかさえ満たしていれば良いと言う点ですかね。3匹に分けるので、3で割って余りが0であれば良いです。

ABC068A – ABCxxx

問題

このコンテスト、つまり AtCoder Beginner Contest の略称は、アルファベット3文字で ABC となっております。

そして、ABCのうち特定の回を指すときは、何回目のABCかを3桁の数字で表して後ろに付け、ABC680のように呼びます。例えば ABC680 は、680回目の ABC のことを指します。

では、N回目のABCはどのように表すでしょうか、これを出力するプログラムを作成してください。

自分の回答

def abc(n)
  puts "ABC#{n}"
end

n = gets.chomp
abc(n)

入力された数nをABCの後ろにくっつけてあげれば良いだけですね。

ABC069A – K-City

問題

K市には、東西方向にn本の通りがあり、南北方向にm本の通りがあります。 東西方向のそれぞれの通りは、南北方向のそれぞれの通りと交わっています。 東西南北を通りに囲まれた最小の領域を「街区」と呼びます。K市にある街区の個数を求めてください。

自分の回答

def city(a, b)
  puts (a - 1) * (b - 1)
end

a, b = gets.chomp.split(" ").map(&:to_i)
city(a, b)

一見難しそうに思ましたが、そんな事はありませんでした。入力された数から1を引いて、それらを掛け合わせれば良いです。

タイトルとURLをコピーしました