레오나르도의 모노레일
코드 출현 2016 12일차
1 부
맙소사: 11일차에 의존하지 않음
다행히도 12일차는 또...
조합 코드: 라운드...?
이것은 더 쉬운 것 같습니다.
나는 세 번째나 네 번째처럼 느껴지는 것에 대해 동일한 알고리즘을 작성하려고 합니다...
내 작업 알고리즘 작성
각 줄의 opcode 및 피연산자 추출:
Split the input at each newline character into an array of strings
For each string
Split the string at each space character into an array of two or three strings, saved as op, x and y
If y contains a value (meaning there were three strings)
Construct a three-element array containing the opcode string, and either a string or number for x and y
Else, if y is empty (meaning there were two strings)
Construct a two-element array containing the opcode string, and either a string or number for x
이것은 내가 작성한 JavaScript입니다.
input.split('\n').map(line => {
let [op, x, y] = line.split(' ')
if (y) {
return [op, isNaN(x) ? x : +x, isNaN(y) ? y : +y]
} else {
return [op, isNaN(x) ? x : +x]
}
})
추가 설정:
Set pointer to 0 so it starts reading at the first instruction
Set registers as an object with four keys, a-d, each with 0 as a value
opcode 함수의 사전:
cpy(x,y) {
registers[y] = (typeof x == 'string') ? registers[x] : x;
pointer++
},
inc(x) {
registers[x]++
pointer++
},
dec(x) {
registers[x]--
pointer++
},
jnz(x,y) {
registers[x] !== 0 ? pointer += y : pointer++
}
메인 루프:
Do as long as pointer contains a number that could refer to an index within the bounds of the list of instructions
Invoke the appropriate function in the dictionary of opcodes, passing as arguments the second value in the instruction and the third...even if there is no third value
while (pointer >= 0 && pointer < rules.length) {
opcodes[rules[pointer][0]](
rules[pointer][1], rules[pointer][2]
)
}
위의 코드를 작성하면서 두 가지 실수를 저질렀습니다.
pointer
함수jnz
를 증가시키는 것을 잊었습니다.rules[pointer[1]]
대신에 rules[pointer][1]
를 썼는데, 프로그램이 1
에 저장된 번호에 어떤 속성pointer
이 존재할 것으로 예상하도록 혼동했습니다.이러한 오류를 수정한 후 프로그램이 실행되어 예상대로 정답을 생성했습니다!
2 부
추측해 볼까요... 성능 테스트?
c
를 1
로 변경한 다음 고맙게도 몇 초 안에 끝납니다.
a
에는 900만 개가 넘는 숫자가 포함되어 있습니다. 1부에서는 300,000개가 조금 넘는 숫자해냈어!!
오늘의 퍼즐을 풀고 메인 맵으로 돌아온 후 이 애니메이션이 재생되는 것을 보고 기뻤습니다.
Reference
이 문제에 관하여(레오나르도의 모노레일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/leonardos-monorail-187l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)