핸드헬드 정지

코드 출현 2020 8일차



과제: X에 대해 풀기 여기서...




X = the value of accumulator at some N time


  • N = 단계가 처음 반복되기 전
  • N = 마지막 명령을 읽은 후 - 프로그램을 성공적으로 종료하기 위해 한 번만 변경하면 됨

  • 예시 입력




    nop +0
    acc +1
    jmp +4
    acc +3
    jmp -3
    acc -99
    acc +1
    jmp -4
    acc +6
    


    다음을 나타냅니다.
  • 부트 코드
  • 라인당 하나의 명령
  • 각 줄에 연산과 인수가 포함됨
  • 작업은 다음과 같을 수 있습니다. 1. 아무것도 하지 않음, 2. 일부 변경 값 누적, 3. 다른 명령줄로 이동

  • 1 부


  • 추적할 항목 식별
  • 작동할 것으로 생각되는 알고리즘 작성
  • 효과가 있어서 웃는 모습

  • 추적할 항목 식별


  • 0에서 시작하는 누산기
  • 방문한 인덱스의 고유 목록
  • 읽고 있는 현재 명령줄
  • 다음 명령어 라인 인덱스

  • 작동할 것으로 생각되는 알고리즘 작성




    Split the input at each new line character into an array of strings
    Split each string at the space character into a 2-element array of strings
    Convert the second string into a positive or negative number
    
    Set an accumulator at 0
    Set a unique list of indices as empty
    Set the next instruction line index as 0
    
    Do as long as the next instruction line index is not in the unique list of indices
      Look-up the 2-item array at the next index
      If the first item is 'nop'
        Add the index to the unique list
        Increment the value stored in next instruction line
      Else, if the first item is 'acc'
        Add to accumulator the value stored in the second item
        Add the index to the unique list
        Increment the value stored in next instruction line
      Else, if the first item is 'jmp'
        Add the index to the unique list
        Update the value stored in next instruction line to the sum of this item's index and the value of the second element
    
    The above loop should finish as soon as the next instruction line's index is the first to already be in the unique set, meaning it has been visited
    
    Return accumulator
    


    효과가 있어서 웃는다



    만세!

    2 부


  • 내 무차별 대입 작업 알고리즘
  • 내 알고리즘의 성능을 고려하면

  • 내 무차별 대입 작업 알고리즘




    Set a correct accumulator that will eventually reflect the fully accumulated value from the program that runs to termination
    
    Identify each instruction line with either a `nop` or `jmp` operation
    
    For each of those lines
      Create a clone of the full list of instructions
      Change the operation at the current line to swap 'nop' for 'jmp' or vice versa
      Run the single-line modified program, tracking the unique set of indices visited, the next index expected, and an accumulator...until the next index exists in the unique set of indices visited
    
      As soon as the next index expected is equivalent to the length of the list of instructions - indicating that the program finally terminated:
        Update the correct accumulator to equal the currently tracked local accumulator
        Break out of the outer loop
    
    Return the newly-set value in the correct accumulator
    


    내 무차별 대입 알고리즘의 시각화는 다음과 같습니다.


    내 알고리즘의 성능을 고려



    내 퍼즐 입력의 경우 최악의 시나리오는 이 루프가 거의 250회 실행되어 650개가 조금 넘는 명령이 포함된 명령 목록의 거의 250개 복제본을 생성하는 것이었습니다.

    따라서 공간 또는 시간 복잡도에서 최적이 아닙니다.

    하지만... 1초도 안 되는 느낌으로 정답을 생성했습니다.

    여튼 임무 완수!

    좋은 웹페이지 즐겨찾기