2022-12-29 11:50:47 +01:00
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 :
2022-12-29 21:41:30 +01:00
- 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 :
2022-12-29 11:50:47 +01:00
"""
2022-12-29 21:41:30 +01:00
def __get_direction ( self ) :
if self . numeric_code . startswith ( " . " ) :
2022-12-29 11:50:47 +01:00
self . direction = FRONTWARD
2022-12-29 21:41:30 +01:00
elif self . numeric_code . find ( " . " ) :
2022-12-29 11:50:47 +01:00
self . direction = BACKWARD
else :
2022-12-29 21:41:30 +01:00
self . direction = None
2022-12-29 11:50:47 +01:00
2022-12-29 21:41:30 +01:00
def __get_position ( self ) :
position = self . numeric_code [ - 1 : ]
2022-12-29 11:50:47 +01:00
if position == " o " or position == " < " or position == " / " :
self . position = position
else :
self . position = None
2022-12-29 21:41:30 +01:00
def __get_rotation_quantity ( self ) :
rotation_quantity = len ( self . numeric_code )
self . twisting_start_position = 2
2022-12-29 11:50:47 +01:00
if rotation_quantity == 4 :
self . rotation_quantity = 1
elif rotation_quantity == 5 :
self . rotation_quantity = 2
elif rotation_quantity == 7 :
self . rotation_quantity = 3
2022-12-29 21:41:30 +01:00
self . twisting_start_position = 3
2022-12-29 11:50:47 +01:00
elif rotation_quantity == 8 :
self . rotation_quantity = 4
2022-12-29 21:41:30 +01:00
self . twisting_start_position = 3
2022-12-29 11:50:47 +01:00
else :
self . rotation_quantity = None
self . twist_in_quantity = None
self . twist_out_quantity = None
2022-12-29 21:41:30 +01:00
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 : ] )
)
2022-12-29 11:50:47 +01:00
def __str__ ( self ) :
2022-12-29 21:41:30 +01:00
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 } ). "