はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC297のA, B, C, Dを解きました。備忘録として解き方をまとめていきたいと思います。
A - Double Click
a-297.rb
n, d = gets.split.map(&:to_i)
t = gets.split.map(&:to_i)
t.each_cons(2).each do|i, j|
if j - i <= d
puts j
exit
end
end
puts -1
解説
each_consメソッドを使って、隣り合う要素の差がd以下であるかを判定しています。
B - chess960
b-297.rb
s = gets.chomp
flag1 = (s.index("B") - s.rindex("B")).odd?
flag2 = s.index("R") < s.index("K") && s.index("K") < s.rindex("R")
puts flag1 && flag2 ? "Yes" : "No"
解説
問題文の2つの条件を満たすかどうかを調べていけば実装できます。
C - PC on the Table
c-297.rb
h, w = gets.split.map(&:to_i)
h.times do
puts gets.chomp.gsub(/TT/, "PC")
end
解説
TTをPCに置き換えれば良いので、gsubメソッドを使ってすべて置換しています。
D - Count Subtractions
d-297.rb
a, b = gets.split.map(&:to_i).sort
ans = 0
while a != b && a != 0
ans += b / a
b %= a
a, b = b, a if a > b
end
puts ans != 0 ? ans - 1 : 0
解説
愚直にやるとTLEしてしまうので、こういう同じような操作を繰り返して変数を更新していくような問題はmodを使って解いていきます。
終わりに
今回は比較的簡単だったと思います。(参加しとけば...)
<余談>
最近、忘れてしまってAtCoderに参加できていません...。LINE Notifyを使って通知を送るようなサービスを作ってみようかな?