Parcourir la source

avoir rides that finishes too late

Gildas Chabot il y a 7 ans
Parent
commit
ee4e5164f3
1 fichiers modifiés avec 17 ajouts et 2 suppressions
  1. 17 2
      main.go

+ 17 - 2
main.go

@@ -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
 }