solve part 2, thanks nytpu

This commit is contained in:
Nico 2020-12-13 18:32:33 +00:00
parent e94f26233d
commit 4d18082447
1 changed files with 25 additions and 9 deletions

View File

@ -10,29 +10,30 @@ import (
type Bus struct {
Num int
Arrival int
Minute int
}
func main() {
d, _ := ioutil.ReadFile("input")
lines := strings.Split(string(d),"\n")
departure, _ := strconv.Atoi(lines[0]) // Earliest departure time
busstrings := strings.Split(lines[1],",")
var busses []int
for _, b := range busstrings {
var busses []Bus
for i, b := range busstrings {
if b != "x" {
n, _ := strconv.Atoi(b)
busses = append(busses, n)
busses = append(busses, Bus{Num: n, Minute: i})
}
}
var bustimes []Bus
for _, b := range busses {
i := b
for index, b := range busses {
i := b.Num
for i < departure {
i += b
i += b.Num
}
bustimes = append(bustimes, Bus{Num: b, Arrival: i})
busses[index].Arrival = i
}
earliestBus := Bus{}
for _, bus := range bustimes {
for _, bus := range busses {
if earliestBus.Num == 0 { // If we have the first real bus
earliestBus = bus
} else if earliestBus.Arrival > bus.Arrival {
@ -40,4 +41,19 @@ func main() {
}
}
fmt.Println("Part 1:", earliestBus.Num * (earliestBus.Arrival - departure))
fmt.Println("Part 2:", chineseRemainder(busses))
}
// translation of https://git.sr.ht/~nytpu/advent_of_code_2020/tree/master/day13/problem2.c
func chineseRemainder(b []Bus) int {
jmp := b[0].Num
ts := b[0].Num
for i := 1; i < len(b); i++ {
for (ts + b[i].Minute) % b[i].Num != 0 {
ts += jmp
}
jmp *= b[i].Num
}
return ts
}