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

Last updated at Posted at 2023-06-13

はじめに

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

A - Last Letter

a-244.rb
gets.to_i
puts gets.chomp[-1]

B - Go Straight and Turn Right

b-244.rb
- n = gets.to_i
+ gets.to_i
array = gets.chomp.chars

x = y = 0
- dx = [1, 0, -1, 0]
- dy = [0, -1, 0, 1]
- dir = 0

+ dx, dy = 1, 0
array.each do |c|
  if c == "S"
-   x += dx[dir]
-   y += dy[dir]

+   x += dx
+   y += dy
  else
-   dir += 1
-   dir %= 4

+   dx, dy = dy, -dx
  end
end
puts "#{x} #{y}"

解説

最初にx,yを0にdx, dyをそれぞれの向いている方向に対応させて初期化しておきます。そして、与えられた文字列を構成する文字がSのときはx,yそれぞれに対してdx[dir], dy[dir]を足します。一方、Tのときは方向を定めるdirの値をインクリメントし、4で割った余りとしておきます。この操作を、それぞれの文字に対して行うことで、高橋君が最終的にいる座標を求めることができます。

C - Yamanote Line Game

c-244.rb
n = gets.to_i
hash = {}
loop do
  for i in 1..2 * n + 1
    next if hash[i]

    puts i
    STDOUT.flush
    hash[i] = true
    break
  end

  n = gets.to_i
  break if n == 0

  hash[n] = true
end

解説

問題文の通りに、0が入力されるまで1~2n+1の整数で小さいものかつまだ出ていない整数を出力します。

D - Swap Hats

d-244.rb
s = gets.split.join
t = gets.split.join
group = ["BGR", "GRB", "RBG"]
puts group.include?(s) ^ group.include?(t) ? "No": "Yes"

解説

公式解説を参考にしました)

グループとして、["BGR","GRB","RBG"]を用意していきます。SをTにできるかどうかは、SとT両方がこのグループに含まれているか、あるいはどちらも含まれていないかと同じことなので、これは排他的論理和を用いることで判定することができます。

0
0
2

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?