My Advent of Code solutions in Python. kevinyap.ca/2019/12/going-fast-in-advent-of-code/
advent-of-code python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add solution for 2019/16

+43
+40
2019/day16.py
··· 1 + import fileinput 2 + 3 + 4 + PATTERN = [0, 1, 0, -1] 5 + SIGNAL = [int(s) for s in fileinput.input()[0].strip()] 6 + 7 + 8 + def fft(signal): 9 + def coeff(idx, digit): 10 + r = ((idx + 1) // (digit + 1)) % 4 11 + return PATTERN[r] 12 + 13 + for _ in range(100): 14 + for i in range(len(signal)): 15 + res = 0 16 + for j, d in enumerate(signal): 17 + res += coeff(j, i) * d 18 + 19 + signal[i] = abs(res) % 10 20 + 21 + return signal 22 + 23 + 24 + def fft_backhalf(signal): 25 + # What pattern? 26 + for _ in range(100): 27 + partial = 0 28 + for i in reversed(range(len(signal) // 2, len(signal))): 29 + partial += signal[i] 30 + signal[i] = partial % 10 31 + 32 + return signal 33 + 34 + 35 + part_1 = ''.join(str(n) for n in fft(SIGNAL[:]))[:8] 36 + print "First 8 digits of FFT(input):", part_1 37 + 38 + offset = int(''.join(str(n) for n in SIGNAL[:7])) 39 + part_2 = ''.join(str(n) for n in fft_backhalf(SIGNAL * 10000)[offset:offset+8]) 40 + print "Offset digits of FFT(input * 10000):", part_2
+1
2019/inputs/16.txt
··· 1 + 59709511599794439805414014219880358445064269099345553494818286560304063399998657801629526113732466767578373307474609375929817361595469200826872565688108197109235040815426214109531925822745223338550232315662686923864318114370485155264844201080947518854684797571383091421294624331652208294087891792537136754322020911070917298783639755047408644387571604201164859259810557018398847239752708232169701196560341721916475238073458804201344527868552819678854931434638430059601039507016639454054034562680193879342212848230089775870308946301489595646123293699890239353150457214490749319019572887046296522891429720825181513685763060659768372996371503017206185697
+2
2019/outputs/16.txt
··· 1 + 34841690 2 + 48776785