mirror of
https://github.com/onyx-and-iris/aoc2024.git
synced 2026-04-08 18:13:36 +00:00
first commit
This commit is contained in:
50
day-01/internal/one/solve.go
Normal file
50
day-01/internal/one/solve.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package one
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"embed"
|
||||
"io"
|
||||
"math"
|
||||
"regexp"
|
||||
|
||||
"github.com/onyx-and-iris/aoc2024/day-01/internal/util"
|
||||
)
|
||||
|
||||
//go:embed testdata
|
||||
var files embed.FS
|
||||
|
||||
var reNums = regexp.MustCompile(`[0-9]+`)
|
||||
|
||||
func Solve() (int, error) {
|
||||
data, _ := files.ReadFile("testdata/input.txt")
|
||||
|
||||
r := bytes.NewReader(data)
|
||||
left, right, err := parseLines(r)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
var sum int
|
||||
for i, n := range left {
|
||||
sum += int(math.Abs(float64(n - right[i])))
|
||||
}
|
||||
return sum, nil
|
||||
}
|
||||
|
||||
func parseLines(r io.Reader) ([]int, []int, error) {
|
||||
var left, right []int
|
||||
|
||||
scanner := bufio.NewScanner(r)
|
||||
for scanner.Scan() {
|
||||
nums := reNums.FindAllString(scanner.Text(), -1)
|
||||
left = util.InsertSorted(left, util.MustConv(nums[0]))
|
||||
right = util.InsertSorted(right, util.MustConv(nums[1]))
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
return left, right, nil
|
||||
}
|
||||
Reference in New Issue
Block a user