From 85c20005918e348ea0b998d1a09cdea6bee830b3 Mon Sep 17 00:00:00 2001 From: efim Date: Wed, 6 Dec 2023 12:59:20 +0000 Subject: [PATCH] day6, part2 --- day6/daySix.go | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/day6/daySix.go b/day6/daySix.go index 64d1f93..d676a79 100644 --- a/day6/daySix.go +++ b/day6/daySix.go @@ -3,19 +3,17 @@ package day6 import ( "fmt" "log" + "math" "os" "strconv" "strings" ) func Run() int { - input := ReadInput("day6/input") - result := 1 - for _, race := range input { - result *= race.countWinningMoves() - } - log.Printf("input %+v\n", input) - return result + race := ReadInput2("day6/input") + + log.Printf("input %+v\n", race) + return race.countWinningMoves() } type Race struct { @@ -45,6 +43,34 @@ func (r Race) countWinningMoves() int { return result } +func ReadInput2(filename string) Race { + runningTime := 0 + runningDistance := 0 + + bytes, err := os.ReadFile(filename) + if err != nil { + panic(fmt.Sprintln("problem readin input : ", filename)) + } + text := strings.Split( string(bytes), "\n") + times := strings.Fields(text[0]) + distances := strings.Fields(text[1]) + + for i := 1; i < len(times); i++ { + timeStr := times[i] + distanceStr := distances[i] + time, err1 := strconv.Atoi(timeStr) + distance, err2 := strconv.Atoi(distanceStr) + if err1 != nil || err2 != nil { + panic(fmt.Sprintf("error reading race %d from %s %s\n", i, times[i], distances[i])) + } + + runningTime = runningTime * int(math.Pow10(len(timeStr))) + time + runningDistance = runningDistance * int(math.Pow10(len(distanceStr))) + distance + } + + return Race{ runningTime, runningDistance } +} + func ReadInput(filename string) []Race { result := make([]Race, 0)