Changeset - d908ea134adb
[Not reviewed]
default
0 1 0
Laman - 3 years ago 2021-10-14 17:08:18

a RankTracker class
1 file changed with 35 insertions and 7 deletions:
0 comments (0 inline, 0 general)
rank_progress.py
Show inline comments
 
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])
 
@@ -38,12 +31,39 @@ class Record:
 

	
 
	def __str__(self):
 
		s = self.source + "  {} -> {}".format(*self.rank_change)
 
		return s
 

	
 

	
 
class RankTracker:
 
	def __init__(self, rating):
 
		self._rounded_rating = round_rating(rating)
 

	
 
	@property
 
	def rank(self):
 
		return rating_to_rank(self._rounded_rating)
 

	
 
	def update(self, rating):
 
		rounded_rating = round_rating(rating)
 

	
 
		if rounded_rating == self._rounded_rating:
 
			return False
 
		elif rounded_rating > self._rounded_rating:  # promotion
 
			self._rounded_rating = rounded_rating
 
			return self.rank
 
		else:  # demotion
 
			if rounded_rating >= 1500 and self._rounded_rating - rating > 100:
 
				self._rounded_rating = rounded_rating
 
				return self.rank
 
			elif self._rounded_rating - rating > 150:
 
				self._rounded_rating = rounded_rating+100
 
				return self.rank
 
			else:
 
				return False
 

	
 

	
 
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)
 

	
 

	
 
@@ -54,12 +74,20 @@ def round_rating(r):
 
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)]
 

	
 

	
 
if __name__ == "__main__":
 
	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()
 
	
 
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()
 

	
0 comments (0 inline, 0 general)