50 lines
731 B
Go
50 lines
731 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"log"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
file, err := os.Open("2023/day-1/files/input")
|
||
|
if err != nil {
|
||
|
log.Fatalf("Error: %v", err)
|
||
|
}
|
||
|
defer file.Close()
|
||
|
|
||
|
fmt.Printf("Sum total: %d\n", calculateSumCalibrationValues(file))
|
||
|
|
||
|
}
|
||
|
|
||
|
func calculateSumCalibrationValues(r io.Reader) int {
|
||
|
scanner := bufio.NewScanner(r)
|
||
|
|
||
|
sum := 0
|
||
|
|
||
|
for scanner.Scan() {
|
||
|
line := scanner.Text()
|
||
|
sum = sum + calibrationValue(line)
|
||
|
}
|
||
|
|
||
|
return sum
|
||
|
}
|
||
|
|
||
|
func calibrationValue(line string) int {
|
||
|
var digits []int
|
||
|
|
||
|
for _, r := range []rune(line) {
|
||
|
if (r >= '0') && (r <= '9') {
|
||
|
digits = append(digits, int(r - '0'))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if len(digits) == 0 {
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
return (10*digits[0]) + digits[len(digits)-1]
|
||
|
}
|