はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC239のA, B, C, Dを解きました。備忘録として解き方をまとめていきたいと思います。
A - Horizon
a-239.rb
h = gets.to_i
puts Math.sqrt(h * (12800000 + h))
B - Integer Division
b-239.rb
puts gets.to_i / 10
C - Knight Fork
c-239.rb
x1, y1, x2, y2 = gets.split.map(&:to_i)
(x1 - 2).upto(x1 + 2) do |i|
(y1 - 2).upto(y1 + 2) do |j|
if (Math.hypot(i - x1, j - y1) ** 2).to_i == 5 && (Math.hypot(i - x2, j - y2) ** 2).to_i == 5
puts "Yes"
exit
end
end
end
puts "No"
解説
x1およびy1から距離が3以上となる部分は考える必要がないため、それ以外の範囲で(x1, y1), (x2, y2)からともに距離が√5となるような点が存在すればYesを出力して終了し、最後までなければNoを出力します。
D - Prime Sum Game
d-239.rb
require "prime"
a, b, c, d = gets.split.map(&:to_i)
puts [*a..b].all?{ |n| [*c..d].any?{ (n + _1).prime? } } ? "Aoki" : "Takahashi"
解説
A〜Bの整数に対して、C〜Dの整数のいずれかとの和が素数となれば青木くんの勝ちなのでprime?
メソッドを使って判定することで勝者を求めることができます。