Files
@ 2156c5a17dfe
Branch filter:
Location: Rank-Progress/rank_progress.py - annotation
2156c5a17dfe
2.5 KiB
text/x-python
printing the rank change
ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 c6a258063801 c6a258063801 c6a258063801 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 3d0ab62fd174 3d0ab62fd174 2156c5a17dfe 2156c5a17dfe 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 2156c5a17dfe 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 3d0ab62fd174 2156c5a17dfe 2156c5a17dfe 3d0ab62fd174 3d0ab62fd174 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 2156c5a17dfe 2156c5a17dfe 2156c5a17dfe 2156c5a17dfe 2156c5a17dfe 2156c5a17dfe 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.source = 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.rank_change = (rating_to_rank(self.rating_before), rating_to_rank(self.rating_after))
@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):
s = self.source + " {} -> {}".format(*self.rank_change)
return s
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
def rating_to_rank(rating):
rank_list = [str(i)+"k" for i in range(30, 0, -1)] + [str(i)+"d" for i in range(1, 8)]
key = round_rating(rating)//100
return rank_list[min(key+9, 36)]
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()
|