座席制


コード2020日11の出現


シミュレータを試してください



タスク:Xのどこに解決する.


X = the number of seats occupied once seat occupation no longer changes

例入力


L.LL.LL.LL
LLLLLLL.LL
L.L.L..L..
LLLL.LL.LL
L.LL.LL.LL
L.LLLLL.LL
..L.L.....
LLLLLLLLLL
L.LLLLLL.L
L.LLLLL.LL
It represents:
  • 待合室
  • . 床はありますか
  • L 空席
  • # 占領席
  • 第1部

  • このパズルタイプ再び?
  • どのようにこのパズルを比較するのですか?
  • アルゴリズムの記述
  • ビルドシミュレータ
  • このパズルタイプ再び?


  • 2021 Day 25: Sea Cucumbers 最終的に変更を停止タイルをトグルタイルで一定のグリッドサイズを紹介

  • 2021 Day 22: Reactor Reboot 3 D空間の状態キューブをトグル

  • 2021 Day 20: Trench Map タイルの状態を切り替えると

  • 2021 Day 11: Dumbo Octopus それぞれの最終的に同じ状態を持っていたタイルをトグルで一定の2 Dグリッドを紹介

  • 2021 Day 5: Hydrothermal Venture 注目されてますます明らかに-一定のサイズ-グリッドのタイルが残っていないか、値の増加

  • 2021 Day 4: Giant Squid タイルがますますマークされるようにトグルされるいくつかの一定の二次元格子を特徴としました

  • 2020 Day 24: Lobby Layout また、タイルの状態を切り替えると2 Dの無限グリッドを紹介

  • 2020 Day 17: Conway Cubes キューブの状態をトグルで3 D無限グリッドを紹介
  • どのようにこのパズルを比較するのですか?

  • このパズルのグリッドは2 Dです
  • このパズルのグリッドは一定のサイズのまま
  • このパズルのタイル
  • このパズルのタイルは最終的に状態を変更停止
  • アルゴリズムの記述


    舞台を定める
    Process the input into an array of arrays:
      Split the input at each new line character into an array of strings
      Split each string into an array of characters
    
    Create an array of 8 pairs that represent the coordinates of each cell's adjacent cells
    
    1要素のシェルで配列を入力します.
    Turn an array like this:
    L.L
    .L.
    L.L
    
    Into an array like this:
    .....
    .L.L.
    ..L..
    .L.L.
    .....
    
    メインループ:
    Do at least one time, then again only if an array of cells to switch is not empty:
      Empty the array of cells
      For each cell in the grid of seats, except for the bordering cells:
        Check each adjacent cell and accumulate tallies for each of the three possible characters found: . # L
        If the current cell contains an 'L' and the number of '#'s found is 0
          Add the cell's coordinates to the list of switchers with an instruction to change it's value to '#'
        Else, if the current cell contains an '#' and the number of '#'s found is 4 or more
          Add the cell's coordinates to the list of switchers with an instruction to change it's value to 'L'
    
    For each coordinate and instruction set in the list of switchers
      Update the cell in the grid of seats at the current location to the value specified
    
    最後に、占有席数を計算する
    For each nested array in the grid of seats
      Accumulate a sum - starting at 0 - of the count of '#' characters in each array
    
    Return the sum
    

    ビルドシミュレータ

  • これは、何度も私は上記の課題のための同様の機能シミュレータを構築した与えられた簡単なタスクのように感じた
  • Try the simulator for Part 1

    第2部

  • 楽しいツイスト!
  • 新しく必要なサブルーチンを書く
  • 作業アルゴリズムの更新
  • シミュレータの更新
  • 楽しいツイスト!


    8つの隣接するセルをチェックする代わりに:
    .....
    .!!!.
    .!S!.
    .!!!.
    .....
    
    我々は座席を見つけるまで、または我々は部屋の境界を超えてまで、すべての8つの方向に直線でチェックする必要があります
    !.!.!
    .!!!.
    !!S!!
    .!!!.
    !.!.!
    

    新しく必要なサブルーチンを書く

  • 次のチェックされたセルが部屋の境界の中にあるかどうかチェックしてください
  • 座席を見つけるか、部屋の境界を越えるまで、再帰的に直線に沿って次のセルをチェックする
  • 関数: isatavalidLocation ()


    Expects two parameters
      1. Row index
      2. Column index
    
    Return false, unless:
      Both indices are greater than or equal to 0
      And Row is less than the length of the number of arrays in the outer-most array
      And Column is less than the length of any nested array (they are all the same length)
    

    関数: firstvisiblate ()


    Expects two parameters
      1. A pair of coordinates representing the direction to travel from an origin point
      2. A pair of coordinates representing the originating row and column indices
    
    Return '.' to indicate 'No seat found', unless:
      The next cell along the path 'isAtAValidLocation'
      If the next cell is at a valid location
        And its value is '.'
          Continue along the path
        Else - its value is not '.'
          Return its value - being either 'L' or '#' 
    

    作業アルゴリズムの更新

  • 配列に入力を処理するのと同じセットアップ
  • 配列をパディングするプロセスを削除しました
  • 新しいメインループ:
    Do at least one time, then again only if an array of cells to switch is not empty:
      Empty the array of cells
      For each cell in the grid of seats:
        Continue along a straight line - starting from each adjacent cell and continuing until either a seat is found or reaching the boundary of the room - and accumulate tallies for each of the three possible characters found: . # L
        If the current cell contains an 'L' and the number of '#'s found is 0
          Add the cell's coordinates to the list of switchers with an instruction to change it's value to '#'
        Else, if the current cell contains an '#' and the number of '#'s found is 5 or more
          Add the cell's coordinates to the list of switchers with an instruction to change it's value to 'L'
    
    For each coordinate and instruction set in the list of switchers
      Update the cell in the grid of seats at the current location to the value specified
    

    シミュレータの更新


    私のアルゴリズムからページのスクリプトにコードをペーストしているコピーを除いて、これはどのボタンが押されたかについて、どの部分の機能を呼び出すべきかをトグルするロジックを加えることを必要としました.
    私は私のコピー貼り付けでずっしりしていて、トラブルシューティングに小さな頭痛をつくりました.
    全体的に、大きな取引.
    Try the simulator for Part 2