diff --git a/2024/day1/day1_test.go b/2024/day1/day1_test.go index 29aebc8..042c47f 100644 --- a/2024/day1/day1_test.go +++ b/2024/day1/day1_test.go @@ -23,3 +23,22 @@ func TestDay1(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay1Solutions(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 1258579 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 23981443 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day2/day2_test.go b/2024/day2/day2_test.go index 50cad6a..0aa2a9f 100644 --- a/2024/day2/day2_test.go +++ b/2024/day2/day2_test.go @@ -23,3 +23,22 @@ func TestDay2(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay2Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 663 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 692 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day3/day3_test.go b/2024/day3/day3_test.go index 3a611fd..4cf64c8 100644 --- a/2024/day3/day3_test.go +++ b/2024/day3/day3_test.go @@ -23,3 +23,22 @@ func TestDay3(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay3Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 187833789 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 94455185 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day4/day4_test.go b/2024/day4/day4_test.go index 00cf4b2..153829f 100644 --- a/2024/day4/day4_test.go +++ b/2024/day4/day4_test.go @@ -23,3 +23,22 @@ func TestDay4(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay4Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 2603 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 1965 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day5/day5_test.go b/2024/day5/day5_test.go index e536bee..813fdc0 100644 --- a/2024/day5/day5_test.go +++ b/2024/day5/day5_test.go @@ -23,3 +23,22 @@ func TestDay5(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay5Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 6498 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 5017 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day6/day6_test.go b/2024/day6/day6_test.go index d9ff7c0..a3ba3fa 100644 --- a/2024/day6/day6_test.go +++ b/2024/day6/day6_test.go @@ -23,3 +23,22 @@ func TestDay6(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay6Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 5101 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 1951 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day7/day7_test.go b/2024/day7/day7_test.go index 55c9716..65904e5 100644 --- a/2024/day7/day7_test.go +++ b/2024/day7/day7_test.go @@ -23,3 +23,22 @@ func TestDay7(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay7Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 303876485655 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 146111650210682 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/day8/day8_test.go b/2024/day8/day8_test.go index 8add378..2e74740 100644 --- a/2024/day8/day8_test.go +++ b/2024/day8/day8_test.go @@ -23,3 +23,22 @@ func TestDay8(t *testing.T) { t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) } } + +func TestDay8Solution(t *testing.T) { + filename := "input.txt" + if _, err := os.Stat(filename); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", filename) + } + + part1, part2 := Run(filename) + + expectedPart1 := 327 + if part1 != expectedPart1 { + t.Fatalf("unexpected part1:\nwant:\t%d\ngot:\t%d", expectedPart1, part1) + } + + expectedPart2 := 1233 + if part2 != expectedPart2 { + t.Fatalf("unexpected part2:\nwant:\t%d\ngot:\t%d", expectedPart2, part2) + } +} diff --git a/2024/main.go b/2024/main.go index b1ca841..a41b59b 100644 --- a/2024/main.go +++ b/2024/main.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "os" "strconv" "cpatino.com/advent-of-code/2024/day1" @@ -16,37 +17,49 @@ import ( ) func main() { + var fileArg = flag.String("file", "", "input filename") flag.Parse() - if len(flag.Args()) != 2 { - panic("Usage: go run . ") + args := flag.Args() + if len(flag.Args()) == 0 { + fmt.Println("Usage: go run . [OPTIONS] ") + os.Exit(1) } - day, inputFile := flag.Args()[0], flag.Args()[1] - - if _, err := strconv.Atoi(day); err != nil { - panic("Please provide a valid numeric day") + day, err := strconv.Atoi(args[0]) + if err != nil { + panic(err) } - fmt.Printf("Day: %s, Input File: %s\n", day, inputFile) + var inputFile = fmt.Sprintf("day%d/input.txt", day) + if *fileArg != "" { + inputFile = *fileArg + } + + if _, err := os.Stat(inputFile); os.IsNotExist(err) { + fmt.Println("test file does not exist: %v", inputFile) + os.Exit(1) + } + + fmt.Printf("Day: %d, Input File: %s\n", day, inputFile) var part1, part2 int switch day { - case "1": + case 1: part1, part2 = day1.Run(inputFile) - case "2": + case 2: part1, part2 = day2.Run(inputFile) - case "3": + case 3: part1, part2 = day3.Run(inputFile) - case "4": + case 4: part1, part2 = day4.Run(inputFile) - case "5": + case 5: part1, part2 = day5.Run(inputFile) - case "6": + case 6: part1, part2 = day6.Run(inputFile) - case "7": + case 7: part1, part2 = day7.Run(inputFile) - case "8": + case 8: part1, part2 = day8.Run(inputFile) }