78 lines
1.5 KiB
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)
|
|
}
|