구불구불한 트램폴린의 미로, 모두 똑같음

코드 출현 2017 5일차



1 부


  • 이것은 매우 익숙한 것 같습니다...
  • 작업 알고리즘 작성

  • 이것은 매우 친숙한 것 같습니다 ...


  • 점프? 거기에 있었어!
  • 목록 경계를 벗어나면 종료하시겠습니까? 같게!
  • 점프하기 전에 현재 명령의 값을 1씩 늘리시겠습니까? 재미있는 반전이네요!

  • 내 작업 알고리즘 작성




    Split the input at each newline character into an array of strings
      Coerce each string to a number
    Set pointer to 0
    Set steps to 0
    Do as long as pointer references an index within the bounds of the array of jumps
      Save the number of the current jump instruction
      Increment that number by 1
      Update pointer to the sum of pointer and the prior number of the current jump instruction
      Increment steps by 1
    Return steps
    


    JavaScript로 다음과 같은 간결한 프로그램을 작성했습니다.

    let jumps = input.split('\n').map(Number)
    const part1 = () => {
      let pointer = 0, steps = 0
      while (pointer >= 0 && pointer < jumps.length) {
        pointer += jumps[pointer]++
        steps++
      }
      return steps
    }
    


    예제 입력과 내 퍼즐 입력 모두에서 실행하면 예상되는 정답이 생성되었습니다!

    2 부


  • 트위스트가...그렇게 어렵지 않아요
  • 작업 알고리즘 업데이트 중

  • 반전은..그렇게 어렵지 않다



    이제 포인터를 업데이트하기 전에 포인터에서 값을 업데이트할 때 조건이 필요한 것 같습니다.

    내 작업 알고리즘 업데이트




    Split the input at each newline character into an array of strings
      Coerce each string to a number
    Set pointer to 0
    Set steps to 0
    Do as long as pointer references an index within the bounds of the array of jumps
      Save the number of the current jump instruction
      If that number is 3 or more
        Decrement that number by 1
      Else
        Increment that number by 1
      Update pointer to the sum of pointer and the prior number of the current jump instruction
      Increment steps by 1
    Return steps
    


    예제 입력에서 실행하면 오답이 생성됩니다!

    무슨 일이야?

    알겠어요:
  • 각각의 part1part2 함수
  • 외부에서 점프 목록을 생성하는 내 문장을 실수로 넣었습니다.
  • 그래서 내part2 함수가 사전 처리된 점프 목록에서 작동했습니다
  • .
  • 어리석게도...그런 일이 처음은 아니지만

  • 해당 명령문을 각 함수로 이동하고 다시 실행한 후:
  • 예제 입력과 내 퍼즐 입력 모두에서 실행하면 예상한 정답이 생성되었습니다!

  • JavaScript로 거의 동일하고 간결한 프로그램을 작성했습니다.

    const part2 = () => {
      let jumps = input.split('\n').map(Number)
      let pointer = 0, steps = 0
      while (pointer >= 0 && pointer < jumps.length) {
        pointer += jumps[pointer] >= 3 ? jumps[pointer]-- : jumps[pointer]++
        steps++
      }
      return steps
    }
    


    해냈어!!


  • 두 부분 모두 해결했습니다!
  • Part 1 알고리즘을 이 기사의 의사 코드에 설명된 대로 정확하게 구현하여 작성이 매우 쉬워졌습니다!
  • 놀라울 정도로 실망했고 아마도 감사했을 것입니다. - 파트 1에 비해 파트 2의 난이도 부족으로!
  • 이제 주어진 연도의 개인 최고 별 점수와 일치하는 데 별 두 개 남았습니다!
  • 좋은 웹페이지 즐겨찾기