Files
@ ddeb551e1404
Branch filter:
Location: Rank-Progress/rank_progress.py - annotation
ddeb551e1404
1.4 KiB
text/x-python
init commit
ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 | import sys
import re
from itertools import groupby
from datetime import datetime
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("since")
parser.add_argument("to", default=None)
parser.add_argument("-c", "--country-code", default="CZ")
args = parser.parse_args()
def parse_record(record):
types = [int, str, str, str, str, str, int, int, int, int]
columns = [f(token) for (f, token) in zip(types, record)] + [datetime.strptime(record[5][1:7], "%y%m%d")]
return tuple(columns)
def round_rating(r):
return (r+50)//100*100
since = datetime.strptime(args.since, "%Y%m%d")
to = datetime.strptime(args.to, "%Y%m%d") if args.to else datetime.now()
with open("/tmp/all.hst") as f:
s = f.read()
records = [re.split(r" {2,}", line.strip()) for line in s.splitlines()]
records = filter(lambda rec: len(rec) == 10, records)
records = map(parse_record, records)
national_records = filter(lambda rec: rec[2] == args.country_code, records)
players = groupby(national_records, lambda rec: rec[0])
for (pin, recs) in players:
tourneys = list(recs)
rounded_rating = round_rating(tourneys[0][9])
steps = []
for r in tourneys:
if rounded_rating != round_rating(r[8]):
rounded_rating = round_rating(r[8])
if r[9]-rounded_rating >= 50 or rounded_rating-r[9] > 100:
steps.append(r)
rounded_rating = round_rating(r[9])
steps = [r for r in steps if since <= r[10] <= to]
if steps:
print(steps)
|