디지털 배관공
코드 출현 2017 12일차
1 부
일대다...다시
사전 만들기
패턴은 일대다입니다.
2 <-> 0, 3, 4
3 <-> 2, 4
5 <-> 6
추출해야 할 부분은 숫자뿐입니다. 이는 간단한 정규식을 만듭니다.
/\d+/g
그러면 한 줄의 각 숫자가 표시됩니다.
지침에 따라 다음과 같은 줄입니다.
2 <-> 0, 3, 4
다음을 의미하는 것 같습니다.
따라서:
For each number in the line
Create or add to a set of unique values it can communicate with each of the other numbers
예제 입력을 어떻게 찾습니까?
0 <-> 2
1 <-> 1
2 <-> 0, 3, 4
3 <-> 2, 4
4 <-> 2, 3, 6
5 <-> 6
6 <-> 4, 5
이와 같이?
0: 2, 3, 4
2: 0, 3, 4, 6
1: 1
3: 0, 2, 4, 6
4: 0, 2, 3, 6, 5
6: 2, 3, 4, 5
5: 6, 4
0
를 작성하려면 또 다른 반복이 필요합니다. 여기에서 0
의 각 숫자와 연결된 각 집합에서 찾은 각 숫자를 추가하려고 시도합니다.0: 2 (+6), 3, 4 (+5)
아마도 내 알고리즘은 모든 숫자에 대해
0
를 되돌아보고 0
에 숫자가 있으면 해당 숫자와 현재 줄에 저장된 숫자도 추가할 수 있습니까?조회 시 많은 숫자가 사전에 추가되지 않았기 때문에 까다로워집니다.
이 정규식과 사전 데이터 구조를 구현하는 알고리즘 작성을 시도하기에 충분한 이해가 있다고 생각합니다.
작업 알고리즘 작성 및 테스트
Split the input at each newline character into an array of strings
For each string, populate a dictionary
Use the regular expression to extract all the digits
For each digit as i
For each digit as j
As long as i is not j
If the digit is not yet a key in the dictionary
Create a key for it and set the value to a unique Set
Add the digit j to the unique set if not already part of the Set
Create a counter to track the size of the Set associated with the key, 0
Initialize it to the current size, after the dictionary is done being constructed
Do at least once, and as long as counter is less than the new size of the Set associated with the key, 0
For each number in the Set associated with 0
Attempt to add each number in the Sets associated with the current number to the Set associated with 0
결과 테스트:
2 부
일대다... 또?!
이것은 문자 그대로 키를 제거하는 재미있는 과정이어야 합니다.
내 계획:
Run the algorithm from Part 1 to identify all members in a group shared by `0`
Delete each of those keys from the dictionary
Run the algorithm from Part 1 on the next key in the dictionary
Delete each of the keys identified as part of that dictionary
Go until there are no other keys to evaluate
Count the number of keys remaining in the dictionary
작업 알고리즘 작성 및 테스트
내가 계획한 알고리즘 때문에 중요한 부분을 너무 빨리 수행하게 되었고 또 다른 중요한 부분을 놓쳤습니다.
이것은 작동하는 알고리즘입니다.
Split the input at each newline character into an array of strings
For each string, populate a dictionary
Use the regular expression to extract all the digits
For each digit as i
For each digit as j
As long as i is not j
If the digit is not yet a key in the dictionary
Create a key for it and set the value to a unique Set
Add the digit j to the unique set if not already part of the Set
Create a counter to track the number of groups identified
For each key in the dictionary
Create a counter to track the size of the Set associated with the key
Initialize it to the current size
Do at least once, and as long as counter is less than the new size of the Set associated with the key
For each number in the Set associated with the key
Attempt to add each number in the Sets associated with the current number to the Set associated with the key
Remove the number in its Set that is equal to the key
Delete each key in the dictionary bearing the same alias as each number in this key's set of values
Increment the group counter by 1
Return the group counter's value
이 GIF는 파트 1과 2에 대한 알고리즘이 어떻게 작동하는지 보여줍니다.
결과 테스트:
해냈어!!
Reference
이 문제에 관하여(디지털 배관공), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/digital-plumber-3clm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)