From: Brendan Hansen Date: Sat, 12 Dec 2020 14:31:14 +0000 (-0600) Subject: added day 12; updated day 11 X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=e1f01889da014f1bac9a551a1ae53a22f100e6d2;p=onyx-aoc-2020.git added day 12; updated day 11 --- 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 06c3250..b6a979a 100644 Binary files a/out.wasm and b/out.wasm differ