From e1f01889da014f1bac9a551a1ae53a22f100e6d2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 12 Dec 2020 08:31:14 -0600 Subject: [PATCH] added day 12; updated day 11 --- day11.onyx | 9 +- day12.onyx | 72 +++++ input/day12.txt | 750 ++++++++++++++++++++++++++++++++++++++++++++++++ out.wasm | Bin 10891 -> 8719 bytes 4 files changed, 824 insertions(+), 7 deletions(-) create mode 100644 day12.onyx create mode 100644 input/day12.txt diff --git a/day11.onyx b/day11.onyx index b637a5c..2e178ed 100644 --- a/day11.onyx +++ b/day11.onyx @@ -17,11 +17,6 @@ gos_get_seat :: proc (use gos: ^GameOfSeats, x: i32, y: i32) -> SeatState { return seats[x + y * width]; } -gos_set_temp :: proc (use gos: ^GameOfSeats, x: i32, y: i32, state: SeatState) { - if x < 0 || y < 0 || x >= width || y >= height do return; - temp[x + y * width] = state; -} - gos_neighbors :: proc (use gos: ^GameOfSeats, x: i32, y: i32, state := SeatState.Occupied) -> u32 { count := 0; @@ -53,12 +48,12 @@ gos_iter :: proc (use gos: ^GameOfSeats) -> bool { switch gos_get_seat(gos, x, y) { case SeatState.Empty do if occ_neighbors == 0 { - gos_set_temp(gos, x, y, SeatState.Occupied); + temp[x + y * width] = SeatState.Occupied; changed = true; } case SeatState.Occupied do if occ_neighbors >= 5 { - gos_set_temp(gos, x, y, SeatState.Empty); + temp[x + y * width] = SeatState.Empty; changed = true; } } diff --git a/day12.onyx b/day12.onyx new file mode 100644 index 0000000..338d11f --- /dev/null +++ b/day12.onyx @@ -0,0 +1,72 @@ +#include_file "core/std/wasi" + +use package core +use package core.string.reader as reader + +Ship :: struct { + x : i32 = 0; + y : i32 = 0; + + fx : i32 = 1; + fy : i32 = 0; +} + +rotate_left :: proc (ship: ^Ship) { + ofx := ship.fx; + ofy := ship.fy; + + ship.fx = ofy; + ship.fy = -ofx; +} + +rotate_right :: proc (ship: ^Ship) { + ofx := ship.fx; + ofy := ship.fy; + + ship.fx = -ofy; + ship.fy = ofx; +} + +turn_around :: proc (ship: ^Ship) { + ship.fx = -ship.fx; + ship.fy = -ship.fy; +} + +main :: proc (args: [] cstr) { + contents := file.get_contents("input/day12.txt"); + defer cfree(contents.data); + + file := reader.make(contents); + + ship := Ship.{ fx = 10, fy = -1 }; + while !reader.empty(^file) { + dir := reader.read_byte(^file); + val := reader.read_u32(^file); + reader.advance_line(^file); + + switch dir { + case #char "N" do ship.fy -= val; + case #char "E" do ship.fx += val; + case #char "S" do ship.fy += val; + case #char "W" do ship.fx -= val; + case #char "F" { + ship.x += ship.fx * val; + ship.y += ship.fy * val; + } + + case #char "L" do switch val { + case 90 do rotate_left(^ship); + case 180 do turn_around(^ship); + case 270 do rotate_right(^ship); + } + + case #char "R" do switch val { + case 90 do rotate_right(^ship); + case 180 do turn_around(^ship); + case 270 do rotate_left(^ship); + } + } + } + + printf("Ship distance: %i\n", math.abs(ship.x) + math.abs(ship.y)); +} diff --git a/input/day12.txt b/input/day12.txt new file mode 100644 index 0000000..dc64185 --- /dev/null +++ b/input/day12.txt @@ -0,0 +1,750 @@ +W1 +F91 +W3 +F82 +N1 +E2 +N4 +R90 +F25 +N2 +F75 +E4 +R90 +F91 +R90 +F64 +L90 +E1 +L90 +S2 +L180 +S2 +E3 +N2 +E5 +L90 +N2 +R90 +F30 +L90 +N1 +F37 +S1 +E5 +F3 +E2 +F59 +W3 +L270 +S5 +W5 +S4 +F84 +N5 +R180 +E4 +F31 +L90 +E2 +F77 +L90 +N5 +F17 +N4 +N4 +W2 +F45 +S1 +F92 +E1 +F33 +L270 +F21 +L90 +E1 +F81 +N5 +F20 +E2 +R90 +N4 +W3 +L180 +S2 +F33 +E5 +F87 +R90 +N2 +F29 +E3 +S4 +L90 +E4 +R90 +S2 +F65 +L90 +F69 +W2 +N4 +F73 +R180 +S3 +R90 +N3 +R90 +W1 +L180 +F96 +N3 +W2 +L180 +S5 +F29 +E3 +S4 +W1 +F53 +E1 +L90 +E5 +F26 +E3 +R270 +E2 +S2 +W2 +F43 +W2 +F53 +F74 +R180 +N5 +W3 +S4 +F70 +R90 +W4 +F56 +L90 +S5 +R180 +E4 +S4 +F80 +S1 +F91 +R90 +S4 +F88 +L90 +S5 +R90 +E2 +S1 +F37 +N1 +R90 +F92 +W5 +F14 +N2 +E5 +S2 +F89 +L180 +N4 +E4 +L90 +F32 +E4 +R90 +F99 +N3 +L180 +F78 +S1 +R270 +W1 +F11 +S4 +F47 +N4 +L90 +F17 +R90 +E4 +S3 +F14 +S1 +R90 +N3 +F52 +W3 +S5 +L180 +F41 +R90 +F62 +W1 +R90 +E4 +F1 +W5 +F86 +W1 +N5 +F5 +S1 +E5 +F67 +W3 +F97 +E1 +L90 +S2 +E1 +R90 +F82 +E3 +N2 +F16 +L90 +W2 +F35 +R180 +N2 +E3 +N4 +W4 +F13 +S5 +E1 +S5 +L90 +E5 +F65 +E5 +L90 +S4 +E3 +W4 +N1 +R90 +N5 +F93 +R90 +S5 +R90 +L90 +F86 +E3 +F90 +E4 +N2 +E4 +R180 +W5 +R90 +E3 +F98 +F56 +L90 +F68 +L90 +N3 +F35 +S1 +W5 +F25 +L180 +F7 +R270 +F84 +R90 +S4 +E5 +S3 +L270 +F33 +W3 +R90 +W5 +N3 +E4 +R90 +W2 +F100 +E5 +S2 +L90 +F6 +E1 +L90 +S1 +F17 +N3 +E1 +S3 +F78 +R90 +W5 +N4 +L90 +F13 +W5 +R90 +F7 +F74 +R90 +E4 +F28 +L90 +S5 +R90 +F77 +S2 +E2 +N3 +F30 +E1 +R90 +W2 +S2 +F62 +E2 +L90 +E2 +F56 +L90 +F61 +S1 +F14 +W3 +F23 +L90 +E3 +S3 +L270 +S5 +F97 +E5 +S1 +F96 +W2 +F61 +L180 +F25 +L90 +W4 +F100 +W4 +F14 +W4 +S5 +R90 +F67 +E1 +R90 +F89 +W5 +S3 +W2 +N2 +F64 +L180 +S4 +R270 +F47 +E1 +S1 +E4 +N1 +R90 +N2 +E5 +F97 +N3 +E5 +S5 +R180 +E5 +F34 +L90 +W1 +W1 +N3 +R90 +F17 +N1 +F75 +S4 +W5 +N2 +W1 +N2 +L90 +W3 +N2 +F1 +N1 +W3 +R90 +F18 +E4 +N4 +F18 +N4 +F73 +W4 +F61 +W3 +R90 +N5 +L90 +N4 +F70 +E4 +F10 +L90 +F33 +N5 +L90 +W4 +L180 +E2 +F41 +E1 +S4 +E4 +L90 +F28 +N2 +W4 +S2 +F86 +R180 +S3 +W3 +S3 +W2 +F55 +W1 +F18 +W2 +F18 +L90 +S4 +W1 +L90 +F47 +L90 +S4 +F39 +N5 +L180 +S3 +W5 +F95 +W1 +R90 +E2 +N3 +L90 +S4 +F77 +S1 +W4 +S5 +E4 +R90 +W1 +R90 +W3 +W2 +N4 +F1 +W1 +N5 +F55 +E4 +N4 +W5 +L90 +F90 +E4 +R90 +E2 +R90 +S5 +F44 +N2 +E3 +R90 +F64 +W1 +L180 +L180 +F55 +L90 +F15 +S2 +E1 +R270 +F10 +R90 +W4 +F43 +E1 +F7 +N2 +W3 +F10 +N1 +L270 +N2 +L90 +E2 +R90 +F28 +W2 +N5 +F70 +R90 +E3 +E3 +F75 +W4 +L90 +S2 +R90 +F83 +L270 +E1 +F87 +R180 +N3 +L90 +F30 +L90 +E1 +N5 +F87 +N4 +R90 +F51 +W5 +N3 +R90 +S5 +F98 +W4 +N2 +E2 +L90 +E4 +S1 +E5 +F60 +N1 +L180 +E1 +F10 +R90 +W5 +F90 +W5 +F9 +S1 +W3 +F9 +E2 +S4 +L180 +F61 +W2 +N3 +F35 +R90 +E4 +N3 +W4 +L90 +E1 +L90 +S1 +F62 +S5 +W1 +N5 +L180 +F76 +W3 +L90 +W4 +L90 +N2 +E3 +N5 +E1 +N2 +F13 +S1 +F20 +W5 +L90 +S1 +F89 +S3 +L90 +W2 +L90 +F48 +W5 +N1 +R90 +F93 +L90 +E4 +L90 +N2 +F100 +W5 +S5 +W1 +S1 +E2 +S1 +W4 +R90 +S2 +F99 +W2 +F80 +L90 +F78 +N4 +L90 +F67 +S1 +L90 +F23 +W3 +N1 +W5 +F76 +R270 +F51 +L90 +W2 +N1 +E3 +S3 +L90 +F83 +L90 +F46 +S5 +L180 +N3 +E3 +F49 +E5 +N4 +W5 +L90 +E3 +R90 +S4 +F54 +E1 +F49 +N4 +L180 +E3 +L90 +R90 +F95 +W2 +N2 +F12 +R180 +E4 +R90 +N5 +L180 +S3 +W3 +S1 +F22 +W1 +F18 +L90 +F35 +R90 +F3 +S4 +L90 +F53 +W5 +F58 +L90 +S2 +F48 +S5 +R180 +F67 +L180 +W1 +S3 +L90 +F33 +F34 +R90 +F54 +W2 +L180 +S5 +W4 +R90 +F80 +W4 +S1 +W4 +F35 +E1 +F48 +N3 +L270 +F78 +N4 +S4 +F11 +S1 +W3 +L90 +W1 +F26 +R180 +E3 +F43 +S4 +R180 +W3 +N2 +F80 +W4 +F29 +W5 +W1 +R270 +N3 +L90 +F17 +W4 +F49 +S4 +S1 +F47 diff --git a/out.wasm b/out.wasm index 06c3250c91d0e8f83e5fe3263419add086c0c045..b6a979a963d92d7789c5ac6370cb054a5c49315d 100644 GIT binary patch delta 3104 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 K$N#;!t$qU;c4G?w -- 2.25.1