day 10
This commit is contained in:
parent
255c440a98
commit
40c08275cc
220
src/day10.py
Normal file
220
src/day10.py
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from cpl_core.console import Console
|
||||||
|
from cpl_core.utils import String
|
||||||
|
from cpl_query.enumerable import Enumerable
|
||||||
|
from cpl_query.extension import List
|
||||||
|
from cpl_core.pipes import *
|
||||||
|
|
||||||
|
from aoc.aoc import get_input
|
||||||
|
|
||||||
|
# global vars
|
||||||
|
day = 10
|
||||||
|
aoc_input = get_input(2022, day)
|
||||||
|
aoc_input1 = """noop
|
||||||
|
addx 3
|
||||||
|
addx -5
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def get_test_data():
|
||||||
|
return """addx 15
|
||||||
|
addx -11
|
||||||
|
addx 6
|
||||||
|
addx -3
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx -8
|
||||||
|
addx 13
|
||||||
|
addx 4
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx -35
|
||||||
|
addx 1
|
||||||
|
addx 24
|
||||||
|
addx -19
|
||||||
|
addx 1
|
||||||
|
addx 16
|
||||||
|
addx -11
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 21
|
||||||
|
addx -15
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -3
|
||||||
|
addx 9
|
||||||
|
addx 1
|
||||||
|
addx -3
|
||||||
|
addx 8
|
||||||
|
addx 1
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -36
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
addx 7
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
addx 6
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 7
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx -13
|
||||||
|
addx 13
|
||||||
|
addx 7
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
addx -33
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 8
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 2
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 17
|
||||||
|
addx -9
|
||||||
|
addx 1
|
||||||
|
addx 1
|
||||||
|
addx -3
|
||||||
|
addx 11
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -13
|
||||||
|
addx -19
|
||||||
|
addx 1
|
||||||
|
addx 3
|
||||||
|
addx 26
|
||||||
|
addx -30
|
||||||
|
addx 12
|
||||||
|
addx -1
|
||||||
|
addx 3
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -9
|
||||||
|
addx 18
|
||||||
|
addx 1
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 9
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 2
|
||||||
|
addx -37
|
||||||
|
addx 1
|
||||||
|
addx 3
|
||||||
|
noop
|
||||||
|
addx 15
|
||||||
|
addx -21
|
||||||
|
addx 22
|
||||||
|
addx -6
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx -10
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 20
|
||||||
|
addx 1
|
||||||
|
addx 2
|
||||||
|
addx 2
|
||||||
|
addx -6
|
||||||
|
addx -11
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class CPU:
|
||||||
|
x = 1
|
||||||
|
cycles = 1
|
||||||
|
signal_strength = 0
|
||||||
|
|
||||||
|
position = 0
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def cycle(cls, value: int = None):
|
||||||
|
Console.write('█' if cls.position >= cls.x - 1 and cls.position <= cls.x + 1 else ' ')
|
||||||
|
|
||||||
|
cls.position += 1
|
||||||
|
if cls.position == 40:
|
||||||
|
cls.position = 0
|
||||||
|
Console.write_line()
|
||||||
|
|
||||||
|
if (cls.cycles - 20) % 40 == 0:
|
||||||
|
cls.signal_strength += cls.x * cls.cycles
|
||||||
|
|
||||||
|
cls.cycles += 1
|
||||||
|
|
||||||
|
if value is not None:
|
||||||
|
cls.x += value
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ops = List(tuple)
|
||||||
|
# aoc_input = get_test_data()
|
||||||
|
Console.write_line()
|
||||||
|
for line in aoc_input.splitlines():
|
||||||
|
s_line = line.split()
|
||||||
|
cmd = s_line[0]
|
||||||
|
value = None
|
||||||
|
if len(s_line) > 1:
|
||||||
|
value = int(s_line[1])
|
||||||
|
|
||||||
|
match cmd:
|
||||||
|
case 'noop':
|
||||||
|
CPU.cycle(None)
|
||||||
|
case 'addx':
|
||||||
|
CPU.cycle(None)
|
||||||
|
CPU.cycle(value)
|
||||||
|
|
||||||
|
Console.write_line()
|
||||||
|
Console.write_line(CPU.cycles, CPU.x, CPU.signal_strength)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
Console.write_line(f'Advent of code day {day}')
|
||||||
|
main()
|
||||||
|
Console.write_line()
|
Loading…
Reference in New Issue
Block a user