-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path16.py
executable file
·48 lines (35 loc) · 1.74 KB
/
16.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env python3
import math
puzzle_input = "59756772370948995765943195844952640015210703313486295362653878290009098923609769261473534009395188480864325959786470084762607666312503091505466258796062230652769633818282653497853018108281567627899722548602257463608530331299936274116326038606007040084159138769832784921878333830514041948066594667152593945159170816779820264758715101494739244533095696039336070510975612190417391067896410262310835830006544632083421447385542256916141256383813360662952845638955872442636455511906111157861890394133454959320174572270568292972621253460895625862616228998147301670850340831993043617316938748361984714845874270986989103792418940945322846146634931990046966552"
#puzzle_input = "03036732577212944063491565474664"
numbers = list(map(int, list(puzzle_input)))
def calc_phase(in_list):
result = []
pattern = [0, 1, 0, -1]
for repeat_idx in range(len(in_list)):
fft = 0
for num_idx, num in enumerate(in_list):
pattern_idx = math.floor((num_idx+1)/(repeat_idx+1)) % len(pattern)
#print(repeat_idx, ",", num, ":", pattern_idx)
fft += pattern[pattern_idx] * num
result.append(abs(fft) % 10)
return result
step = 0
steps = 100
result = numbers[:]
while step < steps:
step += 1
result = calc_phase(result)
# Teil 1: 6954915595770795875296...
print("Part 1:", "".join(list(map(str, result))))
# Teil 2
# Was für ein Mist
real_signal = (numbers[:])*10000
message_offset = int(puzzle_input[:7])
step = 0
steps = 100
result = real_signal[message_offset:]
for x in range(steps):
for idx in range(len(result) - 1, 0, -1):
result[idx-1] = (result[idx-1] + result[idx]) % 10
print("Result:", "".join([str(x) for x in result[:8]]))