Passed
Push — main ( 636602...bd8647 )
by Yohann
01:05
created

main.show_crt()   A

Complexity

Conditions 2

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 8
nop 1
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
import pathlib
2
3
4
def get_cycles_values(lines):
5
    cycles = [1]
6
    for line in lines:
7
        if line == 'noop':
8
            cycles.append(cycles[-1])
9
            continue
10
11
        n = int(line.split()[1])
12
        cycles.append(cycles[-1])
13
        cycles.append(cycles[-1] + n)
14
15
    cycles.pop()
16
    return cycles
17
18
19
def get_target_registers(cycles):
20
    return sum(
21
        cycles[cycle_n - 1] * cycle_n
22
        for cycle_n in (20, 60, 100, 140, 180, 220)
23
    )
24
25
26
def show_crt(cycles):
27
    def chunk(lst, size):
28
        return [lst[i:i + size] for i in range(0, len(lst), size)]
29
30
    return '\n' + '\n'.join(
31
        ''.join(
32
            ('##' if abs(idx - x) < 2 else '  ')
33
            for idx, x in enumerate(ctr_line)
34
        ) for ctr_line in chunk(cycles, 40)
35
    )
36
37
38
def main():
39
    content = pathlib.Path('./input.txt').read_text()
40
    cycles = get_cycles_values(content.splitlines())
41
42
    print('Part 1:', get_target_registers(cycles))
43
    print('Part 2:', show_crt(cycles))
44
45
46
if __name__ == '__main__':
47
    main()
48