0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-06-16

はじめに

Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC241のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

A - Digit Machine

a-241.rb
a = gets.split.map(&:to_i)
puts a[a[a[0]]]

B - Pasta

b-241.rb
# 修正前
gets.split
a = gets.split.tally
b = gets.split.tally

b.keys.each do |length_of_pasta|
  if !a[length_of_pasta] || b[length_of_pasta] > a[length_of_pasta]
    puts "No"
    exit
  end
end
puts "Yes"
b-241.rb
# 修正後
gets.split
a = gets.split.tally
a.default = 0
b = gets.split.tally

puts b.keys.all?{ b[_1] <= a[_1] } ? "Yes" : "No"

解説

tallyメソッドを使ってA, Bそれぞれの長さのパスタがいくつあるかを保持させます。そして、Bの要素である各長さのパスタを食べることができるかを調べることで、高橋君が最後まで食事計画を実行することができるかどうかを判定することができます。

C - Connect 6

c-241.rb
n = gets.to_i
array = Array.new(n){ gets.chomp.chars.map{ |x| x == "#" } }

dy = [1, 0, 1, -1]
dx = [0, 1, 1, 1]
n.times do |i|
  n.times do |j|
    4.times do |k|
-     next unless i + dy[k] * 5 < n && 0 <= i + dy[k] * 5 && j + dx[k] * 5 < n
+     next unless (i + dy[k] * 5 < n) && (0 <= i + dy[k] * 5) && (j + dx[k] * 5 < n)
      # 以下でも可
      # next unless (i + dy[k] * 5).between?(0, n - 1) && (j + dx[k] * 5 < n)
      # next unless (0...n).cover?(i + dy[k] * 5) && j + dx[k] * 5 < n
      count = 0
      6.times do |l|
        count += 1 if array[i + dy[k] * l][j + dx[k] * l]
      end
      if 4 <= count
        puts "Yes"
        exit
      end
    end
  end
end
puts "No"

解説

Nが1000以下と小さいので、縦・横・斜め方向のそれぞれについて全探索することで、#が6つ以上連続するようにできるかどうかを判定することができます。

0
0
4

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?