Skip to content

Instantly share code, notes, and snippets.

@thehappydinoa
Created January 6, 2019 18:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thehappydinoa/23db0fa71b62387a3e2fc895e6b95e80 to your computer and use it in GitHub Desktop.
Save thehappydinoa/23db0fa71b62387a3e2fc895e6b95e80 to your computer and use it in GitHub Desktop.
Swimmers written in Python
class School(object):
def __init__(self, full_name, short_name):
self.full = full_name
self.short = short_name
class Swimmer(object):
def __init__(self, name, school):
self.name = name
self.school = school
self.times = dict()
def add_time(self, event_time):
self.times[event_time.event_id] = event_time
def best_time(self):
if len(self.times) > 0:
return self.times.sort()[0]
return
def get_time(self, event_id):
return self.times.get(event_id)
class EventTime(object):
def __init__(self, event_id, time):
# ID of event
self.event_id = event_id
# time in seconds
self.time = time
def __eq__(self, other):
# Equal
if isinstance(other, self.__class__):
return self.time == other.time
return False
def __ne__(self, other):
# Not Equal
if isinstance(other, self.__class__):
return self.time != other.time
return True
def __lt__(self, other):
# Less Than
assert isinstance(other, self.__class__)
return self.time < other.time
def __le__(self, other):
# Less Than or Equal
assert isinstance(other, self.__class__)
return self.time <= other.time
def __gt__(self, other):
# Greater Than
assert isinstance(other, self.__class__)
return self.time > other.time
def __ge__(self, other):
# Greater Than or Equal
assert isinstance(other, self.__class__)
return self.time >= other.time
class Event(object):
def __init__(self, id, distance):
self.id = id
self.distance = distance
self.swimmers = list()
def add_swimmer(self, swimmer):
self.swimmers.append(swimmer)
def add_swimmers(self, *args):
# Adds all arguments to swimmers
for swimmer in args:
self.add_swimmer(swimmer)
def add_time(self, lane, time):
swimmer = self.swimmers[lane]
swimmer.add_time(EventTime(self.id, time))
def get_times(self):
return [swimmer.get_time(self.id).time for swimmer in self.swimmers]
def sort_swimmers(self, swimmer):
# TODO: Fix sorting
return swimmer.get_time(self.id).time
def get_best_times(self):
return self.swimmers.sort(key=self.sort_swimmers)
def get_best_swimmer(self):
best_times = self.get_best_times()
print(best_times)
return best_times[0]
if __name__ == '__main__':
school1 = School("Washington Lee", "WL")
school2 = School("Yorktown", "YT")
swimmer1 = Swimmer("Name1", school1)
swimmer2 = Swimmer("Name2", school1)
swimmer3 = Swimmer("Name3", school2)
swimmer4 = Swimmer("Name4", school2)
event1 = Event(1, 200)
event1.add_swimmers(swimmer1, swimmer2, swimmer3, swimmer4)
event1.add_time(0, 120)
event1.add_time(1, 110)
event1.add_time(2, 130)
event1.add_time(3, 150)
times = event1.get_times()
print("Times: " + str(times))
winner = event1.get_best_swimmer()
print("Winner: " + winner.name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment