day6, example
This commit is contained in:
parent
7e6a543790
commit
a7d13ce84f
|
@ -0,0 +1,79 @@
|
|||
package day6
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Run() int {
|
||||
input := ReadInput("day6/example")
|
||||
result := 1
|
||||
for _, race := range input {
|
||||
result *= race.countWinningMoves()
|
||||
}
|
||||
log.Printf("input %+v\n", input)
|
||||
return result
|
||||
}
|
||||
|
||||
type Race struct {
|
||||
Time, Target int
|
||||
}
|
||||
|
||||
func (r Race) countWinningMoves() int {
|
||||
// oh and it's simmetrical
|
||||
leftPad := 0
|
||||
rightPad := 0
|
||||
for i := 0; i < (r.Time / 2 + 1); i++ {
|
||||
if i * (r.Time - i) > r.Target {
|
||||
leftPad = i
|
||||
break
|
||||
}
|
||||
}
|
||||
for i := 0; i < (r.Time / 2 + 1); i++ {
|
||||
time := r.Time - i
|
||||
if time * (r.Time - time) > r.Target {
|
||||
rightPad = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
result := r.Time + 1 - leftPad - rightPad
|
||||
log.Printf("for race %+v got left %d and right %d for total wind %d\n", r, leftPad, rightPad, result)
|
||||
return result
|
||||
}
|
||||
|
||||
func ReadInput(filename string) []Race {
|
||||
result := make([]Race, 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++ {
|
||||
time, err1 := strconv.Atoi(times[i])
|
||||
target, err2 := strconv.Atoi(distances[i])
|
||||
if err1 != nil || err2 != nil {
|
||||
panic(fmt.Sprintf("error reading race %d from %s %s\n", i, times[i], distances[i]))
|
||||
}
|
||||
race := Race{
|
||||
Time: time,
|
||||
Target: target,
|
||||
}
|
||||
result = append(result, race)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
|
||||
// my guess is that i can search from start and end into middle and stop when i find solution
|
||||
// from the way i think derivation of x*y works
|
||||
// but first - read in the input. with strings.Fields should be easy
|
|
@ -0,0 +1,2 @@
|
|||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
Loading…
Reference in New Issue