확장 중합
코드 2021의 출현 14일차
입력한 시뮬레이터를 사용해 보십시오.
X에 대해 풀기
X = the difference between the most and least common letters after N pair insertion steps
우리의 의견은 무엇입니까?
두 가지를 나타냅니다.
내 순진한 말 그대로 무차별 대입 알고리즘
Step 1 - Parse the input into the two separate parts
1. A string representation of the starting template
2. An object where keys are adjacent letters and values are the letter to be inserted
Step 2 - Perform in-place pair insertion into a growing string of letters, just as the instructional diagram depicts
Do N times
Split the template into a list of ordered letters
For each letter in the list at its initial length, starting from the letter at the end of the list:
Look-up the rule matching the concatenation of the letter to the left and the current letter
If a pairing rule exists:
Update the array by inserting the correct letter between the current letter and the one to its left
Reassign to the variable storing the starting template the result of joining each letter in the updated array
Step 3 - Tally each letter
Store an object to be filled with keys of each letter and values that increment with each occurrence of that letter
For each letter in the most updated template string
If the object has a key of the letter, increment its value by 1
Else, create the key and set its value to 1
Lastly, return the difference of the letter with the largest tally and the letter with the smallest tally
이 애니메이션은 내 알고리즘의 2단계가 어떻게 작동하는지 보여줍니다.
내 알고리즘이 그렇게 끔찍하게 작동하는 이유
나는 이 도전을 다른 방법으로 해결하는 방법을 몰라 헤맸습니다.
웅변적인 솔루션에 대한 짧은 검색
find a solution은 간결하고 집중된 연구로 이해할 수 있으며 결국 재현할 수 있는 것처럼 보이는 데 오랜 시간이 걸리지 않았습니다.
JavaScript solver NullDev의 솔루션은 완벽한 후보였다
NullDev 알고리즘 연구
6가지 핵심 단계가 있는 것 같습니다.
핵심 알고리즘
(o, k, v = 1) => (o[k] = (k in o) ? o[k] + v : v);
의사 코드로 번역:
Define a function that expects three parameters:
1. An object
2. A key to lookup in that object
3. A value - 1 - to assign to new keys, or to add to values of existing keys...
Body of the function:
Assign to the object's key the following, depending on whether that key exists on the object:
If it exists, assign to it the sum of the current value stored in that key and the passed in value
Else - if it doesn't exist:
Assign to it the value passed in, or 1
이 애니메이션은 3단계를 설명합니다.
이 애니메이션은 4단계를 설명합니다.
이 애니메이션은 5단계를 설명합니다.
다음은 NullDev의 웅변 알고리즘에서 위의 세 단계에 대한 전체 그림입니다.
이 알고리즘의 성능과 역학에 감탄
내 입력을 해결할 시뮬레이터 구축
그런 보람찬 느낌
이 퍼즐에 시간을 잘 보냈습니다.
다음으로!
Reference
이 문제에 관하여(확장 중합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/extended-polymerization-aab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)