Просмотр исходного кода

avoir rides that finishes too late

Gildas Chabot лет назад: 7
Родитель
Сommit
ee4e5164f3
1 измененных файлов с 17 добавлено и 2 удалено
  1. 17 2
      main.go

+ 17 - 2
main.go

@@ -58,6 +58,17 @@ func (c *Car) Update(r *Ride) {
58
 	c.Rides = append(c.Rides, r.ID)
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
 func (c *Car) moveTo(x, y int) {
72
 func (c *Car) moveTo(x, y int) {
62
 	xdist := c.X - x
73
 	xdist := c.X - x
63
 	if xdist < 0 {
74
 	if xdist < 0 {
@@ -75,9 +86,13 @@ func (c *Car) moveTo(x, y int) {
75
 
86
 
76
 func Choose(c *Car) *Ride {
87
 func Choose(c *Car) *Ride {
77
 	for _, r := range Rides {
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
 	return nil
97
 	return nil
83
 }
98
 }