From 3ad70944bf284de2b84f673c18164a73db876602 Mon Sep 17 00:00:00 2001 From: Scott McKendry <39483124+scottmckendry@users.noreply.github.com> Date: Wed, 30 Oct 2024 18:00:58 +1300 Subject: [PATCH] add day 2 solutions --- 2021/02_test.odin | 25 ++ 2021/02p1.odin | 38 ++ 2021/02p2.odin | 36 ++ 2021/inputs/02.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++ 2021/main.odin | 2 + 5 files changed, 1101 insertions(+) create mode 100644 2021/02_test.odin create mode 100644 2021/02p1.odin create mode 100644 2021/02p2.odin create mode 100644 2021/inputs/02.txt diff --git a/2021/02_test.odin b/2021/02_test.odin new file mode 100644 index 0000000..9b15039 --- /dev/null +++ b/2021/02_test.odin @@ -0,0 +1,25 @@ +package main + +import "core:fmt" +import "core:mem" +import "core:testing" + +@(test) +d02p1 :: proc(t: ^testing.T) { + input: []string = {"forward 5", "down 5", "forward 8", "up 3", "down 8", "forward 2"} + got := parse_directions(input) + want := 150 + testing.expect(t, got == want, fmt.aprintf("Got: %v | Want: %v", got, want)) + + free_all() +} + +@(test) +d02p2 :: proc(t: ^testing.T) { + input: []string = {"forward 5", "down 5", "forward 8", "up 3", "down 8", "forward 2"} + got := parse_submarine_instructions(input) + want := 900 + testing.expect(t, got == want, fmt.aprintf("Got: %v | Want: %v", got, want)) + + free_all() +} diff --git a/2021/02p1.odin b/2021/02p1.odin new file mode 100644 index 0000000..818ac1f --- /dev/null +++ b/2021/02p1.odin @@ -0,0 +1,38 @@ +package main + +import "core:fmt" +import "core:strconv" +import "core:strings" +import "utils" + +Coordinate :: struct { + x, y: int, +} + +D02P1 :: proc() { + lines, backing := utils.read_lines("./inputs/02.txt") + defer delete(lines) + defer delete(backing) + + depth_increase_count := parse_directions(lines) + fmt.printfln("Product of final position: %v", depth_increase_count) +} + +parse_directions :: proc(input: []string) -> int { + pos := Coordinate{0, 0} + for instruc in input { + direction := strings.split(instruc, " ", context.temp_allocator)[0] + distance := strconv.atoi(strings.split(instruc, " ", context.temp_allocator)[1]) + + switch direction { + case "forward": + pos.x += distance + case "up": + pos.y -= distance + case "down": + pos.y += distance + } + } + + return pos.x * pos.y +} diff --git a/2021/02p2.odin b/2021/02p2.odin new file mode 100644 index 0000000..3291f2d --- /dev/null +++ b/2021/02p2.odin @@ -0,0 +1,36 @@ +package main + +import "core:fmt" +import "core:strconv" +import "core:strings" +import "utils" + +D02P2 :: proc() { + lines, backing := utils.read_lines("./inputs/02.txt") + defer delete(lines) + defer delete(backing) + + depth_increase_count := parse_submarine_instructions(lines) + fmt.printfln("Product of final position: %v", depth_increase_count) +} + +parse_submarine_instructions :: proc(input: []string) -> int { + pos := Coordinate{0, 0} + aim := 0 + for instruc in input { + direction := strings.split(instruc, " ", context.temp_allocator)[0] + weight := strconv.atoi(strings.split(instruc, " ", context.temp_allocator)[1]) + + switch direction { + case "forward": + pos.x += weight + pos.y += aim * weight + case "up": + aim -= weight + case "down": + aim += weight + } + } + + return pos.x * pos.y +} diff --git a/2021/inputs/02.txt b/2021/inputs/02.txt new file mode 100644 index 0000000..ac80dd3 --- /dev/null +++ b/2021/inputs/02.txt @@ -0,0 +1,1000 @@ +forward 9 +down 9 +up 4 +down 5 +down 6 +up 6 +down 7 +down 1 +forward 6 +down 4 +forward 8 +up 5 +forward 9 +down 1 +down 4 +up 4 +up 5 +up 4 +down 1 +forward 8 +down 1 +forward 2 +forward 8 +down 9 +forward 2 +down 6 +down 2 +up 8 +down 6 +forward 9 +forward 7 +down 6 +forward 3 +down 2 +forward 4 +down 5 +up 2 +down 9 +down 8 +up 5 +forward 5 +forward 4 +up 9 +forward 9 +down 8 +forward 8 +forward 2 +up 8 +down 7 +forward 8 +down 3 +forward 6 +up 9 +forward 9 +forward 4 +forward 9 +forward 6 +down 4 +up 2 +forward 4 +up 5 +up 6 +forward 9 +down 3 +forward 4 +forward 9 +down 1 +forward 1 +up 6 +up 4 +forward 7 +up 7 +up 3 +forward 2 +forward 8 +forward 6 +down 4 +forward 2 +forward 3 +down 7 +down 5 +down 8 +down 5 +forward 1 +down 8 +down 2 +down 8 +down 3 +forward 4 +forward 8 +forward 9 +down 1 +forward 8 +down 1 +down 6 +down 7 +down 7 +forward 5 +forward 3 +down 2 +down 1 +forward 2 +forward 1 +down 6 +down 4 +up 5 +up 9 +down 4 +forward 9 +down 2 +down 5 +down 4 +down 2 +forward 2 +forward 4 +forward 6 +forward 6 +forward 3 +down 6 +up 5 +forward 8 +forward 3 +down 9 +down 3 +forward 4 +forward 2 +down 9 +down 8 +down 7 +down 3 +forward 2 +down 7 +down 3 +down 5 +forward 6 +up 9 +up 8 +forward 5 +down 6 +down 1 +down 6 +down 5 +forward 7 +down 2 +forward 8 +forward 7 +forward 2 +forward 8 +up 6 +forward 5 +down 2 +down 5 +up 8 +up 6 +forward 1 +down 4 +up 5 +up 5 +up 5 +forward 4 +up 1 +forward 3 +down 9 +down 6 +up 1 +forward 1 +forward 2 +forward 1 +forward 4 +forward 6 +forward 6 +up 7 +down 7 +down 7 +down 9 +forward 9 +down 1 +down 5 +down 1 +down 7 +down 1 +up 6 +forward 2 +down 4 +up 3 +up 2 +forward 6 +up 4 +down 1 +down 5 +forward 9 +up 4 +up 3 +forward 3 +up 7 +forward 2 +forward 5 +down 9 +forward 7 +forward 4 +down 1 +up 2 +forward 4 +up 4 +down 2 +forward 4 +up 5 +up 1 +down 9 +down 3 +up 6 +forward 7 +up 7 +forward 2 +down 4 +up 3 +up 3 +forward 4 +up 5 +down 3 +up 8 +forward 6 +forward 8 +down 1 +down 9 +down 7 +forward 7 +forward 5 +forward 2 +up 9 +forward 3 +forward 1 +down 7 +down 6 +forward 5 +up 3 +forward 6 +down 4 +forward 9 +down 7 +forward 9 +down 9 +down 5 +down 6 +down 2 +down 2 +down 8 +down 3 +down 9 +forward 5 +up 6 +forward 1 +down 3 +down 2 +up 1 +up 6 +forward 3 +down 6 +down 6 +up 9 +up 8 +forward 2 +down 7 +forward 5 +up 9 +down 7 +down 3 +forward 2 +forward 2 +up 9 +forward 1 +forward 7 +down 9 +forward 6 +forward 7 +up 8 +down 7 +down 5 +down 3 +up 6 +down 5 +forward 6 +down 9 +down 6 +up 9 +down 7 +forward 2 +down 5 +up 4 +down 4 +down 8 +forward 7 +down 9 +forward 8 +forward 6 +down 7 +down 1 +forward 5 +up 6 +forward 4 +up 7 +up 4 +up 5 +forward 9 +forward 5 +forward 4 +down 6 +down 5 +forward 2 +forward 7 +down 8 +forward 3 +up 5 +down 2 +up 3 +forward 4 +up 5 +up 2 +forward 4 +forward 1 +forward 1 +forward 4 +forward 4 +down 2 +forward 1 +forward 1 +up 5 +up 7 +down 8 +down 4 +forward 2 +forward 2 +down 3 +forward 7 +down 8 +up 3 +forward 2 +down 2 +forward 3 +up 2 +forward 3 +up 6 +down 7 +up 7 +down 3 +up 9 +forward 3 +forward 7 +down 7 +up 9 +down 6 +down 2 +forward 8 +forward 8 +up 7 +down 6 +forward 2 +forward 1 +down 4 +up 2 +forward 6 +up 7 +down 5 +up 1 +forward 3 +forward 9 +up 4 +forward 5 +forward 8 +down 3 +up 5 +forward 9 +down 6 +up 9 +forward 5 +down 4 +down 1 +down 6 +up 9 +up 2 +forward 5 +down 1 +up 3 +down 5 +forward 2 +down 4 +forward 5 +down 6 +down 4 +down 4 +forward 1 +down 7 +down 2 +forward 4 +forward 5 +up 9 +down 6 +down 2 +forward 7 +up 8 +down 9 +forward 7 +down 5 +down 2 +down 8 +down 8 +up 4 +up 3 +down 3 +down 7 +forward 4 +forward 6 +down 4 +up 7 +forward 4 +forward 4 +forward 1 +down 3 +down 2 +forward 7 +forward 2 +up 9 +down 7 +up 7 +forward 2 +forward 6 +forward 9 +down 3 +forward 7 +forward 5 +up 5 +up 1 +forward 6 +forward 4 +down 2 +forward 3 +forward 9 +down 1 +forward 6 +forward 7 +forward 1 +up 7 +up 4 +forward 7 +forward 8 +down 7 +down 8 +down 9 +forward 7 +down 9 +up 6 +down 7 +up 3 +down 7 +forward 4 +forward 9 +forward 1 +down 4 +forward 1 +up 4 +up 4 +forward 9 +forward 8 +up 4 +down 2 +forward 4 +forward 2 +forward 8 +down 2 +up 6 +down 4 +forward 6 +forward 5 +down 2 +forward 9 +down 5 +forward 5 +down 3 +down 2 +up 9 +down 3 +forward 6 +forward 6 +up 9 +down 1 +forward 4 +up 3 +forward 1 +forward 3 +forward 3 +down 6 +down 2 +forward 8 +down 4 +forward 8 +forward 8 +forward 5 +up 6 +forward 3 +down 1 +down 8 +forward 3 +forward 4 +down 2 +down 7 +up 8 +forward 3 +forward 8 +up 2 +forward 6 +down 4 +forward 9 +forward 5 +down 1 +forward 6 +forward 2 +down 3 +up 4 +down 7 +down 2 +up 2 +forward 7 +down 6 +down 2 +up 5 +up 5 +down 9 +down 7 +down 3 +down 1 +down 9 +forward 4 +down 4 +forward 7 +forward 8 +forward 4 +up 6 +forward 6 +forward 9 +down 2 +forward 4 +down 8 +down 4 +forward 5 +forward 2 +up 4 +down 3 +up 8 +up 1 +down 1 +forward 9 +up 3 +up 1 +forward 1 +forward 7 +forward 1 +down 7 +forward 7 +forward 7 +down 7 +forward 4 +up 6 +forward 3 +down 1 +up 1 +up 8 +forward 5 +forward 2 +up 4 +forward 7 +down 2 +down 3 +down 8 +up 7 +up 5 +forward 8 +down 5 +down 3 +down 9 +forward 6 +forward 4 +down 9 +up 5 +forward 3 +up 7 +up 9 +up 1 +forward 1 +forward 3 +forward 1 +up 8 +up 4 +down 1 +down 8 +down 3 +down 1 +down 1 +down 9 +forward 4 +down 3 +forward 9 +forward 2 +down 1 +forward 9 +up 7 +forward 6 +up 4 +forward 8 +forward 3 +down 2 +down 2 +down 2 +up 5 +forward 1 +up 1 +forward 7 +down 1 +forward 1 +down 8 +up 4 +up 1 +forward 7 +down 8 +down 9 +forward 2 +forward 1 +up 3 +forward 4 +up 8 +forward 5 +down 2 +forward 6 +forward 8 +up 9 +forward 2 +down 7 +down 4 +up 3 +forward 1 +forward 6 +forward 9 +down 1 +down 8 +down 1 +down 2 +forward 3 +forward 9 +forward 2 +forward 4 +forward 7 +forward 3 +up 8 +up 9 +forward 3 +forward 6 +down 5 +up 6 +down 8 +forward 5 +up 4 +up 9 +forward 6 +forward 3 +up 9 +forward 8 +forward 5 +forward 9 +forward 7 +up 6 +forward 3 +forward 1 +up 4 +forward 9 +forward 8 +up 1 +up 2 +down 3 +down 4 +down 9 +down 4 +down 5 +down 6 +down 2 +down 5 +forward 6 +forward 4 +up 2 +up 7 +down 5 +down 9 +forward 3 +down 5 +forward 6 +down 7 +forward 1 +forward 7 +forward 9 +forward 7 +forward 4 +forward 4 +up 1 +up 4 +down 6 +up 2 +up 1 +down 4 +forward 2 +down 4 +forward 6 +down 3 +up 6 +down 2 +up 3 +forward 1 +forward 9 +forward 3 +up 9 +forward 7 +forward 5 +forward 4 +down 5 +down 9 +forward 6 +forward 7 +up 1 +forward 7 +forward 2 +forward 2 +forward 5 +forward 6 +down 3 +down 7 +down 3 +down 4 +down 6 +down 1 +forward 2 +down 8 +forward 4 +forward 7 +up 1 +down 4 +down 1 +down 2 +down 3 +up 3 +forward 9 +forward 2 +down 8 +up 3 +forward 8 +forward 7 +up 8 +down 8 +forward 2 +down 9 +down 9 +down 5 +forward 1 +forward 3 +forward 6 +up 1 +up 2 +forward 1 +down 3 +up 6 +forward 2 +forward 8 +forward 2 +down 3 +forward 8 +forward 9 +down 7 +down 3 +down 2 +down 9 +down 3 +up 6 +forward 9 +forward 5 +forward 1 +forward 9 +down 9 +up 2 +down 1 +up 6 +forward 6 +down 3 +forward 6 +forward 3 +forward 5 +forward 4 +up 2 +up 4 +up 6 +forward 1 +forward 6 +up 6 +up 4 +up 7 +down 8 +down 5 +up 1 +up 1 +down 5 +forward 5 +down 9 +forward 8 +down 3 +up 4 +down 9 +down 1 +forward 2 +forward 9 +down 3 +down 8 +down 5 +down 6 +forward 7 +forward 1 +down 9 +down 7 +forward 8 +forward 2 +up 1 +up 1 +forward 7 +up 1 +forward 2 +down 9 +up 4 +forward 5 +down 1 +up 1 +down 8 +down 3 +up 1 +down 8 +down 7 +down 2 +forward 9 +down 5 +forward 2 +up 2 +up 6 +up 4 +forward 6 +up 5 +forward 5 +forward 4 +forward 8 +down 8 +down 6 +down 1 +down 3 +down 6 +forward 8 +up 1 +up 5 +down 4 +forward 4 +down 9 +forward 4 +up 6 +down 7 +forward 4 +down 3 +down 4 +forward 1 +forward 3 +down 1 +down 7 +up 8 +down 3 +down 4 +down 3 +forward 3 +down 8 +forward 8 +down 3 +down 7 +forward 2 +up 2 +forward 7 +down 9 +up 7 +forward 5 +down 2 +down 5 +up 4 +up 8 +forward 8 +forward 9 +forward 8 +down 8 +forward 6 +forward 9 +forward 6 +forward 8 +forward 6 +forward 8 +forward 2 +down 7 +down 3 +forward 7 +down 4 +down 5 +up 1 +forward 5 +down 3 +down 7 +up 4 +forward 9 +down 2 +down 3 +forward 1 +up 6 +down 1 +down 9 +forward 8 +forward 9 +forward 2 +down 6 +down 4 +up 3 +up 8 +forward 1 +down 3 +up 8 +up 7 +down 4 +up 3 +down 7 +down 2 +down 5 +down 7 +down 2 +forward 2 +down 3 +up 2 +forward 8 +up 1 +forward 2 +up 4 +forward 1 +forward 8 +forward 6 +forward 2 +down 2 +forward 5 +up 4 +down 9 +down 7 +forward 2 +down 9 +down 9 +forward 6 +down 8 +down 4 +down 7 +down 9 +forward 7 +forward 7 +up 6 +forward 3 +forward 5 +forward 6 +down 8 +up 1 +forward 2 +up 4 +up 2 +down 8 +down 9 +down 1 +down 3 +forward 7 +forward 5 +forward 6 +up 6 +down 7 +up 8 +up 1 +forward 8 +down 5 +up 1 +down 2 +down 5 +forward 6 +down 4 +forward 5 +down 4 +forward 3 +down 5 +up 4 +up 7 +forward 2 +up 2 +down 8 +forward 6 diff --git a/2021/main.odin b/2021/main.odin index 9984bfa..8ad3be6 100644 --- a/2021/main.odin +++ b/2021/main.odin @@ -13,6 +13,8 @@ year :: "2021" solutions: map[string]proc() = { "01P1:Sonar Sweep" = D01P1, "01P2:Sonar Sweep" = D01P2, + "O2P1:Dive!" = D02P1, + "O2P2:Dive!" = D02P2, } main :: proc() {