핸드헬드 정지
코드 출현 2020 8일차
과제: X에 대해 풀기 여기서...
X = the value of accumulator at some N time
예시 입력
nop +0
acc +1
jmp +4
acc +3
jmp -3
acc -99
acc +1
jmp -4
acc +6
다음을 나타냅니다.
1 부
추적할 항목 식별
작동할 것으로 생각되는 알고리즘 작성
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초도 안 되는 느낌으로 정답을 생성했습니다.
여튼 임무 완수!
Reference
이 문제에 관하여(핸드헬드 정지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/handheld-halting-4mjl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)