SKILL_SCORE_DICT = { ".12--1<": 2.0, ".12--1o": 1.7, ".41/": 0.6, ".8-1<": 1.3, ".8-1o": 1.1, ".8-3<": 1.5, ".8-3o": 1.3, ".821<": 1.5, "4.-/": 0.6, "8.--/": 1.0, "8.--<": 1.2, "8.--o": 1.0, "8.11<": 1.4, "8.11o": 1.2, "8.22/": 1.6, "8.22o": 1.4, "8.31<": 1.6, } FRONTWARD = 1 BACKWARD = 0 class Skill: """Class skill Each object `skill` is composed by the following fields : - numeric_code: cleaned string of skill numeric code - direction: direction of the skill (frontward or backward) - rotation_quantity: summersault quantity (1, 2, 3 or 4) - quart_summersault_rotation: quantity of quart sommersault rotation (from 1 to 16) - half_twist_rotation: quantity of half twist rotation (from 0 to 9) - position: position of the skill (o, < or /) - difficulty: difficulty value of the skill - twisting: twisting part of the skill - twist_in_quantity: - twist_out_quantity: """ def __get_direction(self): if self.numeric_code.startswith("."): self.direction = FRONTWARD elif self.numeric_code.find("."): self.direction = BACKWARD else: self.direction = None def __get_position(self): position = self.numeric_code[-1:] if position == "o" or position == "<" or position == "/": self.position = position else: self.position = None def __get_rotation_quantity(self): rotation_quantity = len(self.numeric_code) self.twisting_start_position = 2 if rotation_quantity == 4: self.rotation_quantity = 1 elif rotation_quantity == 5: self.rotation_quantity = 2 elif rotation_quantity == 7: self.rotation_quantity = 3 self.twisting_start_position = 3 elif rotation_quantity == 8: self.rotation_quantity = 4 self.twisting_start_position = 3 else: self.rotation_quantity = None self.twist_in_quantity = None self.twist_out_quantity = None self.twisting_start_position = None print(f"Unknow skill: {self.numeric_code}") def __get_twisting_part(self): self.twisting = self.numeric_code[self.twisting_start_position : -1] def __get_quart_sommersault_rotation(self): if self.rotation_quantity == 1 or self.rotation_quantity == 2: if self.direction == FRONTWARD: self.quart_summersault_rotation = self.numeric_code[1] else: self.quart_summersault_rotation = self.numeric_code[0] elif self.rotation_quantity == 3 or self.rotation_quantity == 4: if self.direction == FRONTWARD: self.quart_summersault_rotation = self.numeric_code[1:3] else: self.quart_summersault_rotation = self.numeric_code[0:2] else: self.quart_summersault_rotation = None def __get_half_twist_rotation(self): self.half_twist_rotation = 0 for x in self.twisting: if x != "-": self.half_twist_rotation += int(x) def __get_difficulty_value(self): self.difficulty = int(self.half_twist_rotation) * 0.1 self.difficulty += int(self.quart_summersault_rotation) * 0.1 self.difficulty += (int(self.quart_summersault_rotation) // 4) * 0.1 self.difficulty += (int(self.quart_summersault_rotation) // 12) * 0.1 self.difficulty += (int(self.quart_summersault_rotation) // 16) * 0.1 if self.position == "<" or self.position == "/": self.difficulty += (int(self.quart_summersault_rotation) // 4) * 0.1 def __init__(self, skill_string): self.numeric_code = skill_string.strip().replace("\s", "") self.__get_direction() self.__get_position() self.__get_rotation_quantity() self.__get_twisting_part() self.__get_quart_sommersault_rotation() self.__get_half_twist_rotation() self.__get_difficulty_value() self.twist_in_quantity = 0 if self.twisting[0] == "-" else int(self.twisting[0]) self.twist_out_quantity = ( 0 if self.twisting[-1:] == "-" else int(self.twisting[-1:]) ) def __str__(self): return f"{self.numeric_code}: {self.quart_summersault_rotation} quart of {self.direction} with {self.half_twist_rotation} in {self.position} position (difficulty: {self.difficulty})."