diff options
author | Nat Lasseter <Nat Lasseter nathan@bytemark.co.uk> | 2017-12-18 22:33:42 +0000 |
---|---|---|
committer | Nat Lasseter <Nat Lasseter nathan@bytemark.co.uk> | 2017-12-18 22:33:42 +0000 |
commit | fbb60e001a029d0d104118d4d12d578b1f14d807 (patch) | |
tree | c9089ddc1fe109a40e76624da0383d6f0e517ec0 /day18 | |
parent | b880d35aba91fd5c9a8a696705914d44da77e508 (diff) |
Day18 Part1
Diffstat (limited to 'day18')
-rw-r--r-- | day18/input | 41 | ||||
-rwxr-xr-x | day18/part1 | 42 |
2 files changed, 83 insertions, 0 deletions
diff --git a/day18/input b/day18/input new file mode 100644 index 0000000..156807f --- /dev/null +++ b/day18/input @@ -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 952 +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/day18/part1 b/day18/part1 new file mode 100755 index 0000000..70a0d94 --- /dev/null +++ b/day18/part1 @@ -0,0 +1,42 @@ +#!/usr/bin/env ruby + +def valof(reg_file, reg_or_int) + if reg_or_int >= 'a' && reg_or_int <= 'z' then + return reg_file[reg_or_int] || 0 + end + return reg_or_int.to_i +end + +input = $stdin.readlines.map(&:chomp) + +reg = {} +snd = 0 +pc = 0 + +loop do + break if pc >= input.length + istr = input[pc].split + case istr[0] + when 'snd' + snd = valof(reg, istr[1]) + when 'set' + reg[istr[1]] = valof(reg, istr[2]) + when 'add' + reg[istr[1]] = valof(reg, istr[1]) + valof(reg, istr[2]) + when 'mul' + reg[istr[1]] = valof(reg, istr[1]) * valof(reg, istr[2]) + when 'mod' + reg[istr[1]] = valof(reg, istr[1]) % valof(reg, istr[2]) + when 'rcv' + unless valof(reg, istr[1]) == 0 then + puts snd + break + end + when 'jgz' + if valof(reg, istr[1]) > 0 then + pc += valof(reg, istr[2]) + pc -= 1 + end + end + pc += 1 +end |