Files
AdventOfCode2024/Day01/optimized.go

78 lines
1.5 KiB
Go

package main
import (
"bufio"
"fmt"
"log"
"os"
"sort"
"strconv"
"strings"
)
func optimized() {
fmt.Println("Optimized Code by ChatGPT")
// Open the input file
file, err := os.Open("./input.txt")
if err != nil {
log.Fatalf("Error opening input.txt: %v", err)
}
defer file.Close()
var (
listA, listB []int
)
// Read and parse input file
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := strings.Fields(scanner.Text())
if len(line) != 2 {
log.Fatalf("Invalid input format: %s", scanner.Text())
}
num1, err1 := strconv.Atoi(line[0])
num2, err2 := strconv.Atoi(line[1])
if err1 != nil || err2 != nil {
log.Fatalf("Error converting input to integers: %v, %v", err1, err2)
}
listA = append(listA, num1)
listB = append(listB, num2)
}
if err := scanner.Err(); err != nil {
log.Fatalf("Error reading file: %v", err)
}
// Part 1: Calculate sum of absolute differences
sort.Ints(listA)
sort.Ints(listB)
sumPart1 := 0
for i := 0; i < len(listA); i++ {
diff := listA[i] - listB[i]
if diff < 0 {
diff = -diff
}
sumPart1 += diff
}
fmt.Printf("Sum of Part 1: %d\n", sumPart1)
// Part 2: Calculate weighted sum of matches
sumPart2 := 0
countMap := make(map[int]int)
// Populate a map for quick lookup
for _, num := range listB {
countMap[num]++
}
for _, num := range listA {
if count, found := countMap[num]; found {
sumPart2 += count * num
}
}
fmt.Printf("Sum of Part 2: %d\n", sumPart2)
}