solve part 2, thanks nytpu
This commit is contained in:
parent
e94f26233d
commit
4d18082447
|
@ -10,29 +10,30 @@ import (
|
||||||
type Bus struct {
|
type Bus struct {
|
||||||
Num int
|
Num int
|
||||||
Arrival int
|
Arrival int
|
||||||
|
Minute int
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
d, _ := ioutil.ReadFile("input")
|
d, _ := ioutil.ReadFile("input")
|
||||||
lines := strings.Split(string(d),"\n")
|
lines := strings.Split(string(d),"\n")
|
||||||
departure, _ := strconv.Atoi(lines[0]) // Earliest departure time
|
departure, _ := strconv.Atoi(lines[0]) // Earliest departure time
|
||||||
busstrings := strings.Split(lines[1],",")
|
busstrings := strings.Split(lines[1],",")
|
||||||
var busses []int
|
var busses []Bus
|
||||||
for _, b := range busstrings {
|
for i, b := range busstrings {
|
||||||
if b != "x" {
|
if b != "x" {
|
||||||
n, _ := strconv.Atoi(b)
|
n, _ := strconv.Atoi(b)
|
||||||
busses = append(busses, n)
|
busses = append(busses, Bus{Num: n, Minute: i})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var bustimes []Bus
|
for index, b := range busses {
|
||||||
for _, b := range busses {
|
i := b.Num
|
||||||
i := b
|
|
||||||
for i < departure {
|
for i < departure {
|
||||||
i += b
|
i += b.Num
|
||||||
}
|
}
|
||||||
bustimes = append(bustimes, Bus{Num: b, Arrival: i})
|
busses[index].Arrival = i
|
||||||
}
|
}
|
||||||
earliestBus := Bus{}
|
earliestBus := Bus{}
|
||||||
for _, bus := range bustimes {
|
for _, bus := range busses {
|
||||||
if earliestBus.Num == 0 { // If we have the first real bus
|
if earliestBus.Num == 0 { // If we have the first real bus
|
||||||
earliestBus = bus
|
earliestBus = bus
|
||||||
} else if earliestBus.Arrival > bus.Arrival {
|
} else if earliestBus.Arrival > bus.Arrival {
|
||||||
|
@ -40,4 +41,19 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Println("Part 1:", earliestBus.Num * (earliestBus.Arrival - departure))
|
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
|
||||||
}
|
}
|
Loading…
Reference in New Issue