advent-of-code

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 56a0de87d78ba38ca498b516bf71d46e4658fb8a
parent 788c5d6058ef3e3242e49f89067a5d2060b4a901
Author: mpizzzle <michael.770211@gmail.com>
Date:   Tue, 19 Dec 2017 21:11:02 +0000

puzzle 18 part 1 complete

Diffstat:
Afiles/puzzle18.txt | 41+++++++++++++++++++++++++++++++++++++++++
Mpuzzle17.py | 2+-
Apuzzle18.py | 28++++++++++++++++++++++++++++
3 files changed, 70 insertions(+), 1 deletion(-)

diff --git a/files/puzzle18.txt b/files/puzzle18.txt @@ -0,0 +1,41 @@ +set i 31 +set a 1 +mul p 17 +jgz p p +mul a 2 +add i -1 +jgz i -2 +add a -1 +set i 127 +set p 622 +mul p 8505 +mod p a +mul p 129749 +add p 12345 +mod p a +set b p +mod b 10000 +snd b +add i -1 +jgz i -9 +jgz a 3 +rcv b +jgz b -1 +set f 0 +set i 126 +rcv a +rcv b +set p a +mul p -1 +add p b +jgz p 4 +snd a +set a b +jgz 1 3 +snd b +set f 1 +add i -1 +jgz i -11 +snd a +jgz f -16 +jgz a -19 diff --git a/puzzle17.py b/puzzle17.py @@ -11,7 +11,7 @@ print spinlock_buffer[ptr + 1] ptr = 0 -for i in range(1, 50000000): +for i in range(1, 50000001): ptr = ((ptr + step) % i) + 1 if ptr == 1: print i diff --git a/puzzle18.py b/puzzle18.py @@ -0,0 +1,28 @@ +with open('files/puzzle18.txt') as f: + instructions = f.readlines() + +ptr = 0 +last_played_value = 0 +registers = {chr(i + 97) : 0 for i in range(26)} + +while ptr >= 0 and ptr < len(instructions): + tokens = instructions[ptr].strip().split(" ") + + if tokens[0] == "snd": + last_played_value = registers[tokens[1]] + if tokens[0] == "rcv" and registers[tokens[1]] > 0: + break + if tokens[0] == "set": + registers[tokens[1]] = int(tokens[2]) if not str.isalpha(tokens[2]) else registers[tokens[2]] + if tokens[0] == "add": + registers[tokens[1]] += int(tokens[2]) if not str.isalpha(tokens[2]) else registers[tokens[2]] + if tokens[0] == "mul": + registers[tokens[1]] *= int(tokens[2]) if not str.isalpha(tokens[2]) else registers[tokens[2]] + if tokens[0] == "mod": + registers[tokens[1]] %= int(tokens[2]) if not str.isalpha(tokens[2]) else registers[tokens[2]] + if tokens[0] == "jgz" and registers[tokens[1]] > 0: + ptr += int(tokens[2]) if not str.isalpha(tokens[2]) else registers[tokens[2]] + continue + ptr += 1 + +print last_played_value