はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC232のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - QQ solver
a-232.rb
puts gets.split("x").map(&:to_i).inject(:*)
B - Caesar Cipher
b-232.rb
s = gets.chomp.chars
t = gets.chomp.chars
u = s.zip(t)
k = (t[0].ord - s[0].ord) % 26
puts u.all?{ (_1.ord + k) % 26 == _2.ord % 26 } ? "Yes" : "No"
解説
ord
メソッドとall?
メソッドを使って、K個後ろの文字にしたときにsがtと一致するかどうかを判定することができます。なお、k
は先頭を固定してその差分としました。
C - Graph Isomorphism
c-232.rb
n, m = gets.split.map(&:to_i)
if m == 0
puts "Yes"
exit
end
t = Array.new(n){ Array.new(n, false) }
m.times do
a, b = gets.split.map{ _1.to_i - 1 }
t[a][b] = true
t[b][a] = true
end
a = Array.new(n){ Array.new(n, false) }
m.times do
c, d = gets.split.map{ _1.to_i - 1 }
a[c][d] = true
a[d][c] = true
end
[*0..n - 1].permutation do |i|
array = Array.new(n){ Array.new(n, false) }
n.times do |j|
n.times do |k|
array[j][k] = a[i[j]][i[k]]
if t == array
puts "Yes"
exit
end
end
end
end
puts "No"
解説
最初に、高橋くん・青木くんそれぞれについて繋がっているボールをtrue
として配列に情報をもたせます。後は、問題文にある条件をpermutation
メソッドを使って全探索することで解くことができます。