AtCoder Beginners SelectionをRubyで解いてみました
学習のためAtCoderをやってみました。
時間の都合であまりコンテストには参加できませんが、少しずつ解いていこうと思います。
ABC086A - Product
a, b = gets.split.map(&:to_i) puts (a * b).even? ? 'Even' : 'Odd'
ABC081A - Placing Marbles
s1, s2, s3 = gets.split('').map(&:to_i) puts s1 + s2 + s3
カウントメソッドでいいとのこと count('1')
確かに🤔
ABC081B - Shift only
n = gets.to_i nums = gets.split.map(&:to_i) count_list = [] nums.each do |i| count = 0 while i % 2 == 0 i = i / 2 count += 1 end count_list << count end puts count_list.min
ABC087B - Coins
ary = Array.new(4){ gets.to_i } count = 0 (0..ary[0]).each do |a| (0..ary[1]).each do |b| (0..ary[2]).each do |c| if ary[3] == a * 500 + b * 100 + c * 50 count += 1 end end end end puts count
ABC083B - Some Sums
n, a, b = gets.split.map(&:to_i) total = 0 (1..n).each do |i| ary = i.to_s.chars.map(&:to_i) sum = ary.sum if sum >= a && sum <= b total += i end end puts total
ABC088B - Card Game for Two
n = gets.to_i card_list = gets.split.map(&:to_i) card_list = card_list.sort.reverse alice = 0 bob = 0 n.times do |i| if i.even? alice += card_list[i] else bob += card_list[i] end end puts alice - bob
差分を出せばいいので、足し算引き算を繰り返して求めるでもいいとのこと
i.even? ? result += card_list[i] : result -= card_list[i]
確かに🤔
ABC085B - Kagami Mochi
n = gets.to_i ary = Array.new(n){ gets.to_i } puts ary.uniq.size
ABC085C - Otoshidama
n, y = gets.split.map(&:to_i) flg = false (0..n).each do |a| (0..n).each do |b| c = n - a - b if c >= 0 && y == 10000*a + 5000*b + 1000*c puts "#{a} #{b} #{c}" exit end end end puts '-1 -1 -1'
ABC049C - 白昼夢
s = gets.chomp %w(eraser erase dreamer dream).each do |i| s.gsub!(i, '') end puts s.size == 0 ? 'YES' : 'NO'
通ってしまったけど一番駄回答そう…
ABC086C - Traveling
ary = [] n = gets.to_i n.times do t, x, y = gets.split.map(&:to_i) ary << { t: t, x: x, y: y } end t, x, y = 0, 0, 0 ary.each do |i| dt = i[:t] - t dx = (i[:x] - x).abs dy = (i[:y] - y).abs if dt < dx + dy || (dt - dx + dy).odd? puts 'No' exit end t, x, y = i[:t], i[:x], i[:y] end puts 'Yes'
最初は単純にt < x + y || (t - x + y).odd?
だけ見てたのですが、1つだけWAでした。
この条件だけだと、下記のようにいきなり0,0地点に戻ってもYesになったので手前の地点も見るようにすると通りました。
2 3 1 2 4 0 0
PS
ABC049C - 白昼夢
の後にABC086C - Traveling
を解くと、出力がYES
とYes
で違うのでうっかりしてるとWAになります……ええ、見事に引っかかりました。