Guillaume Koenig před 7 roky
rodič
revize
f0134abce8
1 změnil soubory, kde provedl 20 přidání a 6 odebrání
  1. 20 6
      main.go

+ 20 - 6
main.go

@@ -116,25 +116,39 @@ func (c *Car) distanceTo(x, y int) int {
116 116
 	return abs(c.X-x) + abs(c.Y-y)
117 117
 }
118 118
 
119
+func max(a, b int) int {
120
+	if a > b {
121
+		return a
122
+	} else {
123
+		return b
124
+	}
125
+}
126
+
119 127
 func Choose(c *Car) *Ride {
120 128
 	var bestRide *Ride
121 129
 	bestLenOfRide := 0
122 130
 	bestTotal := 0
123
-	for _, r := range Rides[1:] {
131
+	// fmt.Printf("car %d\n", c.ID)
132
+	for _, r := range Rides {
124 133
 		if r.used {
125 134
 			continue
126 135
 		}
127
-		if r.f < c.EarliestFinish(r) {
128
-			continue
129
-		}
136
+		// if r.f < c.EarliestFinish(r) {
137
+		// 	continue
138
+		// }
139
+		// fmt.Printf("%d %d -> %d %d\n", r.a, r.b, r.x, r.y)
130 140
 		lenOfRide := r.length()
131
-		total := c.distanceTo(r.a, r.b) + lenOfRide
132
-		if bestRide == nil || lenOfRide*bestTotal < total*bestLenOfRide {
141
+		total := max(c.distanceTo(r.a, r.b), r.s-c.Arrival) + lenOfRide
142
+		// fmt.Printf("%d/%d\n", lenOfRide, total)
143
+		if bestRide == nil || lenOfRide*bestTotal > total*bestLenOfRide {
133 144
 			bestLenOfRide = lenOfRide
134 145
 			bestTotal = total
135 146
 			bestRide = r
136 147
 		}
137 148
 	}
149
+	// if bestRide != nil {
150
+	// 	fmt.Printf("Picking %d %d -> %d %d\n", bestRide.a, bestRide.b, bestRide.x, bestRide.y)
151
+	// }
138 152
 	return bestRide
139 153
 }
140 154