109 lines
3.2 KiB
Python
109 lines
3.2 KiB
Python
|
from enum import Enum, auto
|
||
|
|
||
|
class MappedAction(Enum):
|
||
|
CUT_UNCONDITIONALLY = auto(),
|
||
|
DO_NOT_CUT_UNCONDITIONALLY = auto(),
|
||
|
CUT_IF_DIGIT_EVEN = auto(),
|
||
|
CUT_IF_PARALLEL = auto(),
|
||
|
CUT_IF_BATTERIES = auto()
|
||
|
|
||
|
class FinalAction(Enum):
|
||
|
CUT = auto(),
|
||
|
NO_CUT = auto()
|
||
|
|
||
|
class GlobalState:
|
||
|
def __init__(self, serial, parallel, batteries):
|
||
|
self.serial = serial
|
||
|
self.parallel = parallel
|
||
|
self.batteries = batteries
|
||
|
|
||
|
if int(self.serial[-1]) % 2 == 0:
|
||
|
self.serial_even = True
|
||
|
else:
|
||
|
self.serial_even = False
|
||
|
|
||
|
class ComplicatedWire:
|
||
|
def __init__(self, red, blue, star, led, state):
|
||
|
self.red = red
|
||
|
self.blue = blue
|
||
|
self.star = star
|
||
|
self.led = led
|
||
|
self.state = state
|
||
|
|
||
|
def getAction(self):
|
||
|
red = self.red
|
||
|
blue = self.blue
|
||
|
star = self.star
|
||
|
led = self.led
|
||
|
|
||
|
if (not red and not blue and not led and not star) or \
|
||
|
(not led and not blue and star):
|
||
|
return MappedAction.CUT_UNCONDITIONALLY
|
||
|
|
||
|
if led and not blue and (red or star):
|
||
|
return MappedAction.CUT_IF_BATTERIES
|
||
|
|
||
|
if (not star and not led and (red or blue)) or \
|
||
|
(red and led and blue and not star):
|
||
|
return MappedAction.CUT_IF_DIGIT_EVEN
|
||
|
|
||
|
if (blue and star and red ^ led) or \
|
||
|
(led and blue and not red and not star):
|
||
|
return MappedAction.CUT_IF_PARALLEL
|
||
|
|
||
|
if (blue and star and not red ^ led) or \
|
||
|
(led and not red and not star and not blue):
|
||
|
return MappedAction.DO_NOT_CUT_UNCONDITIONALLY
|
||
|
|
||
|
def custom_bool(a):
|
||
|
if a == "False":
|
||
|
return False
|
||
|
elif a == "True":
|
||
|
return True
|
||
|
|
||
|
def resolveAction(self):
|
||
|
action = self.getAction()
|
||
|
print(action)
|
||
|
|
||
|
if action == MappedAction.CUT_UNCONDITIONALLY:
|
||
|
return FinalAction.CUT
|
||
|
|
||
|
elif action == MappedAction.DO_NOT_CUT_UNCONDITIONALLY:
|
||
|
return FinalAction.NO_CUT
|
||
|
|
||
|
elif action == MappedAction.CUT_IF_DIGIT_EVEN:
|
||
|
if self.state.serial_even:
|
||
|
return FinalAction.CUT
|
||
|
return FinalAction.NO_CUT
|
||
|
|
||
|
elif action == MappedAction.CUT_IF_PARALLEL:
|
||
|
if self.state.parallel:
|
||
|
return FinalAction.CUT
|
||
|
return FinalAction.NO_CUT
|
||
|
|
||
|
elif action == MappedAction.CUT_IF_BATTERIES:
|
||
|
if self.state.batteries >= 2:
|
||
|
return FinalAction.CUT
|
||
|
return FinalAction.NO_CUT
|
||
|
|
||
|
@classmethod
|
||
|
def human_helper(cls):
|
||
|
serial = input("serial (string)? ")
|
||
|
parallel = cls.custom_bool(input("parallel (bool)? "))
|
||
|
batteries = int(input("number of batteries (int)? "))
|
||
|
|
||
|
red = cls.custom_bool(input("is red (bool)? "))
|
||
|
blue = cls.custom_bool(input("is blue (bool)? "))
|
||
|
star = cls.custom_bool(input("is star (bool)? "))
|
||
|
led = cls.custom_bool(input("is led (bool)? "))
|
||
|
|
||
|
print(red, blue, star, led)
|
||
|
|
||
|
state = GlobalState(serial, parallel, batteries)
|
||
|
wire = cls(red, blue, star, led, state)
|
||
|
|
||
|
print(wire.resolveAction())
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
ComplicatedWire.human_helper()
|