From 42b41dc56d3068d37816f2847d5a0ad9387fdb5b Mon Sep 17 00:00:00 2001 From: Kharec Date: Mon, 24 Nov 2025 13:20:28 +0100 Subject: [PATCH] feat: add main code --- 2020/day02/main.go | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 2020/day02/main.go diff --git a/2020/day02/main.go b/2020/day02/main.go new file mode 100644 index 0000000..e43c720 --- /dev/null +++ b/2020/day02/main.go @@ -0,0 +1,82 @@ +package main + +import ( + "fmt" + "log" + "os" + "strconv" + "strings" +) + +func parseInput(file string) []string { + content, err := os.ReadFile(file) + if err != nil { + log.Fatalf("Failed to read input file: %v", err) + } + lines := strings.Split(string(content), "\n") + var data []string + for _, line := range lines { + data = append(data, line) + } + return data +} + +func PartOne(data []string) int { + valid := 0 + for _, line := range data { + if line == "" { + continue + } + parts := strings.Split(line, ": ") + policy := parts[0] + password := parts[1] + + policyParts := strings.Split(policy, " ") + rangeStr := policyParts[0] + letter := policyParts[1] + + rangeParts := strings.Split(rangeStr, "-") + min, _ := strconv.Atoi(rangeParts[0]) + max, _ := strconv.Atoi(rangeParts[1]) + + count := strings.Count(password, letter) + if count >= min && count <= max { + valid++ + } + } + return valid +} + +func PartTwo(data []string) int { + valid := 0 + for _, line := range data { + if line == "" { + continue + } + parts := strings.Split(line, ": ") + policy := parts[0] + password := parts[1] + + policyParts := strings.Split(policy, " ") + rangeStr := policyParts[0] + letter := policyParts[1] + + rangeParts := strings.Split(rangeStr, "-") + firstPosition, _ := strconv.Atoi(rangeParts[0]) + secondPosition, _ := strconv.Atoi(rangeParts[1]) + + atFirstPosition := len(password) >= firstPosition && password[firstPosition-1] == letter[0] + atSecondPosition := len(password) >= secondPosition && password[secondPosition-1] == letter[0] + + if atFirstPosition != atSecondPosition { + valid++ + } + } + return valid +} + +func main() { + data := parseInput("input.txt") + fmt.Println("Part 1:", PartOne(data)) + fmt.Println("Part 2:", PartTwo(data)) +}