|
@@ -58,6 +58,17 @@ func (c *Car) Update(r *Ride) {
|
58
|
58
|
c.Rides = append(c.Rides, r.ID)
|
59
|
59
|
}
|
60
|
60
|
|
|
61
|
+func (c *Car) EarliestFinish(r *Ride) int {
|
|
62
|
+ copy := &Car{
|
|
63
|
+ Arrival: c.Arrival,
|
|
64
|
+ X: c.X,
|
|
65
|
+ Y: c.Y,
|
|
66
|
+ }
|
|
67
|
+ c.moveTo(r.a, r.b)
|
|
68
|
+ c.moveTo(r.x, r.y)
|
|
69
|
+ return copy.Arrival
|
|
70
|
+}
|
|
71
|
+
|
61
|
72
|
func (c *Car) moveTo(x, y int) {
|
62
|
73
|
xdist := c.X - x
|
63
|
74
|
if xdist < 0 {
|
|
@@ -75,9 +86,13 @@ func (c *Car) moveTo(x, y int) {
|
75
|
86
|
|
76
|
87
|
func Choose(c *Car) *Ride {
|
77
|
88
|
for _, r := range Rides {
|
78
|
|
- if !r.used {
|
79
|
|
- return r
|
|
89
|
+ if r.used {
|
|
90
|
+ continue
|
|
91
|
+ }
|
|
92
|
+ if r.f < c.EarliestFinish(r) {
|
|
93
|
+ continue
|
80
|
94
|
}
|
|
95
|
+ return r
|
81
|
96
|
}
|
82
|
97
|
return nil
|
83
|
98
|
}
|