불화의 행성

코드 출현 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의 거듭제곱 배열 생성
  • 인접한 셀을 확인하고 전환할 셀을 큐에 넣음
  • 각 단계의 상태 추적
  • 설정, 메인 루프 및 출력
  • 지침을 잘못 읽었기 때문에 문제 해결
  • 벌레의 생활 시뮬레이터 구축

  • 이 퍼즐 중 또 하나, 어?



    다음 유형을 알고 있습니다.
  • 타일 면적
  • 각각 두 개 이상의 가능한 상태가 있음
  • 인접한 타일을 기준으로 변경하기 위해 대기 중인 각 타일
  • 그런 다음 대기 중인 타일을 변경합니다
  • .
  • 반복되는 첫 번째 상태 식별

  • 이것에 대한 새로운 점은 무엇입니까?
  • 채점 방법은 특정 타일의 위치를 ​​기반으로 하는 방정식을 고려합니다
  • .
  • 첫 번째 중복 상태가 식별된 후에만 조회가 필요합니다
  • .

    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
    


    각 단계의 상태 추적


  • 지금까지 배열을 비교하면 모든 값이 같더라도 적어도 JavaScript에서는 항상 'false'가 반환된다는 것을 배웠습니다
  • .
  • 그 대신에 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 부



    훌륭함: 훨씬 더 어려운 퍼즐


  • 일반적으로 - 적어도 나에게는 - 파트 1이 상대적으로 쉬워 보이는 경우입니다
  • .
  • 입력: 20일 차의 파트 2로 콜백
  • 입력: 재귀
  • 엔터: 인피니티
  • 즉, 협박 += 10000
  • 다시 말해: 아니요, 감사합니다

  • 내 업적 축하하기


  • 1부 풀었습니다!
  • 1부용 시뮬레이터를 만들었습니다!
  • 문자열을 이진으로 변환하고 다시 이진으로 변환하는 연습을 했습니다
  • .
  • 지침을 주의 깊게 읽는 것이 얼마나 중요한지 상기했습니다
  • .

    버머:
  • 예상되는 알고리즘 복잡성에 대한 위협 때문에 파트 2를 즉시 포기했습니다
  • .

    Intcode 피날레, 내가 간다!

    좋은 웹페이지 즐겨찾기