diff options
Diffstat (limited to '2023/go/internal/day_02/part_02')
| -rw-r--r-- | 2023/go/internal/day_02/part_02/part_02.go | 114 | ||||
| -rw-r--r-- | 2023/go/internal/day_02/part_02/part_02_test.go | 84 |
2 files changed, 0 insertions, 198 deletions
diff --git a/2023/go/internal/day_02/part_02/part_02.go b/2023/go/internal/day_02/part_02/part_02.go deleted file mode 100644 index ffb9691..0000000 --- a/2023/go/internal/day_02/part_02/part_02.go +++ /dev/null @@ -1,114 +0,0 @@ -package part_02 - -import ( - "os" - "regexp" - "strconv" - "strings" -) - -type cubes struct { - red int - blue int - green int -} - -func Solve() { - contents, err := os.ReadFile("../_input/day_02.txt") - if err != nil { - panic(err) - } - - lines := strings.Split(string(contents), "\n") - answer := processLines(lines) - - println(answer) -} - -func processLines(lines []string) int { - var answer int - - for _, line := range lines { - if line == "" || line == "\n" { - continue - } - - shownCubes := convertLineToCubes(line) - - maxCubes := getMaximumCubes(shownCubes) - power := getPower(maxCubes) - answer += power - } - - return answer -} - -func convertLineToCubes(line string) []cubes { - var shownCubes []cubes - - redRegex := regexp.MustCompile(`(\d+) red`) - blueRegex := regexp.MustCompile(`(\d+) blue`) - greenRegex := regexp.MustCompile(`(\d+) green`) - - for _, round := range strings.Split(line, ";") { - var cubes cubes - - redMatches := redRegex.FindStringSubmatch(round) - if redMatches != nil { - red, err := strconv.Atoi(redMatches[1]) - if err != nil { - panic("Could not convert red to int: " + redMatches[1]) - } else { - cubes.red = red - } - } - - blueMatches := blueRegex.FindStringSubmatch(round) - if blueMatches != nil { - blue, err := strconv.Atoi(blueMatches[1]) - if err != nil { - panic("Could not convert green to int: " + blueMatches[1]) - } else { - cubes.blue = blue - } - } - - greenMatches := greenRegex.FindStringSubmatch(round) - if greenMatches != nil { - green, err := strconv.Atoi(greenMatches[1]) - if err != nil { - panic("Could not convert green to int: " + greenMatches[1]) - } else { - cubes.green = green - } - } - - shownCubes = append(shownCubes, cubes) - } - - return shownCubes -} - -func getMaximumCubes(shownCubes []cubes) cubes { - var maxCubes cubes - - for _, cubes := range shownCubes { - if cubes.red > maxCubes.red { - maxCubes.red = cubes.red - } - - if cubes.blue > maxCubes.blue { - maxCubes.blue = cubes.blue - } - - if cubes.green > maxCubes.green { - maxCubes.green = cubes.green - } - } - - return maxCubes -} - -func getPower(maxCubes cubes) int { - return maxCubes.red * maxCubes.blue * maxCubes.green -} diff --git a/2023/go/internal/day_02/part_02/part_02_test.go b/2023/go/internal/day_02/part_02/part_02_test.go deleted file mode 100644 index 6952899..0000000 --- a/2023/go/internal/day_02/part_02/part_02_test.go +++ /dev/null @@ -1,84 +0,0 @@ -package part_02 - -import ( - "testing" -) - -type data struct { - shownCubes []cubes - maxCubes cubes - line string -} - -var testInput = []data{ - { - shownCubes: []cubes{ - {red: 4, blue: 3}, - {red: 1, blue: 6, green: 2}, - {green: 2}, - }, - maxCubes: cubes{red: 4, blue: 6, green: 2}, - line: "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green", - }, - { - shownCubes: []cubes{ - {blue: 1, green: 2}, - {red: 1, blue: 4, green: 3}, - {blue: 1, green: 1}, - }, - maxCubes: cubes{red: 1, blue: 4, green: 3}, - line: "Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue", - }, - { - shownCubes: []cubes{ - {red: 20, blue: 6, green: 8}, - {red: 4, blue: 5, green: 13}, - {red: 1, green: 5}, - }, - maxCubes: cubes{red: 20, blue: 6, green: 13}, - line: "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red", - }, - { - shownCubes: []cubes{ - {red: 3, blue: 6, green: 1}, - {red: 6, green: 3}, - {red: 14, blue: 15, green: 3}, - }, - maxCubes: cubes{red: 14, blue: 15, green: 3}, - line: "Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red", - }, - { - shownCubes: []cubes{ - {red: 6, blue: 1, green: 3}, - {red: 1, blue: 2, green: 2}, - }, - maxCubes: cubes{red: 6, blue: 2, green: 3}, - line: "Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green", - }, -} - -func TestConvertLineToCubes(t *testing.T) { - for _, data := range testInput { - actualCubes := convertLineToCubes(data.line) - - if len(data.shownCubes) != len(actualCubes) { - t.Errorf("Expected length of shownCubes to be %d, got %d", len(data.shownCubes), len(actualCubes)) - } - - for i, cubes := range data.shownCubes { - if cubes != actualCubes[i] { - t.Errorf("Expected shownCubes to be %v, got %v", cubes, actualCubes[i]) - } - } - } -} - -func TestGetMaximumCubes(t *testing.T) { - for _, data := range testInput { - actualMaxCubes := getMaximumCubes(data.shownCubes) - - if actualMaxCubes != data.maxCubes { - t.Errorf("Expected maxCubes to be %v, got %v", data.maxCubes, actualMaxCubes) - } - } -} |
