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.

[paiza][ruby] マップの判定・縦横 (paizaランク B 相当)を整理する

Posted at

はじめに

paizaでアルゴリズムを学習し始めて日が浅いです
ランクBになると途端にコードが長くなり混乱中です
Aランクアップメニュー > マップの判定・縦横 (paizaランク B 相当)の回答に対して理解を深めたいと考え記事にしています
⚠シェア可能な問題集の問題です
⚠リファクタリングとかはせず愚直に与えられた回答を使用しています

また、問題をご存知な方前提になっていますので入力例・出力例は載せていません

回答

h, w = gets.split.map(&:to_i)
board = h.times.map { gets.split('') }

board.each.with_index do |row, y|
  row.each_index do |x|
    flag_row = false
    flag_clm = false

    if x == 0 || row[x - 1] == '#'
      flag_row = true if x == w - 1 || row[x + 1] == '#'
    end

    if y == 0 || board[y - 1][x] == '#'
      flag_clm = true if y == h - 1 || board[y + 1][x] == '#'
    end

    puts y.to_s + ' ' + x.to_s if flag_row && flag_clm
  end
end

コメントアウト入れる

h, w = gets.split.map(&:to_i)
# board配列に入力例を全て入れていく
board = h.times.map { gets.split('') }

# rowに一つずつ要素(3つ分)が入る、y(縦)には0から要素分順番に数字(0,1,2)が入る
board.each.with_index do |row, y|
  # rowに入ってる要素分(見た目は3つだが実際は4つ分あるっぽい?)のindex x(横)を取得(0,1,2,3) 
  # → 0の場合はrowの1つ目の要素
  row.each_index do |x|
    flag_row = false
    flag_clm = false
    # 最初のifで左のマス・次のifで右のマスをチェック
    # x == 0はxが1つ目の要素なら〜
    # row[x - 1]は今いるポジションの一つ前の要素を参照
    if x == 0 || row[x - 1] == '#'
      # x == w - 1は右端なのかチェック(indexが0から始まるのでwを-1する)
      # row[x + 1]は今いるポジションの次の要素を参照
      flag_row = true if x == w - 1 || row[x + 1] == '#'
    end
    # yはxの縦バージョン、 縦軸を見てるのでboard(行でわけた2次元配列)を参照
    # y == 0は一番上かどうか、 board[y - 1][x]は今いるポジションxの一つ上の要素を参照
    if y == 0 || board[y - 1][x] == '#'
      # y == h - 1は一番下かどうか、 board[y + 1][x]今いるポジションxの一つ下の要素を参照
      flag_clm = true if y == h - 1 || board[y + 1][x] == '#'
    end
    # 上2つがtrueだったらその値を出力
    puts y.to_s + ' ' + x.to_s if flag_row && flag_clm
  end
end

最後に

いきなり難しいと感じましたが、やってることはシンプルでした
閲覧頂きありがとうございました!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?