package main import ( "fmt" "time" // "math/rand" "os" // "strings" // "time" "adventofcode2025/day01" "adventofcode2025/day02" "adventofcode2025/day03" "adventofcode2025/day04" "adventofcode2025/utils" ) // Usage: go run main.go // assumes input is in day/input.txt func main() { d := day() fmt.Printf("Running day %02d\n", d) start := time.Now() switch d { case 1: fmt.Printf("part 1: %d\n", day01.Part1(utils.Readfile(d))) fmt.Printf("part 2: %d\n", day01.Part2(utils.Readfile(d))) case 2: fmt.Printf("part 1: %d\n", day02.Part1(utils.Readfile(d))) fmt.Printf("part 2: %d\n", day02.Part2(utils.Readfile(d))) case 3: fmt.Printf("part 1: %d\n", day03.Part1(utils.Readfile(d))) fmt.Printf("part 2: %d\n", day03.Part2(utils.Readfile(d))) case 4: fmt.Printf("part 1: %d\n", day04.Part1(utils.Readfile(d))) fmt.Printf("part 2: %d\n", day04.Part2(utils.Readfile(d))) // case 6: // fmt.Printf("part 1: %d\n", day06.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day06.Part2(utils.Readfile(d))) // case 7: // fmt.Printf("part 1: %d\n", day07.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day07.Part2(utils.Readfile(d))) // case 8: // fmt.Printf("part 1: %d\n", day08.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day08.Part2(utils.Readfile(d))) // case 9: // fmt.Printf("part 1: %d\n", day09.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day09.Part2(utils.Readfile(d))) // case 10: // fmt.Printf("part 1: %d\n", day10.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day10.Part2(utils.Readfile(d))) // case 11: // fmt.Printf("part 1: %d\n", day11.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day11.Part2(utils.Readfile(d))) // case 12: // fmt.Printf("part 1: %d\n", day12.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day12.Part2(utils.Readfile(d))) // case 13: // fmt.Printf("part 1: %d\n", day13.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day13.Part2(utils.Readfile(d))) // case 14: // fmt.Printf("part 1: %d\n", day14.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day14.Part2(utils.Readfile(d))) // case 15: // fmt.Printf("part 1: %d\n", day15.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day15.Part2(utils.Readfile(d))) // case 16: // fmt.Printf("part 1: %d\n", day16.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day16.Part2(utils.Readfile(d))) // case 17: // fmt.Printf("part 1: %s\n", day17.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day17.Part2(utils.Readfile(d))) // case 18: // fmt.Printf("part 1: %d\n", day18.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day18.Part2(utils.Readfile(d))) // case 19: // fmt.Printf("part 1: %d\n", day19.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day19.Part2(utils.Readfile(d))) // case 21: // fmt.Printf("part 1: %d\n", day21.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day21.Part2(utils.Readfile(d))) // case 22: // fmt.Printf("part 1: %d\n", day22.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day22.Part2(utils.Readfile(d))) // case 23: // fmt.Printf("part 1: %d\n", day23.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day23.Part2(utils.Readfile(d))) // case 24: // fmt.Printf("part 1: %d\n", day24.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day24.Part2(utils.Readfile(d))) // case 25: // fmt.Printf("part 1: %d\n", day25.Part1(utils.Readfile(d))) // fmt.Printf("part 2: %d\n", day25.Part2(utils.Readfile(d))) default: panic(fmt.Errorf("no such day: %d", d)) } elapsed := time.Since(start) fmt.Printf("Execution time: %s\n", elapsed) } // Reads day from os.Args. func day() int { latest := 3 if len(os.Args) == 1 { return latest } if os.Args[1] == "next" { genNext(latest + 1) os.Exit(0) } day := utils.MustAtoi(os.Args[1]) return day } func genNext(n int) { os.Mkdir(fmt.Sprintf("day%02d", n), 0755) f, err := os.Create(fmt.Sprintf("day%02d/day%02d.go", n, n)) utils.PanicOnErr(err) defer f.Close() f.WriteString(fmt.Sprintf(`package day%02d func Part1(input string) int { return 0 } func Part2(input string) int { return 0 } `, n)) fmt.Printf("wrote day%02d/day%02d.go\n", n, n) f, err = os.Create(fmt.Sprintf("day%02d/day%02d_test.go", n, n)) utils.PanicOnErr(err) defer f.Close() f.WriteString(fmt.Sprintf(`package day%02d import ( "testing" "github.com/stretchr/testify/require" ) func TestPart1(t *testing.T) { r := Part1("") require.Equal(t, 0, r) } func TestPart2(t *testing.T) { r := Part2("") require.Equal(t, 0, r) } `, n)) fmt.Printf("wrote day%02d/day%02d_test.go\n", n, n) utils.GenInputFile(n) }