From 7403ce8e7291020426e7470febe401ac1e45788a Mon Sep 17 00:00:00 2001 From: Katherina Walshe-Grey Date: Mon, 4 Nov 2024 23:14:01 +0000 Subject: [PATCH] Day 2b --- day02/day02.go | 29 +++++++++++++++++++++-------- day02/day02_test.go | 33 ++++++++++++++------------------- day02/{input1.txt => input.txt} | 0 3 files changed, 35 insertions(+), 27 deletions(-) rename day02/{input1.txt => input.txt} (100%) diff --git a/day02/day02.go b/day02/day02.go index cd0d465..d4de4f0 100644 --- a/day02/day02.go +++ b/day02/day02.go @@ -58,25 +58,38 @@ func isGameValid(game Game) bool { return true } -func ScanFile(file *os.File) (int, error) { +func power(game Game) int { + var red, green, blue int + for _, set := range game.sets { + red = max(red, set.red) + green = max(green, set.green) + blue = max(blue, set.blue) + } + return red * green * blue +} + +func ScanFile(file *os.File) (int, int, error) { scanner := bufio.NewScanner(file) - sum := 0 + var idSum, powerSum int for scanner.Scan() { - if game := parseGame(scanner.Text()); isGameValid(game) { - sum += game.id + game := parseGame(scanner.Text()) + if isGameValid(game) { + idSum += game.id } + powerSum += power(game) } if err := scanner.Err(); err != nil { - return 0, err + return 0, 0, err } - return sum, nil + return idSum, powerSum, nil } func main() { - sum, err := ScanFile(os.Stdin) + idSum, powerSum, err := ScanFile(os.Stdin) if err != nil { fmt.Fprintf(os.Stderr, "Invalid input: %s\n", err) return } - fmt.Println(sum) + fmt.Println(idSum) + fmt.Println(powerSum) } \ No newline at end of file diff --git a/day02/day02_test.go b/day02/day02_test.go index 923b84c..991283e 100644 --- a/day02/day02_test.go +++ b/day02/day02_test.go @@ -6,26 +6,21 @@ import ( ) func TestScanFile(t *testing.T) { - cases := []struct { - inFile string; - want int; - }{ - {"input1.txt", 8}, - } + inFile := "input.txt" + want1 := 8 + want2 := 2286 - for _, c := range cases { - f, err := os.Open(c.inFile) - if err != nil { - t.Fatal(err) - } + f, err := os.Open(inFile) + if err != nil { + t.Fatal(err) + } - got, err := ScanFile(f) - if err != nil { - t.Fatal(err) - } - - if got != c.want { - t.Errorf("ScanFile(%q) == %d, want %d", c.inFile, got, c.want) - } + got1, got2, err := ScanFile(f) + if err != nil { + t.Fatal(err) + } + + if got1 != want1 || got2 != want2 { + t.Errorf("ScanFile(%q) == %d, %d, want %d, %d", inFile, got1, got2, want1, want2) } } \ No newline at end of file diff --git a/day02/input1.txt b/day02/input.txt similarity index 100% rename from day02/input1.txt rename to day02/input.txt