-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshared.py
52 lines (44 loc) · 1.67 KB
/
shared.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
from copy import deepcopy
DISTANCE = 400
WAITING_TIME = 50
MAX_TRACK_DEPTH = 20
def distance_from(car, track):
return np.abs(car.x - track[1]) + np.abs(car.y - track[2])
def track_length(track):
return np.abs(track[1] - track[3]) + np.abs(track[4] - track[5])
def decide_on_job(car, available_tracks, t):
if len(available_tracks) == 0:
return available_tracks
new_tracks = deepcopy(available_tracks)
for i, track in enumerate(new_tracks):
if distance_from(car, track) < DISTANCE:
# pop track
if is_track_doable(car, track, t):
car.goRide(track, t)
new_tracks = np.delete(available_tracks, (i), axis = 0)
return new_tracks
# waits
return new_tracks
def leftover_tracks(car, available_tracks, t, extra):
if len(available_tracks) == 0:
return available_tracks
new_tracks = deepcopy(available_tracks)
for i, track in enumerate(new_tracks):
if distance_from(car, track) < DISTANCE + extra:
# take any track literally
car.goRide(track, t)
new_tracks = np.delete(available_tracks, (i ), axis = 0)
return new_tracks
# waits
return new_tracks
def is_track_doable(car, track, t):
# first tracks that are ovedue land at the end
if track[-1] >= t + distance_from(car, track) + track_length(track):
# has the track started yet? or is in the specified waiting time?
if (distance_from(car, track) + t - track[-2]) >= -WAITING_TIME:
return True
else:
return False
else:
return False