불화의 행성
코드 출현 2019 24일차
퍼즐 입력을 사용하여 파트 1의 시뮬레이터를 사용해 보세요!
작업: X에 대해 풀기 여기서...
1 부
X = the biodiversity rating for the first layout that appears twice
2 부
X = the number of bugs present after 200 minutes
예시 입력
....#
#..#.
#..##
..#..
#....
다음을 나타냅니다.
#
는 버그.
는 빈 공간1 부
이 퍼즐 중 또 하나, 어?
다음 유형을 알고 있습니다.
이것에 대한 새로운 점은 무엇입니까?
2의 거듭제곱 증가 배열 생성
Create an array of length 25 (5x5)
Fill it with values equal to the two to the power of the current index: 2^0, 2^1, 2^2, ...
인접한 셀을 확인하고 전환할 셀을 큐에 넣기
다른 퍼즐에서와 같이 상대 좌표 목록을 사용하겠습니다.
* = originating cell
A: (-1, 0)
B: ( 0, 1)
C: ( 1, 0)
D: ( 0,-1)
Visual:
.A.
D*B
.C.
알고리즘에 대한 서면 설명:
Using the current cell's coordinates:
For each relative coordinate
As long as the coordinate relative to the current cell is a valid location in the grid (not outside its bounds)
Return true if the value in that cell is a bug
Return false if the value in that cell is empty
Calculate the sum of true values
Queue the cell up as one to switch if:
The current cell contains a bug, and the sum is 1
The current cell is empty, and the sum is 1 or 2
각 단계의 상태 추적
0
s와 1
s에서 강제 변환된 #
s와 전환된 영역.
s를 연결하여 파생된 이진수를 저장합니다. )예를 들어:
Initial state:
....#
#..#.
#..##
..#..
#....
As a string:
....##..#.#..##..#..#....
As 0s and 1s:
0000110010100110010010000
As binary:
1658000
설정, 메인 루프 및 출력
Setup:
Replace #s with 1s and .s with 0s in the input
Split the input at each newline character into an array of strings
Split each string into an array of characters
Coerce each character into a number: 0 or 1
Create ratings, an array of 25 powers of 2, starting at 1
Create the array of 4 relative coordinates
Create an array, states, and add to it the binary number representing the initial state of my puzzle input
Main loop:
Repeat until manually escaped via a condition:
Create an empty queue
For each row in the parsed grid of tiles
For each column in the row
Set bugs to the result of the following operations:
For each of the four relative coordinates
If there is no cell there, return false
Else, if there is a cell there
Return true if the cell has a bug
Return false if the cell is empty
Filter the updated list of four booleans to only include true values
Return the number of true values
Add the current cell's coordinates to the queue if it matches the criteria for switching a cell's value as described earlier
For each queued coordinate
Update the value of the appropriate cell to its opposite state: bug or empty
Generate a binary number from the new state of the grid as described earlier
If the tracked list of states includes this binary number
Add the new binary number as the last item in states
Escape the main loop
Else, if this binary number is not in the tracked list of states
Add the new binary number as the last item in states
Output:
Using the last binary number in states
Convert it to a stringified decimal
Pad the beginning with 0s until the string has 25 characters
Split the string into an array of characters
For each character
Accumulate a sum - starting at 0 - according to the following operations
If the current character is 1
Increment the sum by the number in ratings at the same location as the current character's location in its array
Return the sum
지침을 잘못 읽었기 때문에 문제 해결
이전에 다음 기준을 참조했습니다.
Queue the cell up as one to switch if:
The current cell contains a bug, and the sum is 1
The current cell is empty, and the sum is 1 or 2
첫 번째
if
가 잘못되었습니다. 그것은해야한다: The current cell contains a bug, and the sum is NOT 1
내가 좋아하는 것보다 찾고 고치는 데 시간이 조금 더 걸렸습니다.
하지만 찾았습니다. 그리고 나는 그것을 고쳤다.
그리고 정답을 생성했습니다!
벌레의 생활 시뮬레이터 만들기
Try the simulator of Part 1 using your puzzle input!
2 부
훌륭함: 훨씬 더 어려운 퍼즐
내 업적 축하하기
버머:
Intcode 피날레, 내가 간다!
Reference
이 문제에 관하여(불화의 행성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/planet-of-discord-43j3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)