From 1a141d6846039730e4075e7aeb2be259a609e1fa Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 8 Dec 2020 08:05:29 -0600 Subject: [PATCH] added day 8; updated day 3 --- day3.onyx | 6 +- day8.onyx | 99 ++++++++ input/day8.txt | 626 +++++++++++++++++++++++++++++++++++++++++++++++++ out.wasm | Bin 11421 -> 14947 bytes 4 files changed, 728 insertions(+), 3 deletions(-) create mode 100644 day8.onyx create mode 100644 input/day8.txt diff --git a/day3.onyx b/day3.onyx index 68418c8..e81d9f2 100644 --- a/day3.onyx +++ b/day3.onyx @@ -47,10 +47,10 @@ main :: proc (args: [] cstring) { lis[3] = LineInterp.{ 0, 0, 7, 1 }; lis[4] = LineInterp.{ 0, 0, 1, 2 }; - tree_prod: u64 = ~~1; + tree_prod: u64 = 1; for li: lis { - tree_count := 0; + tree_count: u64 = 0; while i := 0; true { p := line_interp_at(li, i); if p.y >= height || p.y < 0 do break; @@ -61,7 +61,7 @@ main :: proc (args: [] cstring) { if forest[p.x + p.y * width] == #char "#" do tree_count += 1; } - tree_prod *= ~~tree_count; + tree_prod *= tree_count; } printf("Tree product: %l\n", tree_prod); diff --git a/day8.onyx b/day8.onyx new file mode 100644 index 0000000..e06eaa1 --- /dev/null +++ b/day8.onyx @@ -0,0 +1,99 @@ +#include_file "core/std/wasi" + +use package core +use package system { output_string } + +OpCode :: enum (u16) { + Nop; Acc; Jmp; +} + +Instruction :: struct { + opcode : OpCode; + data : i16; +} + +// Returns if the program successfully exited. +get_acc_value :: proc (instrs: [..] Instruction, ret_acc: ^i32) -> bool { + already_been: i32map.I32Map(bool); + i32map.init(^already_been); + defer i32map.free(^already_been); + + ip := 0; + acc := 0; + succ := false; + while true { + if ip >= instrs.count { + succ = true; + break; + } + + if i32map.has(^already_been, ip) do break; + i32map.put(^already_been, ip, true); + + instr := instrs[ip]; + switch instr.opcode { + case OpCode.Nop do ip += 1; + case OpCode.Acc do { + acc += ~~instr.data; + ip += 1; + } + case OpCode.Jmp do ip += ~~instr.data; + } + } + + *ret_acc = acc; + return succ; +} + +main :: proc (args: [] cstring) { + // contents := file.get_contents("input/day8.txt"); + // contents_data := contents.data; + // defer cfree(contents_data); + + contents := #file_contents "input/day8.txt"; + + instrs: [..] Instruction; + array.init(^instrs, 32); + defer array.free(^instrs); + + while true { + if contents.count < 3 do break; + + word: string; + str.read_chars(^contents, ^word, 3); + str.discard_chars(^contents); + + sign: u8; + str.read_char(^contents, ^sign); + + val: i32; + str.read_u32(^contents, ^val); + + str.advance_line(^contents); + + if sign == #char "-" do val *= -1; + + opcode : OpCode; + if str.equal(word, "nop") do opcode = OpCode.Nop; + elseif str.equal(word, "acc") do opcode = OpCode.Acc; + elseif str.equal(word, "jmp") do opcode = OpCode.Jmp; + + array.push(^instrs, Instruction.{ + opcode = opcode, + data = ~~val, + }); + } + + acc: i32; + for ^instr: instrs { + if instr.opcode == OpCode.Nop do instr.opcode = OpCode.Jmp; + elseif instr.opcode == OpCode.Jmp do instr.opcode = OpCode.Nop; + + if get_acc_value(instrs, ^acc) do break; + + if instr.opcode == OpCode.Nop do instr.opcode = OpCode.Jmp; + elseif instr.opcode == OpCode.Jmp do instr.opcode = OpCode.Nop; + } + + printf("Accumulator value: %i\n", acc); +} diff --git a/input/day8.txt b/input/day8.txt new file mode 100644 index 0000000..5ef799e --- /dev/null +++ b/input/day8.txt @@ -0,0 +1,626 @@ +acc +48 +nop +308 +acc +33 +acc +48 +jmp +379 +acc +27 +acc +23 +acc +29 +acc +3 +jmp +326 +acc -12 +nop +248 +nop +146 +jmp +293 +acc +8 +acc -16 +acc +18 +jmp +255 +jmp +390 +jmp +442 +acc +38 +jmp +451 +jmp +499 +acc +41 +acc +44 +nop +298 +acc +31 +jmp +337 +acc -3 +acc +34 +nop +266 +acc -19 +jmp +281 +jmp +232 +acc -9 +acc +25 +acc -8 +nop +228 +jmp +79 +jmp +58 +acc +38 +nop +318 +jmp +17 +acc +44 +jmp +298 +acc -4 +jmp +196 +jmp +249 +acc -9 +acc -3 +acc +17 +jmp +556 +jmp +1 +acc -15 +jmp +166 +acc +23 +acc +10 +acc +39 +jmp +475 +acc +28 +jmp +41 +jmp +322 +acc +48 +acc -11 +acc -13 +acc +12 +jmp +92 +jmp +1 +acc +9 +jmp -26 +acc +4 +acc -8 +nop +484 +acc -14 +jmp +526 +acc -13 +acc -2 +acc -13 +jmp +419 +acc +22 +acc -17 +jmp +1 +jmp +151 +acc +3 +acc +2 +acc -13 +acc -11 +jmp +352 +acc +24 +jmp -27 +nop +206 +acc +22 +nop +225 +jmp +360 +acc +48 +jmp +105 +jmp +80 +acc -16 +jmp +89 +acc +0 +jmp +339 +acc +37 +acc +41 +nop +156 +jmp +452 +jmp +208 +nop +60 +jmp +155 +acc -16 +jmp +274 +nop -77 +acc -16 +acc +21 +jmp +508 +acc -7 +acc -1 +jmp -83 +acc -11 +jmp +28 +acc +3 +acc +32 +acc -18 +jmp -89 +acc +4 +acc -14 +acc -1 +acc +33 +jmp -75 +nop +185 +acc +8 +acc +22 +acc +26 +jmp +164 +acc -19 +jmp +260 +jmp +174 +acc +2 +acc +34 +jmp -120 +acc -15 +acc +48 +jmp +165 +acc +5 +nop +240 +jmp -121 +jmp +114 +jmp -36 +nop +432 +jmp +1 +acc -18 +jmp +429 +acc +44 +nop +110 +jmp +198 +acc -18 +acc +32 +acc +41 +jmp +102 +nop +177 +acc +35 +acc +24 +acc +46 +jmp +121 +acc +20 +jmp +1 +jmp +407 +jmp +1 +acc +35 +acc +46 +nop -18 +jmp +6 +jmp +422 +acc -19 +jmp -85 +acc +33 +jmp -116 +nop +79 +jmp +284 +acc +3 +acc +49 +nop +317 +jmp +6 +acc +6 +jmp +295 +nop -141 +acc -4 +jmp -44 +nop +155 +acc +48 +acc -17 +jmp +188 +acc +22 +jmp +286 +nop +103 +acc -2 +acc +45 +jmp +20 +acc +21 +acc +37 +jmp +235 +jmp +42 +acc -11 +nop -15 +acc -5 +jmp +235 +jmp +178 +acc +12 +acc -15 +jmp +25 +acc +9 +acc +11 +nop +389 +acc +50 +jmp +146 +acc +26 +jmp +144 +acc -14 +jmp +304 +nop +254 +jmp +337 +jmp +17 +jmp +1 +acc +6 +acc -4 +acc +42 +jmp +117 +acc +25 +acc +50 +acc +45 +jmp -112 +acc +14 +acc +27 +jmp +347 +nop +15 +jmp +14 +acc +29 +jmp +236 +jmp -71 +acc -11 +acc +21 +nop +32 +jmp -162 +acc -15 +jmp +322 +acc -4 +acc +16 +jmp +1 +jmp +100 +jmp +1 +jmp -77 +acc +21 +nop -199 +acc +49 +acc -1 +jmp -231 +jmp +230 +acc -19 +jmp +1 +jmp -49 +jmp -11 +acc +6 +jmp -110 +jmp +331 +acc +44 +jmp +292 +acc -7 +acc -18 +acc +50 +jmp +221 +acc +33 +acc +7 +jmp -45 +jmp +342 +acc -19 +acc +36 +acc +15 +jmp -229 +nop -5 +jmp +57 +acc +26 +acc +43 +nop -175 +jmp +82 +acc +45 +jmp -161 +acc -16 +acc +35 +acc +46 +acc +43 +jmp +1 +nop +195 +acc +39 +acc +27 +acc +32 +jmp +227 +jmp -272 +nop +201 +acc +6 +acc +13 +acc +12 +jmp -177 +acc -9 +acc +46 +nop +199 +acc -1 +jmp +1 +jmp +3 +acc +42 +jmp +75 +jmp +305 +acc +49 +acc -16 +jmp -92 +acc +3 +nop +279 +jmp +54 +jmp +31 +acc +50 +jmp -125 +acc +21 +nop -178 +acc +40 +jmp +193 +acc +39 +acc -5 +jmp +261 +nop -3 +acc -13 +jmp -310 +acc +6 +acc -17 +acc +12 +acc +38 +jmp +267 +jmp -311 +acc -2 +jmp -7 +nop +77 +acc -2 +acc +39 +acc -16 +jmp +10 +nop +59 +jmp -296 +acc -4 +acc +41 +jmp -249 +acc +43 +nop +35 +jmp +95 +jmp +171 +acc +10 +nop +169 +acc -17 +jmp +47 +acc +49 +acc +38 +nop +199 +jmp +249 +jmp -53 +nop -194 +acc +19 +acc +18 +jmp -16 +acc +33 +jmp +194 +nop -194 +acc +49 +jmp +85 +acc +50 +nop -318 +acc -7 +jmp -49 +acc -6 +acc +48 +acc -13 +acc -14 +jmp +67 +acc +12 +acc +19 +acc +3 +jmp -371 +jmp -149 +acc +49 +nop -202 +jmp -315 +acc -6 +jmp -171 +acc -7 +jmp +113 +acc +34 +acc +36 +acc +17 +jmp -97 +acc +3 +jmp -244 +acc +25 +acc +30 +acc +25 +acc -19 +jmp +44 +nop +84 +jmp +124 +nop +17 +acc -11 +acc -8 +acc +4 +jmp +193 +jmp -388 +acc +36 +acc +17 +jmp +1 +acc -5 +jmp +166 +acc +39 +acc -10 +jmp -280 +acc +15 +jmp +1 +jmp -396 +jmp +113 +acc +37 +acc +13 +jmp -35 +nop +109 +acc +8 +acc +6 +acc +19 +jmp +39 +jmp +1 +jmp +1 +acc +39 +acc -14 +jmp -291 +acc +39 +acc +31 +jmp -231 +acc +41 +jmp -55 +nop -167 +jmp +105 +acc -8 +acc +34 +jmp -114 +nop +58 +jmp +1 +nop -270 +acc +31 +jmp -135 +acc +8 +acc +33 +jmp +1 +jmp -64 +acc +24 +acc +16 +jmp +117 +acc +35 +acc -11 +nop +44 +acc +18 +jmp +1 +jmp +88 +acc +29 +nop +34 +jmp +1 +nop -118 +jmp -404 +jmp -144 +acc -12 +nop -372 +acc -14 +jmp -209 +acc +12 +jmp +1 +acc -1 +jmp +132 +nop -93 +jmp -130 +acc +23 +acc +30 +acc +3 +jmp -209 +nop -381 +acc -19 +jmp +23 +nop +87 +jmp -277 +acc +39 +jmp -391 +acc +14 +acc +18 +acc +24 +nop -459 +jmp -267 +acc +35 +nop +84 +jmp -231 +acc +5 +acc +0 +acc +45 +jmp -210 +jmp -211 +acc +7 +acc +8 +nop -249 +jmp -8 +jmp -105 +nop -455 +acc -19 +acc +36 +jmp -368 +acc +33 +acc +10 +acc +9 +jmp -259 +nop +41 +acc -14 +acc +2 +jmp -336 +acc +46 +jmp -261 +nop -284 +acc +21 +nop -154 +jmp -485 +jmp -505 +acc +32 +nop -327 +acc +1 +nop +43 +jmp -23 +acc -7 +jmp -88 +acc +10 +jmp -440 +acc +12 +jmp -430 +jmp +1 +acc +46 +nop -105 +jmp -87 +acc +49 +acc -10 +acc -6 +jmp -411 +jmp -268 +acc +35 +acc +15 +jmp +45 +acc -14 +acc +0 +jmp -234 +nop -67 +acc +32 +acc +1 +jmp -476 +jmp -297 +nop -274 +jmp -435 +acc +36 +acc -2 +acc +33 +acc +9 +jmp -26 +jmp +50 +acc +23 +jmp -172 +jmp +1 +acc +34 +acc +32 +acc -4 +jmp -312 +acc -11 +acc +26 +jmp -150 +acc +41 +nop -79 +acc +25 +jmp -76 +acc -2 +acc +29 +acc +12 +jmp -549 +nop -357 +nop -438 +jmp -320 +acc +7 +acc -6 +jmp -149 +nop -74 +acc +7 +acc +45 +jmp -383 +acc -8 +acc +5 +acc +12 +jmp -463 +acc -17 +acc +5 +jmp -34 +jmp +1 +acc +18 +jmp -523 +acc +38 +acc +35 +nop -222 +jmp -424 +nop -365 +jmp -188 +acc +0 +acc +7 +nop -167 +acc +27 +jmp -351 +acc +26 +jmp -201 +nop -208 +nop -466 +acc +50 +nop -531 +jmp -273 +acc +21 +acc +25 +nop -397 +acc +29 +jmp +1 diff --git a/out.wasm b/out.wasm index 9776287d40b7fea26c095f99fd62c2d58901a37e..8e2a8df71b2ba00279029701cfb642d00e8a1beb 100644 GIT binary patch literal 14947 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 literal 11421 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 rdfGm46@>g$