90 lines
1.6 KiB
Go
90 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("Day 13")
|
|
start := time.Now()
|
|
|
|
dat, err := ioutil.ReadFile("day14.txt")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
lines := bytes.Split(dat, []byte("\n"))
|
|
|
|
part1 := 0
|
|
total := 2503
|
|
for _, line := range lines {
|
|
stringLine := string(line)
|
|
splitLine := strings.Split(stringLine, " ")
|
|
|
|
v, _ := strconv.Atoi(splitLine[3])
|
|
s, _ := strconv.Atoi(splitLine[6])
|
|
r, _ := strconv.Atoi(splitLine[13])
|
|
|
|
currentDistance := (total / (s + r)) * v * s
|
|
remaining := total % (s + r)
|
|
if remaining >= s {
|
|
currentDistance += v * s
|
|
} else {
|
|
currentDistance += v * remaining
|
|
}
|
|
if currentDistance > part1 {
|
|
part1 = currentDistance
|
|
}
|
|
}
|
|
|
|
elapsed := time.Since(start)
|
|
fmt.Printf("Part 1: %v %v \n", part1, elapsed)
|
|
|
|
start = time.Now()
|
|
|
|
horses := make(map[int]int)
|
|
for i := 1; i <= total; i++ {
|
|
|
|
longest := 0
|
|
fastestHorse := 0
|
|
for index, line := range lines {
|
|
stringLine := string(line)
|
|
splitLine := strings.Split(stringLine, " ")
|
|
|
|
v, _ := strconv.Atoi(splitLine[3])
|
|
s, _ := strconv.Atoi(splitLine[6])
|
|
r, _ := strconv.Atoi(splitLine[13])
|
|
|
|
currentDistance := (i / (s + r)) * v * s
|
|
remaining := i % (s + r)
|
|
if remaining >= s {
|
|
currentDistance += v * s
|
|
} else {
|
|
currentDistance += v * remaining
|
|
}
|
|
if currentDistance > longest {
|
|
longest = currentDistance
|
|
fastestHorse = index
|
|
}
|
|
}
|
|
|
|
horses[fastestHorse] = horses[fastestHorse] + 1
|
|
|
|
}
|
|
|
|
fastest := 0
|
|
for _, value := range horses {
|
|
if value > fastest {
|
|
fastest = value
|
|
}
|
|
}
|
|
|
|
elapsed = time.Since(start)
|
|
fmt.Printf("Part 2: %v %v \n", fastest, elapsed)
|
|
|
|
}
|