From 54974af0225666d0c790125df13617c19b4e7887 Mon Sep 17 00:00:00 2001 From: Vincent Post Date: Thu, 1 Mar 2018 22:31:43 +0100 Subject: added non working version --- old/main.py | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 old/main.py 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 -- cgit v1.2.3-1-g7c22