인코딩 오류
코드 출현 2020 9일차
다음은 예제 입력을 사용한 두 알고리즘의 시각화입니다.
과제: X에 대해 풀기 여기서...
1 부:
X = the first number that is not the sum of two of the N numbers before it
및 N = 25
2 부:
X = the sum of the smallest and largest numbers included in a list of contiguous numbers from the puzzle input that sum to the number identified in Part 1
N = 5인 입력 예
35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576
다음을 나타냅니다.
1 부
'내림차순 계단' 알고리즘 시각화
숫자 그룹 중에서 가능한 모든 합을 추적해야 하는 것 같습니다.
그 숫자가 1-5라고 가정 해 봅시다.
1 2 3 4 5
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
5 6 7 8 9 10
다음으로, 같은 숫자를 두 번 더하는 것에서 합계를 제외해야 합니다.
1 2 3 4 5
1 3 4 5 6
2 3 5 6 7
3 4 5 7 8
4 5 6 7 9
5 6 7 8 9
그리고 우리는 합계를 얻었습니다.
공식은 다음과 같을 수 있습니다.
Where N = the size of the group
N * (N - 1) = the amount of sums to track
N = 5
5 * (5 - 1) = 20 sums to track
N = 25
25 * (25 - 1) = 225 sums to track
포함된 합계로 확인할 첫 번째 숫자가 6이라고 가정합니다.
1 2 3 4 5
1 3 4 5 6
2 3 5 6 7
3 4 5 7 8 <-- 6?
4 5 6 7 9
5 6 7 8 9
예! 거기에 있습니다.
합계 그룹은 어떻게 조정해야 합니까?
정확히 보여주기 위해 만든 비주얼은 다음과 같습니다.
매 턴:
해당 알고리즘을 작성하려고 시도하다가 중지합니다.
훨씬 간단하고 작동하는 알고리즘
나는 잠자리에 들었고 대답이 나를 때렸습니다!
Forget about storing and updating a list of sums
Store the puzzle input as an array of numbers
Create and store the preamble subset
Check as many numbers needed in the preamble until a match is found for the inclusion of the number that equals the next number in the input list minus the number being checked
If a match is found
Escape the loop immediately with an indication that a match was found
Update the preamble subset such that the first number is removed and the next number in the input list is added
Else, if no match is found
Return the next number in the input list
다음은 해당 알고리즘의 시각화입니다.
2 부
어디에서 시작할 것인가, 시작인가 끝인가?
결정됨: 유효하지 않은 숫자 앞의 1부터 시작하여 입력 목록의 처음부터가 아니라 역방향으로 작업하고 앞으로 작업
작동하는 알고리즘 작성
Run Part 1's algorithm to identify the first invalid number
Store the location of that number in the puzzle input list
Initialize an incrementing value i to 1
Create an empty array, nums
Do as long as the numbers stored in nums do not sum to the invalid number
Set an incrementing value j to i
Do as long as the numbers stored in nums sum to a value less than the invalid number
Insert in nums the value from the puzzle input at the location equivalent to the location of the invalid number minus the value stored in j
Increment j by 1
If, by now, nums is empty or the numbers stored in nums sum to a value greater than the invalid number
Reset nums to an empty array
Increment i by 1
Return the sum of the highest and lowest numbers in nums
위치 650 근처의 유효하지 않은 숫자부터 시작하는 것이 현명했던 것 같습니다. 퍼즐 입력의 경우 위치 500 주변에서 시작된 17개의 연속된 숫자 목록이 있기 때문입니다.
다음은 예제 입력을 사용한 두 알고리즘의 시각화입니다.
Reference
이 문제에 관하여(인코딩 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/encoding-error-2ffo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)