Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- isConnected :: BoardSpec -> Bool
- isConnected legalPositions = checkIfAllNumberOne (infectWithGroupNumberOne (addGroupNumberToAll legalPositions))
- addGroupNumberToAll :: BoardSpec -> BoardSpecGroup
- addGroupNumberToAll ((a,b):xs) = ((a,b,0):(addGroupNumberToAll xs))
- addGroupNumberToAll otherwise = []
- infectWithGroupNumberOne :: BoardSpecGroup -> BoardSpecGroup
- infectWithGroupNumberOne ((a,b,0):xs) = infectRight (infectLeft (infectBelow (infectAbove ((a,b,1):xs) a) a) a) a
- infectWithGroupNumberOne board = board
- infectAbove :: BoardSpecGroup -> Coord -> BoardSpecGroup
- infectAbove board (x,y) = if (positionExists board (x,y-1)) then infectWithGroupNumberOne (bringToFrontOfList board (x,y-1)) else board
- infectBelow :: BoardSpecGroup -> Coord -> BoardSpecGroup
- infectBelow board (x,y) = if (positionExists board (x,y+1)) then infectWithGroupNumberOne (bringToFrontOfList board (x,y+1)) else board
- infectLeft :: BoardSpecGroup -> Coord -> BoardSpecGroup
- infectLeft board (x,y) = if (positionExists board (x-1,y)) then infectWithGroupNumberOne (bringToFrontOfList board (x-1,y)) else board
- infectRight :: BoardSpecGroup -> Coord -> BoardSpecGroup
- infectRight board (x,y) = if (positionExists board (x+1,y)) then infectWithGroupNumberOne (bringToFrontOfList board (x+1,y)) else board
- positionExists :: BoardSpecGroup -> Coord -> Bool
- positionExists ((cocos,_,_):xs) coords = if (cocos == coords) then (True) else (positionExists xs coords)
- positionExists [] _ = False
- bringToFrontOfList :: BoardSpecGroup -> Coord -> BoardSpecGroup
- bringToFrontOfList board cocos = removeAllExcept board cocos ++ removeFromList board cocos
- removeAllExcept :: BoardSpecGroup -> Coord -> BoardSpecGroup
- removeAllExcept ((coords,a,b):board) cocos = if (coords == cocos) then ([(coords,a,b)]) else (removeAllExcept board cocos)
- removeAllExcept _ _ = []
- removeFromList :: BoardSpecGroup -> Coord -> BoardSpecGroup
- removeFromList ((coords,a,b):board) cocos = if (coords == cocos) then (board) else ((coords,a,b):(removeFromList board cocos))
- removeFromList _ _ = []
- checkIfAllNumberOne :: BoardSpecGroup -> Bool
- checkIfAllNumberOne ((_,_,1):xs) = checkIfAllNumberOne xs
- checkIfAllNumberOne [] = True
- checkIfAllNumberOne otherwise = False
- printBoardSpecGroup :: BoardSpecGroup -> [((Int,Int),Bool,Int)]
- printBoardSpecGroup (((a,b),c,d):xs) = ((a,b),c,d):(printBoardSpecGroup xs)
- printBoardSpecGroup [] = []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement