Solved first day

This commit is contained in:
2025-12-15 23:50:43 +01:00
parent 72cc9c3d78
commit 59ea443872
5 changed files with 4790 additions and 0 deletions

3
go.mod Normal file
View File

@@ -0,0 +1,3 @@
module git.gulaschkanister.de/julian.dnr/AoC-2025
go 1.25.5

4654
inputs/day_1.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,46 @@
package days
import (
"os"
"path"
"runtime"
"testing"
)
func init() {
// Changing into root dir of project
_, filename, _, _ := runtime.Caller(0)
dir := path.Join(path.Dir(filename), "..", "..")
err := os.Chdir(dir)
if err != nil {
panic(err)
}
}
func BenchmarkDays(b *testing.B) {
benchmarks := []struct {
name string
lfn func() []string
fn func([]string) int
expected int
}{
{"Day 1", Load_Day_1, Day01, 1150},
}
for _, bm := range benchmarks {
// Loading data for the current day
data := bm.lfn()
// Just for good measures
b.ResetTimer()
b.Run(bm.name, func(b *testing.B) {
for b.Loop() {
res := bm.fn(data)
if res != bm.expected {
b.Fatalf("invalid result: got %d, want %d", res, bm.expected)
}
}
})
}
}

72
src/days/day_1.go Normal file
View File

@@ -0,0 +1,72 @@
package days
import (
"bufio"
"log"
"os"
"strconv"
)
// numbers from 0 to 99 in order
// instructions contain order to turn L(eft) or R(ight)
// instructions contain the distance to turn
// left reduces the number
// right increases the number
//
// L => 76
// R => 82
//
// dial starts at 50 by default
//
// examples:
// 11 -> R8 => 19 -> L19 => 0
func Load_Day_1() []string {
var lines []string
file, err := os.Open("inputs/day_1.txt")
if err != nil {
log.Fatalf("failed to open file: %s", err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
lines = append(lines, line)
}
return lines
}
func wrap(n int) int {
min := 0
max := 99
rangeSize := max - min + 1
return ((n-min)%rangeSize+rangeSize)%rangeSize + min
}
func Day01(instructions []string) int {
c := 0
position := 50
for _, i := range instructions {
len, err := strconv.Atoi(i[1:])
if err != nil {
log.Fatalf("failed to convert string to int: %s", err.Error())
}
if i[0] == 76 {
position = wrap(position - len)
} else {
position = wrap(position + len)
}
if position == 0 {
c++
}
}
return c
}

15
src/main.go Normal file
View File

@@ -0,0 +1,15 @@
package main
import (
"fmt"
"git.gulaschkanister.de/julian.dnr/AoC-2025/src/days"
)
func main() {
data := days.Load_Day_1()
res := days.Day01(data)
fmt.Println(res)
}