좌석 시스템
코드 출현 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
다음을 나타냅니다.
.
는 바닥L
는 빈자리#
는 점유석1 부
이 퍼즐 유형은 또?
2021 Day 25: Sea Cucumbers 토글링 타일이 있는 일정한 그리드 크기가 결국에는 변경을 멈췄습니다
2021 Day 22: Reactor Reboot 3D 공간에서 토글 상태 큐브를 특징으로 함
2021 Day 20: Trench Map은 타일 상태를 전환하는 2D 무한 그리드를 특징으로 합니다
2021 Day 11: Dumbo Octopus 토글 타일이 있는 일정한 2D 그리드를 특징으로 하며 타일은 각각 결국 동일한 상태를 가집니다
2021 Day 5: Hydrothermal Venture 타일이 '표시되지 않은' 상태로 남아 있거나 값이 증가한 그리드
2021 Day 4: Giant Squid 타일이 표시
2020 Day 24: Lobby Layout에는 타일 상태를 전환하는 2D 무한 그리드도 포함되어 있습니다
2020 Day 17: Conway Cubes 큐브 상태 전환이 포함된 3D 무한 그리드 기능
이 퍼즐은 어떻게 비교됩니까?
작동하는 알고리즘 작성
무대 설정
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!.
.!!!.
.....
좌석을 찾거나 방의 경계를 넘어설 때까지 여덟 방향 모두에서 직선으로 체크인해야 합니다.
!.!.!
.!!!.
!!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)
함수: firstVisibleSeat()
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
Reference
이 문제에 관하여(좌석 시스템), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/seating-system-hnn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)