From 366f814afd48c672c41010f6f16719d39126d1e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20M=C3=A5rdbrink?= Date: Mon, 1 Dec 2025 12:11:09 +0100 Subject: [PATCH] Day 1 --- .gitignore | 2 ++ d01/main.odin | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ util/util.odin | 2 ++ 3 files changed, 83 insertions(+) create mode 100644 .gitignore create mode 100644 d01/main.odin create mode 100644 util/util.odin diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2250ff0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Hide inputs +*.txt diff --git a/d01/main.odin b/d01/main.odin new file mode 100644 index 0000000..a078ecf --- /dev/null +++ b/d01/main.odin @@ -0,0 +1,79 @@ +package main + +import "core:fmt" +import "core:math" +import "core:os" +import "core:strconv" +import "core:strings" +import "core:time" + +import util "../util" + +DIAL_START :: 50 +DIAL_MAX :: 100 + +part_1 :: proc(lines: ^[]string) { + result := 0 + dial := DIAL_START + + for line in lines { + amount, ok := strconv.parse_int(line[1:]); assert(ok) + + dir := line[0] + if dir == 'L' do amount = -amount + + dial += amount + dial %%= DIAL_MAX + if dial == 0 do result += 1 + } + + fmt.printfln(" [Result] %v", result) +} + +part_2 :: proc(lines: ^[]string) { + result := 0 + dial := DIAL_START + + for line in lines { + amount, ok := strconv.parse_int(line[1:]); assert(ok) + result += amount / DIAL_MAX + + dir := line[0] + if dir == 'L' do amount = -amount + + old_dial := dial + dial += amount + dial %%= DIAL_MAX + + switch { + case dial == 0: + result += 1 + case old_dial != 0: + wrapped := (dir == 'L' && old_dial < dial) || (dir == 'R' && old_dial > dial) + if wrapped do result += 1 + } + } + + fmt.printfln(" [Result] %v", result) +} + +main :: proc() { + context.allocator = context.temp_allocator + defer free_all(context.temp_allocator) + + INPUT :: #load("input.txt", string) + lines := strings.split(INPUT, "\n") + lines = lines[:len(lines) - 1] + + fmt.println("[Part 1]") + start := time.tick_now() + part_1(&lines) + duration := time.tick_diff(start, time.tick_now()) + fmt.printfln(" [Time] %vns\n", time.duration_nanoseconds(duration)) + + fmt.printfln("[Part 2]") + start = time.tick_now() + part_2(&lines) + duration = time.tick_diff(start, time.tick_now()) + fmt.printfln(" [Time] %vns", time.duration_nanoseconds(duration)) +} diff --git a/util/util.odin b/util/util.odin new file mode 100644 index 0000000..a5e4c54 --- /dev/null +++ b/util/util.odin @@ -0,0 +1,2 @@ +package util +