Files
@ 3d0ab62fd174
Branch filter:
Location: Rank-Progress/rank_progress.py - annotation
3d0ab62fd174
2.1 KiB
text/x-python
a Record class
ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 c6a258063801 c6a258063801 c6a258063801 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 ddeb551e1404 3d0ab62fd174 ddeb551e1404 3d0ab62fd174 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 ddeb551e1404 3d0ab62fd174 ddeb551e1404 3d0ab62fd174 ddeb551e1404 3d0ab62fd174 ddeb551e1404 3d0ab62fd174 3d0ab62fd174 | import re
from itertools import groupby
from datetime import datetime
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("since", help="a date in YYYYMMDD format")
parser.add_argument("to", nargs="?", help="a date in YYYYMMDD format")
parser.add_argument("-c", "--country-code", default="CZ", help="a two letter country code, default=CZ")
args = parser.parse_args()
class Record:
def __init__(self, tokens, source):
self.pin = int(tokens[0])
self.country_code = tokens[2]
self.rating_before = int(tokens[8])
self.rounded_before = round_rating(self.rating_before)
self.rating_after = int(tokens[9])
self.rounded_after = round_rating(self.rating_after)
tournament_code = tokens[5]
self.date = datetime.strptime(tournament_code[1:7], "%y%m%d")
self.source = source
@classmethod
def parse(cls, line):
tokens = re.split(r" {2,}", line.strip())
if len(tokens) != 10:
return None
return cls(tokens, line)
def __str__(self):
return self.source
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 = [Record.parse(line) for line in s.splitlines()]
records = filter(lambda rec: rec is not None, records)
national_records = filter(lambda rec: rec.country_code == args.country_code, records)
player_records = groupby(national_records, lambda rec: rec.pin)
for (pin, recs) in player_records:
tourneys = list(recs)
rounded_rating = tourneys[0].rounded_before
steps = []
for r in tourneys:
# omit reset ratings
if rounded_rating != r.rounded_before:
rounded_rating = r.rounded_before
if r.rating_after-rounded_rating >= 50 or rounded_rating-r.rating_after > 100:
steps.append(r)
rounded_rating = r.rounded_after
steps = [r for r in steps if since <= r.date <= to]
if steps:
print("\n".join(map(str, steps)))
print()
|