Skip to content

Instantly share code, notes, and snippets.

@melwil
Created November 9, 2014 05:11
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 melwil/05d5974e1353d603afbe to your computer and use it in GitHub Desktop.
Save melwil/05d5974e1353d603afbe to your computer and use it in GitHub Desktop.
from sys import stdin
import re
import operator
tracks = []
track = []
already_on_map = []
recorded_players = []
timepattern = re.compile("^[^<]+<time> \[([\w\d]+) \(([^)]+)\)\] (\d+:\d+\.\d+)")
timeparse = re.compile("(\d+):(\d+)\.(\d+)")
class Player:
login = None
nick = None
time = None
time_in_millis = None
def __init__(self, login, nick, time):
self.login = login
self.nick = nick
self.time = time
m = timeparse.match(time)
millis = 0
millis += int(m.group(1)) * 60000
millis += int(m.group(2)) * 1000
millis += int(m.group(3)) * 10
self.time_in_millis = millis
class Track:
name = None
players = []
def __init__(self, name, players):
self.name = name
self.players = players
lines = []
for line in stdin:
lines.append(line)
lines = reversed(lines)
for line in lines:
if "Loading challenge" in line:
track_name = line.split(" ")[4]
tracks.append(Track(track_name, track))
track = []
already_on_map = []
continue
m = timepattern.match(line)
if m:
if not m.group(1) in already_on_map:
already_on_map.append(m.group(1))
track.append(Player(m.group(1), m.group(2), m.group(3)))
if not m.group(1) in recorded_players:
recorded_players.append(m.group(1))
players_with_times = []
total_times = {}
for p in recorded_players:
total_times[p] = 0
for t in tracks:
players_with_times = []
highest_time = 0
print "\n\n---- New track: %s" % t.name
for player in t.players:
tiem = player.time_in_millis
players_with_times.append(player.login)
total_times[player.login] += tiem
if tiem > highest_time:
highest_time = tiem
print "%s: %s (ms = %d)" % (player.login, player.time, player.time_in_millis)
for login in recorded_players:
punish_time = highest_time * 2
if login not in players_with_times:
total_times[login] += punish_time
print "%s has no time." % login
sorted_times = sorted(total_times.items(), key=operator.itemgetter(1))
print "\n\nTotal times:"
for player, time in sorted_times:
print "%s: %s" % (player, time)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment