This page looks best with JavaScript enabled
⚠️

AtCoder Beginner Contest 197

 ·   ·  ☕ 3 分で読めます
✏️

ナニコレ?

昨日AtCoderに入門したので、せっかくなら感想とか学びを記録しておくことにする。
なんせ伸びしろしかないからな。

AtCoder Beginner Contest 197(Sponsored by Panasonic)

記録

A - Rotate

提出 #21296128 - AtCoder Beginner Contest 197(Sponsored by Panasonic)

個人的に「お、わりといい感じに書けたんじゃない?」と思った。
*で引数を取るやり方を選択肢として持てるようになったことに自分の成長を感じた!

ちなみに、可変長引数という名前は忘れていました。**オプション引数です。

と思ったけど、

Sは英小文字のみからなる長さ3の文字列である

って書いてあった。はい。

おもしろい解答

1
2
S = gets.chomp
puts S[1..] + S[0]
1
puts gets[1,2]+$_[0]

最後に Kernel.#gets または Kernel.#readline で読み込んだ文字列です。 EOF に達した場合には、 nil になります。 (覚え方: Perlと同じ)
$_ (Ruby 3.0.0 リファレンスマニュアル)

1
puts gets.chomp.chars.rotate(1).join

String#chars (Ruby 3.0.0 リファレンスマニュアル)
このメソッドめっちゃ便利!
Array#rotate (Ruby 3.0.0 リファレンスマニュアル)
これも配列内で順番を取り回すときに割と使えそう。

B - Visibility

提出 #21317848 - AtCoder Beginner Contest 197(Sponsored by Panasonic)

方針:array[x][y]で座標を表したかったんです……。indexが0から始まることを脳内で処理できなかったので、ゴリ推して配列側にいい感じになってもらいました。
方針を立てられたのでヨシ!

おもしろい解答

短いやつはまじで何をやっているのかわからなかった。

1
2
h,w,x,y=gets.split.map &:to_i
s=$<.map &:chomp

$< -> IO[permalink][rdoc][edit]
すべての引数または標準入力で構成される仮想ファイルです。定数 Object::ARGF の別名です。
この変数はグローバルスコープ、読み取り専用です。
module Kernel (Ruby 3.0.0 リファレンスマニュアル)

$<.map(&:chomp)["##..", "...#", "#.#.", ".#.#"]になる。
これは今後使える。

(x - 1).downto(0)
これはちょうど欲しかったやつ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
DIRS = [[0, 1], [1, 0], [0, -1], [-1, 0]]
count = 0
DIRS.each do |dx, dy|
  i = y + dy
  j = x + dx
  while 0 <= i && i < h && 0 <= j && j < w do
    break if m[i][j] == '#'
    count += 1
    i += dy
    j += dx
  end
end

なるほど、進む方向をDIRSに入れるのか!
他のを見ていてもwhileはわりと頻出だった。

C - ORXOR

初見:は?
使っている言葉がわからなさすぎた。

とりあえず、

  • 入力された数を何個かにわけて、それぞれORを出す→わけたやつのOR同士でXORを出す。最小になるようにする!
  • Nはきっと区間の計算を総当たりするのに使えるんじゃないのかな……。

ということがなんとなーくわかったけど、コードに落とし込めないまま終わった。

他の問題はなし!終わり!

Share on

END
END
@aiandrox

 
目次