はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC246のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - Four Points
a-246.rb
x1, y1 = gets.split.map(&:to_i)
x2, y2 = gets.split.map(&:to_i)
x3, y3 = gets.split.map(&:to_i)
puts "#{x1 ^ x2 ^ x3} #{y1 ^ y2 ^ y3}"
解説
排他的論理和を使うことで、答えを求めることができます。
B - Get Closer
b-246.rb
a, b = gets.split.map(&:to_i)
- d = Math.sqrt(a ** 2 + b ** 2)
+ d = Math.hypot(a, b)
puts "#{a / d} #{b / d}"
解説
求める座標を(x, y)とすると、a : x = b : y = d : 1
なので、(x, y) = (a/d, b/d)
が成り立ちます。
C - Coupon
c-246.rb
n, k, x = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
a.map! do |item|
used_coupon = [item / x, k].min
k -= used_coupon
item - (used_coupon * x )
end
puts a.sum - a.max([k, n].min).sum
解説
まず、クーポンを最大限使える商品に対してクーポンを使えるだけ使います。そして、クーポンが余っていれば、その数(min(K, N))だけ割引後の商品の中で価格が高いもの分の価格を除いた商品の価格の総和が答えとなります。