0
0

More than 1 year has passed since last update.

RubyでAtCoder ABC232(A, B, C)を解いてみた

Posted at

はじめに

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メソッドを使って全探索することで解くことができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0