|
@@ -133,19 +133,17 @@ func max(a, b int) int {
|
133
|
133
|
}
|
134
|
134
|
|
135
|
135
|
func Choose(c *Car) *Ride {
|
136
|
|
- var bestRides []struct {
|
137
|
|
- r *Ride
|
138
|
|
- lenOfRide int
|
139
|
|
- total int
|
140
|
|
- }
|
|
136
|
+ var bestRide *Ride
|
|
137
|
+ bestLenOfRide := 0
|
|
138
|
+ bestTotal := 0
|
141
|
139
|
// fmt.Printf("car %d\n", c.ID)
|
142
|
140
|
for _, r := range Rides {
|
143
|
141
|
if r.used {
|
144
|
142
|
continue
|
145
|
143
|
}
|
146
|
|
- // if r.Length() > 6000 {
|
147
|
|
- // continue
|
148
|
|
- // }
|
|
144
|
+ if r.Length() > 6000 {
|
|
145
|
+ continue
|
|
146
|
+ }
|
149
|
147
|
if r.f < c.EarliestFinish(r) {
|
150
|
148
|
continue
|
151
|
149
|
}
|
|
@@ -153,30 +151,16 @@ func Choose(c *Car) *Ride {
|
153
|
151
|
lenOfRide := r.length()
|
154
|
152
|
total := max(c.distanceTo(r.a, r.b), r.s-c.Arrival) + lenOfRide
|
155
|
153
|
// fmt.Printf("%d/%d\n", lenOfRide, total)
|
156
|
|
- if len(bestRides) == 0 || lenOfRide*bestRides[len(bestRides)-1].total > total*bestRides[len(bestRides)-1].lenOfRide {
|
157
|
|
- bestRides = append(bestRides, struct {
|
158
|
|
- r *Ride
|
159
|
|
- lenOfRide int
|
160
|
|
- total int
|
161
|
|
- }{r, lenOfRide, total})
|
162
|
|
- // shitty sort-of-correct-but-quite-incorrect way
|
163
|
|
- // of picking next best n rides
|
164
|
|
- n := 3
|
165
|
|
- if len(bestRides) > n {
|
166
|
|
- bestRides = bestRides[len(bestRides)-n:]
|
167
|
|
- }
|
|
154
|
+ if bestRide == nil || lenOfRide*bestTotal > total*bestLenOfRide {
|
|
155
|
+ bestLenOfRide = lenOfRide
|
|
156
|
+ bestTotal = total
|
|
157
|
+ bestRide = r
|
168
|
158
|
}
|
169
|
159
|
}
|
170
|
160
|
// if bestRide != nil {
|
171
|
161
|
// fmt.Printf("Picking %d %d -> %d %d\n", bestRide.a, bestRide.b, bestRide.x, bestRide.y)
|
172
|
162
|
// }
|
173
|
|
- if len(bestRides) != 0 {
|
174
|
|
- // pick the not quite best ride...hey some
|
175
|
|
- // of the inputs already give a better score !
|
176
|
|
- return bestRides[0].r
|
177
|
|
- //return bestRides[len(bestRides)-1].r
|
178
|
|
- }
|
179
|
|
- return nil
|
|
163
|
+ return bestRide
|
180
|
164
|
}
|
181
|
165
|
|
182
|
166
|
func assign() bool {
|