스핀록
코드 출현 2017 17일차
1 부
이것은 친숙한 것 같습니다 ...
이전에 원형 삽입 퍼즐을 본 적이 있습니까?
그것은 내가 최근에 이 퍼즐 유형을 더 많이 본 것을 기억하는 내 직감을 확인시켜줍니다.
이것은 상당히 간단해 보인다...
Start with an array containing the value 0
For i from 1 to 2018 and current starting at 0
Without deleting anything...
...insert i at the location in the array...
...equivalent to:
- the remainder after dividing the sum of
- current and the puzzle input integer
- by the length of the array
- then adding 1
Then, update current to the location in the array of i
Return the integer at the location one greater than the location of the integer 2017
이 알고리즘은
3
의 예제 입력과 내 퍼즐 입력 모두에 대해 정답을 생성합니다!그러나 나는 그것을 작성하는 과정에서 몇 가지 버그와 겉보기에 운이 좋은 우연의 일치를 경험했습니다.
current
.current
를 i
씩 잘못 증가시켰습니다.3
의 예제 입력을 사용하여 정답을 생성하고 있었습니다! too high
인지 의문이 들었습니다.고맙게도 그 문제들을 해결했습니다.
그리고 알고리즘을 5줄이 조금 넘는 코드로 단순화, 축소 및 압축했습니다!
Part 1을 해결하기 위해 작성한 JavaScript는 다음과 같습니다.
const part1 = () => {
let input = 3, RA = [0]
for (let i = 1, curr = 0; i < 2018; i++) {
RA.splice((curr + 376) % i + 1, 0, i)
curr = RA.indexOf(i)
}
return RA[RA.indexOf(2017) + 1]
}
2 부
오 그래, 그게 오는 걸 봤어
바라건대 곧 연결 목록을 사용하는 방법을 배우게 될 것입니다.
그런 다음 위에서 언급한 몇 가지 퍼즐로 돌아가서 이를 필요로 하는 파트 2를 해결하려고 시도합니다.
게시 후 업데이트
연결 목록 사용
npm
library that provides a doubly linked list data structure을 찾았습니다.내 연결 목록 메인 루프는 다음과 같습니다.
for (let i = 1, curr = 0; i < 2018; i++) {
let index = (curr + input) % i + 1
if (index > i - 1) {
list.insert(i)
curr = i - 1
} else {
list.insertAt(index, i)
curr = index
}
}
안타깝다.
패턴 사냥
어쩌면 내가 50M로 추정할 수 있는 0 바로 오른쪽에 있는 정수에 대한 패턴이 있을까요?
안타깝다.
해냈어!
Reference
이 문제에 관하여(스핀록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/spinlock-mlg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)