Projekt_Sztuczna_Inteligencja/objects/mines/disarming/hash_function.py

106 lines
3.0 KiB
Python
Raw Normal View History

from enum import Enum
class Wire(Enum):
BLUE = 1, "blue"
GREEN = 2, "green"
RED = 3, "red"
class TypeHash(Enum):
TIME = 90, "time"
CHAINED = 12, "chained"
STANDARD = 0, "standard"
class DangerClassHash(Enum):
BIG_BANG = 64, "big bang"
WEAPON_OF_MASS_DESTRUCTION = 32, "weapon of mass destruction"
RADIOACTIVE = 16, "radioactive"
CASUAL_DEVASTATOR = 8, "casual devastator"
LITTLE_BOY = 4, "little boy"
CHERRY_BOMB = 0, "cherry bomb"
class SeriesHash(Enum):
TCH_2990TONER = 128, "TCH_2990toner"
TCH_2990INKJET = 64, "TCH_2990inkjet"
TVY_2400H = 48, "TVY_2400h"
SWX_5000 = 32, "SWX_5000"
SWX_4000 = 16, "SWX_4000"
WORKHORSE_3200 = 8, "WORKHORSE_3200"
FX_500 = 4, "FX_500"
TVY_2400 = 0, "TVY_2400"
class IndicatorHash(Enum):
RED = 10, "red"
YELLOW = 8, "yellow"
BLUE = 5, "blue"
GREEN = 2, "green"
WHITE = 0, "white"
class SpecificityHash(Enum):
ANTI_AIRCRAFT = 55, "anti_aircraft"
ANTI_PERSONNEL = 43, "anti_personnel"
DEPTH_MINE = 37, "depth_mine"
ANTI_TANK = 26, "anti_tank"
PROXIMITY_MINE = 18, "proximity_mine"
PRESSURE_MINE = 9, "pressure_mine"
FRAGMENTATION_MINE = 0, "fragmentation_mine"
class WeightHash(Enum):
FAT_MAN = 32, "fat_man"
EXTRA_LARGE = 24, "extra_large"
TOTAL_AVERAGE = 16, "total_average"
SLIM_FIT = 8, "slim_fit"
BREAD_CRUMB = 0, "bread_crumb"
MAX_VALUE = max([elem.value[0] for elem in TypeHash]) \
+ max([elem.value[0] for elem in DangerClassHash]) \
+ max([elem.value[0] for elem in SeriesHash]) \
+ max([elem.value[0] for elem in IndicatorHash]) \
+ max([elem.value[0] for elem in SpecificityHash]) \
+ max([elem.value[0] for elem in WeightHash])
def _get_wire_color(hash_sum):
if hash_sum < 0.4 * MAX_VALUE:
return Wire.BLUE
elif hash_sum <= 0.6 * MAX_VALUE:
return Wire.GREEN
else:
return Wire.RED
# STRING ARGUMENTS
def get_wire_from_str(mine_type: str, danger_cls: str, series: str, indicator: str, specificity: str, weight: str):
type_hash = TypeHash[mine_type.upper().replace(" ", "_")].value[0]
danger_cls_hash = DangerClassHash[danger_cls.upper().replace(" ", "_")].value[0]
series_hash = SeriesHash[series.upper().replace(" ", "_")].value[0]
indicator_hash = IndicatorHash[indicator.upper().replace(" ", "_")].value[0]
specificity_hash = SpecificityHash[specificity.upper().replace(" ", "_")].value[0]
weight_hash = WeightHash[weight.upper().replace(" ", "_")].value[0]
hash_sum = type_hash + danger_cls_hash + series_hash + indicator_hash + specificity_hash + weight_hash
return _get_wire_color(hash_sum)
# ENUM ARGUMENTS
def get_wire_from_enums(
mine_type: TypeHash,
danger_cls: DangerClassHash,
series: SeriesHash,
indicator: IndicatorHash,
specificity: SpecificityHash,
weight: WeightHash):
hash_list = [mine_type, danger_cls, series, indicator, specificity, weight]
hash_sum = sum([enum.value[0] for enum in hash_list])
return _get_wire_color(hash_sum)