터보건 궤적

코드 출현 2020 3일차



시뮬레이터를 사용해보십시오!





작업: X에 대해 풀기 여기서...




X = the number of trees hit for each of N trajectories


  • N = 1
  • N = 5

  • 예시 입력




    ..##.......
    #...#...#..
    .#....#..#.
    ..#.#...#.#
    .#...##..#.
    ..#.##.....
    .#.#.#....#
    .#........#
    #.##...#...
    #...##....#
    .#..#...#.#
    


    다음을 나타냅니다.
  • 삼림 에리어
  • 여기서 '.'은 열린 영역이고 '#'은 나무입니다
  • .

    1 부


  • 올바른 정신 모델 식별
  • modulo를 사용하여 이 모델
  • 구현
  • 작업 알고리즘 작성

  • 올바른 정신 모델 식별


  • 지침에 숲 영역이 오른쪽으로 무한히 확장된다고 표시되어 있습니다
  • .
  • 이는 다음과 같이 한 가지 방식으로 표현됩니다.

  • ..##.........##.........##.........##.........##.........##.......
    #...#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
    .#....#..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
    ..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
    .#...##..#..#...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
    ..#.##.......#.##.......#.##.......#.##.......#.##.......#.##.....
    .#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
    .#........#.#........#.#........#.#........#.#........#.#........#
    #.##...#...#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...
    #...##....##...##....##...##....##...##....##...##....##...##....#
    .#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#
    


    북서쪽에서 남동쪽으로의 경로는 다음과 같습니다.

    -
       -
          -
             -
                -
                   -
                      -
                         -
                            -
                               -
                                  -
                                     -
    


    하지만 이 문제에 대한 비결은 정신 모델에서 나선형 계단 또는 원통형 모델로 전환하는 것입니다.

    -
       -
          -
             -
                -
    -
       -
          -
             -
                -
    -
       -
          -
             -
                -
    


    모듈로를 사용하여 이 모델 구현


  • 예제 입력에 대한 파트 1의 궤적에 대한 결과 경로는 다음과 같습니다.

  • O.##.......
    #..O#...#..
    .#....X..#.
    ..#.#...#O#
    .X...##..#.
    ..#.X#.....
    .#.#.#.O..#
    .#........X
    #.X#...#...
    #...#X....#
    .#..#...X.#
    
    -
       -
          -
             -
     -
        -
           -
              -
       -
          -
             -
    
    0
       3
          6
             9
     1
        4
           7
              10
      2
         5
            8
    


  • 0에서 3, 6, 9로 가는 것은 쉽습니다
  • .
  • 근데 9에서 1로? 어떻게 할까요?
  • Modulo는 한 값을 다른 값으로 나눈 후 나머지를 계산합니다.
  • 예제 입력에는 11자로 된 행이 있습니다
  • .
  • 9 % 11 == 9
  • (9 + 3) % 11 == 12 % 11 == 1

  • 짜잔! 모듈로, 라인 길이, 현재 인덱스 및 적절한 오프셋을 사용하면 각 반복에서 올바른 수평 위치를 얻을 수 있습니다.

    작동하는 알고리즘 작성




    Split the input at each new-line character into an array of strings
      Split each string into an array of characters
    
    Set variables for row, col and hits...all starting at 0
    
    As long as the location in the processed input at row exists
      Increment hits by 1 if the value at the row and column is a #
      Increment row by 1
      Update col to equal the remainder after dividing the sum of col and 3 by the length of the nested array
    
    Return the value stored in hits
    


    2 부


  • 범위 크리프 이해
  • 업데이트된 작업 알고리즘 작성
  • 시뮬레이터 구축

  • 범위 크립 이해


  • 1부에서는 (3,1)
  • 이라는 단일 궤적을 다루었습니다.
  • 2부에서는 5개의 궤적을 제공합니다
  • .
  • 따라서 내 알고리즘은 이제 5개 궤적 모두에 대한 적중 횟수를 생성한 다음 모두의 곱을 계산해야 합니다
  • .

    업데이트된 작업 알고리즘 작성




    Split the input at each new-line character into an array of strings
      Split each string into an array of characters
    
    Set an array with five 2-element arrays to represent each trajectory
    
    For each trajectory
      Change the 2-element array into the number of hits encountered by following these operations:
        Set variables for row, col and hits...all starting at 0
    
        As long as the location in the processed input at row exists
          Increment hits by 1 if the value at the row and column is a #
          Increment row by the value at location 1 from the original 2-element array
          Update col to equal the remainder after dividing the sum of col and the value at location 2 from the original 2-element array by the length of the nested array
    
    Return the product after multiplying each value together
    


    시뮬레이터 구축


  • 유효한 입력에 대해 각 궤적의 경로를 렌더링하려고 했습니다
  • .
  • 궤적에 해당하는 버튼을 누르면 포레스트 영역이 재설정된 다음 각 X와 O를 점진적으로 렌더링해야 합니다
  • .

    Try the simulator!


    고맙게도 2021년의 일부 퍼즐에서 이 나선형 알고리즘을 만났습니다.

    따라서 이 퍼즐은 특히 해결하기 쉬웠습니다.

    좋은 웹페이지 즐겨찾기