76 lines
1.4 KiB
Go
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
|
|
}
|