ktane/comp_wires.py

109 lines
3.2 KiB
Python
Raw Normal View History

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()