aoc2023/day-6/util.go

58 lines
1.0 KiB
Go
Raw Permalink Normal View History

2023-12-06 15:56:20 +00:00
package main
import (
"bufio"
"log"
"os"
"strconv"
"strings"
"unicode"
)
// readlines reads lines from stdin.
// Then it returns them as an array of strings
func readlines() []string {
lines := []string{}
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
return lines
}
func parseLines(lines []string) {
f := func(c rune) bool {
return !unicode.IsDigit(c)
}
times := []int{}
distances := []int{}
for _, line := range lines {
if strings.HasPrefix(line, "Time") {
times = convertToInts(strings.FieldsFunc(line, f))
} else {
distances = convertToInts(strings.FieldsFunc(line, f))
}
}
for i := range times {
datas = append(datas, data{time: times[i], distance: distances[i]})
}
}
// convertToInts converts a string representing ints to an array of ints
func convertToInts(data []string) []int {
nums := []int{}
for _, elem := range data {
n, _ := strconv.Atoi(elem)
nums = append(nums, n)
}
return nums
}