summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Post <vincent.post@fu-berlin.de>2018-03-01 22:31:43 +0100
committerVincent Post <vincent.post@fu-berlin.de>2018-03-01 22:31:43 +0100
commit54974af0225666d0c790125df13617c19b4e7887 (patch)
treeef798d7f9b2aa7e5e43171bc610f3452866c45f6
parent00045e604b23488cdf5ec0d8140fff27414508e4 (diff)
downloadhashcode-master.tar.gz
hashcode-master.tar.bz2
hashcode-master.zip
added non working versionHEADmaster
-rw-r--r--old/main.py167
1 files changed, 167 insertions, 0 deletions
diff --git a/old/main.py b/old/main.py
new file mode 100644
index 0000000..a075bf2
--- /dev/null
+++ b/old/main.py
@@ -0,0 +1,167 @@
+# -*- coding: utf-8 -*-
+import sys
+
+
+def abs(x):
+ if x < 0:
+ return -x
+ else:
+ return x
+
+class Grid:
+ def __init__(self, rows, columns):
+ self.rows = rows
+ self.columns = columns
+ self.grid = [[None]*columns]*rows
+
+
+class Vehicle:
+ def __init__(self):
+ self.x = 0
+ self.y = 0
+ self.ride = None
+ self.occupied = False
+ self.completed_rides = []
+
+ def head_towards(self, pos):
+ x = pos[0]
+ y = pos[1]
+ if self.x < x:
+ self.x += 1
+ elif self.x > x:
+ self.x -= 1
+ elif self.y < y:
+ self.y += 1
+ elif self.y > y:
+ self.y -= 1
+
+ def completed_ride(self):
+ print("Actual/Goal: ", (self.x, self.y), self.ride.finish)
+ return self.x == self.ride.finish[0] and self.y == self.ride.finish[1]
+
+ def is_at_startpoint(self):
+ return self.x == self.ride.start[0] and self.y == self.ride.start[1]
+
+ def tostr(self):
+ return "Vehicle at " + str(self.x) + "," + str(self.y)
+
+class Ride:
+ def __init__(self, index, start, finish, earliest_start, latest_finish):
+ self.index = index
+ self.skipable = False
+ self.start = start
+ self.finish = finish
+ self.earliest_start = earliest_start
+ self.latest_finish = latest_finish
+ self.left_steps = abs(start[0] - finish[0]) + abs(start[1] - finish[1])
+ self.completed = False
+
+class Task:
+ def __init__(self, filename):
+ self.filename = filename
+ self.parsed_file = self.__split()
+ self.grid = Grid(int(self.parsed_file[0][0]), int(self.parsed_file[0][1]))
+ self.rides = []
+ self.vehicles_count = int(self.parsed_file[0][2])
+ for x in range(1, len(self.parsed_file)):
+ y = self.parsed_file[x]
+ self.rides.append(
+ Ride(x,
+ (int(y[0]), int(y[1])),
+ (int(y[2]), int(y[3])),
+ int(y[4]),
+ int(y[5])
+ )
+ )
+
+ def __split(self):
+ with open(self.filename, "r") as input:
+ return [x.split(" ") for x in input.read().splitlines()]
+
+ def simulate_dumb(self):
+ step = 1
+ for r in self.rides:
+ r.active = False
+ self.vehicles = []
+ for i in range(self.vehicles_count):
+ self.vehicles.append(Vehicle())
+ while len(self.rides) != 0:
+ print("===STEP", step)
+ for r in range(len(self.rides)):
+ print(self.rides[r].left_steps)
+ if step > 100:
+ break
+ # STEP FUNCTION
+
+ print("List of rides:")
+ for r in self.rides:
+ print(r.index)
+
+ # Which Vehicle to take for which ride next?
+ step += 1
+ for r in range(len(self.rides)):
+ if not self.rides[r].active:
+ for v in range(len(self.vehicles)):
+ if not self.vehicles[v].occupied:
+ self.vehicles[v].occupied = True
+ self.vehicles[v].ride = self.rides[r]
+ self.vehicles[v].ride.active = True
+ print("taking vehicle", v, "for ride", r+1)
+ print("start:", self.rides[r].start, "finish", self.rides[r].finish)
+ break
+
+ for v in range(len(self.vehicles)):
+ line = self.vehicles[v].tostr()
+ if self.vehicles[v].ride is not None:
+ line += " with ride " + str(self.vehicles[v].ride.index)
+ print(line)
+
+ # Move forward
+ for v in range(len(self.vehicles)):
+ if self.vehicles[v].ride is not None:
+ if not self.vehicles[v].ride.active:
+ print("Not active: ", v)
+ if self.vehicles[v].is_at_startpoint():
+ # Wait at starting point, then activate the ride
+ if step >= self.vehicles[v].ride.earliest_start:
+ self.rides[r].active = True
+ else:
+ self.vehicles[v].head_towards(self.vehicles[v].ride.start)
+ elif not self.vehicles[v].completed_ride():
+ self.vehicles[v].head_towards(self.vehicles[v].ride.finish)
+ x = self.vehicles[v].x
+ y = self.vehicles[v].y
+ finish = self.vehicles[v].ride.finish
+ self.rides[r].left_steps = abs(x - finish[0]) + abs(y - finish[1])
+ elif self.vehicles[v].completed_ride():
+ print(print(self.vehicles[v].tostr() + " has not moved because it has reached target"))
+ print("Ride", self.vehicles[v].ride.index, "is completed")
+ self.vehicles[v].ride.active = False
+ self.vehicles[v].occupied = False
+ self.vehicles[v].completed_rides += [self.vehicles[v].ride]
+ self.vehicles[v].ride = None
+ self.rides[r].left_steps = 0
+ self.rides[r].completed = True
+ # ToDo Points
+
+ for r in reversed(range(len(self.rides))):
+ if not self.rides[r].active:
+ if self.rides[r].completed:
+ print("Delete ", r+1)
+ del(self.rides[r])
+
+ print("List of rides:")
+ for r in self.rides:
+ print(r.index)
+
+if __name__ == "__main__":
+ asd = Task(sys.argv[1])
+ asd.simulate_dumb()
+ print("Vehicles:", len(asd.vehicles))
+ for v in range(len(asd.vehicles)):
+ line = str(v+1)
+ for r in asd.vehicles[v].completed_rides:
+ line += " " + str(r.index)
+ print(line)
+
+# vim: tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab