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 ABC282(A, B, C)を解いてみた

Last updated at Posted at 2023-04-13

はじめに

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

A - Generalized ABC

a-282.rb
k = gets.to_i
print *("A"..(64 + k).chr)

解説

chrメソッドを使って簡単に実装することができます。

B - Let's Get a Perfect Score

b-282.rb
n, m = gets.split.map(&:to_i)
arr = Array.new(n){ gets.chomp }

ans = 0
for i in 0..n - 2
  for j in i + 1..n - 1
    check = true
    m.times do|k|
      if arr[i][k] == 'x' && arr[j][k] == 'x'
        check = false
        break
      end
    end
    ans += 1 if check
  end
end
puts ans

<追記>
コメントでいただいた別解になります。

別解
n, m = gets.split.map(&:to_i)
ss = Array.new(n) { gets.chomp }

ss.map! { |s| s.each_char.map { _1 == "o" ? true : false } }
puts ss.combination(2).count {|a, b|
  a.zip(b).all? { _1 | _2 }
}

解説

三重ループにして問題文の通り愚直に実装すればOKです。

C - String Delimiter

c-282.rb
n = gets.to_i
s = gets.chomp
flag = false

n.times do |i|
  if s[i] == '"'
    flag = !flag
    next
  end
  s[i] = '.' if s[i] == ',' && !flag
end
puts s

<追記>
コメントでいただいた別解になります。
フリップフロップを使って簡単に範囲指定ができるみたいです!すごい

別解1
n = gets.to_i
s = gets.chomp

n.times do |i|
  next if (s[i] == '"')...(s[i] == '"')
  s[i] = "." if s[i] == ","
end
puts s

正規表現を使っています。

[^"]+ のほうにマッチする部分文字列が見出されたとき,その部分文字列が ( ) によってキャプチャーされます。
キャプチャーされた文字列は,$1 で参照できます。
一方,".*?" のほうにマッチする部分文字列が見出されたとき,$1 は nil を返します。

とのことです。

別解2
n = gets.to_i
s = gets.chomp

- puts s.gsub(/([^"]+)|".*?"/){ |i| i.include?('"') ? i : i.gsub(/,/, ".") }
+ puts s.gsub(/([^"]+)|".*?"/){ |i| $1 ? i.tr(",", ".") : i }

解説

flagを使って括られている範囲を調べています。そして、括られていない部分で,があれば.に変えることで実装することができます。

メモ
↓ なぜ、別解2のような正規表現の書き方ができるのか?

・".*?":"から次の"まで
・[^"]+:"以外の文字の連なり

参考

0
0
7

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?