Files
aoc/2024/03/main.go
2024-12-03 18:36:43 +02:00

76 lines
1.4 KiB
Go

package main
import (
"fmt"
"os"
"regexp"
"strconv"
"strings"
)
func calculate(x string) int {
clean1 := strings.Replace(x, "mul(", "", -1)
clean2 := strings.Replace(clean1, ")", "", -1)
splat := strings.Split(clean2, ",")
l, err := strconv.Atoi(splat[0])
if err != nil {
}
r, err := strconv.Atoi(splat[1])
if err != nil {
}
return l * r
}
func main() {
lines, err := parse()
if err != nil {
fmt.Println("Error:", err)
}
oneline := strings.Join(lines, "")
var p1 int = 0
var p2 int = 0
re := regexp.MustCompile(`mul\(\d+,\d+\)`)
matches := re.FindAllString(oneline, -1)
for i := 0; i < len(matches); i++ {
p1 += calculate(matches[i])
}
onecleanre := regexp.MustCompile(`(?s)don\'t\(\).*?do\(\)|$`)
oneclean := onecleanre.ReplaceAllString(oneline, "")
re2 := regexp.MustCompile(`mul\(\d+,\d+\)`)
matches2 := re2.FindAllString(oneclean, -1)
for i := 0; i < len(matches2); i++ {
p2 += calculate(matches2[i])
}
fmt.Println("p1: ", p1)
fmt.Println("p2: ", p2)
}
func parse() ([]string, error) {
if len(os.Args) < 2 {
return nil, fmt.Errorf("no file provided")
}
filePath := os.Args[1]
data, err := os.ReadFile(filePath)
if err != nil {
return nil, fmt.Errorf("error opening file: %v", err)
}
chunks := strings.Split(string(data), "\n")
var nonEmpthyChunks = []string{}
for _, chunk := range chunks {
if chunk != "" {
nonEmpthyChunks = append(nonEmpthyChunks, chunk)
}
}
return nonEmpthyChunks, nil
}