엘프는 보고 엘프는 말한다
코드 출현 2015 10일 차
1 부
Map()
의 첫 번째 사용 ? 계산하는 가장 좋은 방법은 무엇입니까?
여전히 개체를 사용하여 각 숫자를 집계할 수 있습니까?
Map() 을 처음 사용합니까?
MDN의 페이지에 따라:
The Map object holds key-value pairs and remembers the original insertion order of the keys
그게 내가 원하는거야, 그렇지?
예 중 하나를 사용하여:
1211
Map()
를 사용하여 다음 개체를 만들 수 있습니다.{ '1': 1 }
{ '1': 1, '2': 1 }
{ '1': 2, '2': 1 }
{ '1': 3, '2': 1 }
그리고 순서대로 새 시퀀스를 생성합니다.
1321
어 오. 그건 내가 원한 게 아니야.
나는 원했다:
1 1 1 2 2 1
흠, 다른 접근법이 필요한 것 같습니다.
새로운 접근법: 선을 따라 걷기
이 예제로 돌아가서:
1211
의사 코드로서의 내 알고리즘 :
Do 40 times
Set next as an empty string
Set i as 0
Do as long as i is less than the length of the sequence
Set count to 1
Set j to one more than i
Do as long as j is less than the length of the sequence and the character at j is the same as the character at i
Increment count by 1
Increment j by 1
Concatenate next with count and the character at i
Set i to j
Set sequence to next
Return the length of sequence
내 알고리즘, 애니메이션:
내 알고리즘을 40번 실행하면 정답이 거의 즉시 생성되었습니다!
2 부
정답을 맞히다...결국
40
를 50
로 업데이트했습니다.훨씬 더 빠르게 정답을 얻습니다.
JavaScript에서 내 최적화된 알고리즘:
function lookAndSay(digits, times) {
let sequence = digits.split('')
for (let times = 0; times < 50; times++) {
let next = [], i = 0
while (i < sequence.length) {
let count = 1, j = i + 1
while (j < sequence.length && sequence[j] == sequence[i]) {
count++
j++
}
next.push(count, sequence[i])
i = j
}
sequence = next
}
return sequence.length
}
// Part 1
lookAndSay(input, 40)
// Part 2
lookAndSay(input, 50)
해냈어!!
2015년은 지금까지 정말 재미있는 퍼즐의 해였습니다!
Reference
이 문제에 관하여(엘프는 보고 엘프는 말한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/elves-look-elves-say-kk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)