module CircuitBase (Circuit(..), Chamber(..), Car(..), server_input, circ_from_perm) where import Encoding data Circuit = Circuit { outPin :: Int, inPins :: [Int] } deriving (Eq, Show) circ_from_perm (x:xs) = if (odd $ length xs) then error "Wrong pin count" else Circuit x xs data Chamber = Chamber { upperPipe :: [Int], mainChamber :: Bool, lowerPipe :: [Int] } data Car = Car { chambers :: [Chamber] } instance Encode Chamber where sdecode xs = let (x0, (a,b,c)) = sdecode xs in (x0, Chamber a (not b) c) sencode (Chamber a b c) = sencode (a, not b, c) instance Encode Car where sdecode xs = let (x0, a) = sdecode xs in (x0, Car a) sencode (Car a) = sencode a server_input = "01202101210201202"