눈이 내리자

코드 출현 2015 25일차



1 부


  • 먼저 사진을 더 많이 봐야 해요
  • 행, 열, 계산

  • 우선 사진을 좀 더 봐야겠네요



    2017 Day 3's spiral puzzle 과 유사하게 기본 행 및 열 방정식을 식별하고 확인할 수 있도록 이 대각선 패턴을 더 많이 볼 필요가 있습니다.

    다이어그램의 슬라이스를 기준으로:

       | 1   2   3   4   5   6  
    ---+---+---+---+---+---+---+
     1 |  1   3   6  10  15  21
     2 |  2   5   9  14  20
     3 |  4   8  13  19
     4 |  7  12  18
     5 | 11  17
     6 | 16
    


  • 아래쪽 및 오른쪽 대각선 숫자가 4의 배수로 증가합니다
  • .
  • 행에서 오른쪽으로 이동하거나 열에서 아래로 이동하면 행과 열을 기준으로 한 양부터 시작하여 이전에 증가한 양보다 1 큰 양만큼 숫자가 증가합니다
  • .

    이 애니메이션은 위의 패턴을 확인하고 발견하는 것을 보여줍니다.

    행, 열, 계산


  • 퍼즐 입력에 지정된 행과 열에 어떤 코드를 저장할지 결정해야 합니다
  • .
  • 현재 실제 코드가 아님
  • 하지만 생성되는 정렬된 코드 목록에서 광산이 떨어지는 곳

  • 고맙게도 내 애니메이션은 이것을 계산하는 한 가지 방법을 이해하는 데 도움이 되었습니다.

    내 대상 행의 열 1에서 숫자를 찾으려면 다음을 수행하십시오.

    Set row as 1
    For i from 1 up to but not including the target row
      Increment row by i
    


    그런 다음 내 대상 열에서 숫자를 찾으려면 다음을 수행하십시오.

    Set column to row
    For i from row + 1 up to but not including column plus the target column
      Increment column by i
    


    이제 숫자가 있으므로 곱하기, 나누기 및 나머지를 몇 번 수행해야 하는지 알 수 있습니다.

    Set code to 20151125
    For i from 1 up to but not including column
      Set code to the remainder after dividing the product of code and 252533 by 33554393
    


    세 개의 루프가 모두 끝나면 정답이 나와야 합니다!

    그리고 내가 그랬어!
  • 적어도 금액을 만지작거리고 나면
  • 몇 가지off-by-one 오류
  • 를 만들었습니다.
  • 하지만 초기 답변 다이어그램이 있어서 내 알고리즘을 디버깅하는 데 도움이 되었습니다
  • .

    JavaScript에서 내 작업 알고리즘:

    const part1 = (row, col) => {
      let x = 1
      for (let i = 1; i < row; i++) { x += i }
      for (let i = row + 1; i < row + col; i++) { x += i }
      let code = 20151125
      for (let i = 1; i < x; i++) {
        code = code * 252533 % 33554393
      }
      return code
    }
    


    2 부



    올해의 마지막 날에 시작하기 때문에 파트 2가 잠금 해제되지 않습니다.

    그러나 그것은 49개의 별을 필요로 하는데, 나는 그것을 완전히 획득할 것으로 예상하지 않습니다.

    해냈어!


  • 1부 풀었습니다!
  • 수십만 개의 값으로 구성된 중첩 배열을 무차별 대입하는 대신 일부 수학적 패턴을 사용합니다!

  • 유쾌한 대각선 퍼즐이었습니다!

    2017년의 나선형 방향과 매우 유사한 놀라운 새로운 방향!

    Advent of Code의 첫 해에도 계속해서 새로운 퍼즐을 찾을 수 있기를 바랍니다.

    좋은 웹페이지 즐겨찾기