Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. isConnected :: BoardSpec -> Bool
  2. isConnected legalPositions = checkIfAllNumberOne (infectWithGroupNumberOne (addGroupNumberToAll legalPositions))
  3.  
  4. addGroupNumberToAll :: BoardSpec -> BoardSpecGroup
  5. addGroupNumberToAll ((a,b):xs) = ((a,b,0):(addGroupNumberToAll xs))
  6. addGroupNumberToAll otherwise = []
  7.  
  8. infectWithGroupNumberOne :: BoardSpecGroup -> BoardSpecGroup
  9. infectWithGroupNumberOne ((a,b,0):xs) = infectRight (infectLeft (infectBelow (infectAbove ((a,b,1):xs) a) a) a) a
  10. infectWithGroupNumberOne board = board
  11.  
  12. infectAbove :: BoardSpecGroup -> Coord -> BoardSpecGroup
  13. infectAbove board (x,y) = if (positionExists board (x,y-1)) then infectWithGroupNumberOne (bringToFrontOfList board (x,y-1)) else board
  14.  
  15. infectBelow :: BoardSpecGroup -> Coord -> BoardSpecGroup
  16. infectBelow board (x,y) = if (positionExists board (x,y+1)) then infectWithGroupNumberOne (bringToFrontOfList board (x,y+1)) else board
  17.  
  18. infectLeft :: BoardSpecGroup -> Coord -> BoardSpecGroup
  19. infectLeft board (x,y) = if (positionExists board (x-1,y)) then infectWithGroupNumberOne (bringToFrontOfList board (x-1,y)) else board
  20.  
  21. infectRight :: BoardSpecGroup -> Coord -> BoardSpecGroup
  22. infectRight board (x,y) = if (positionExists board (x+1,y)) then infectWithGroupNumberOne (bringToFrontOfList board (x+1,y)) else board
  23.  
  24. positionExists :: BoardSpecGroup -> Coord -> Bool
  25. positionExists ((cocos,_,_):xs) coords = if (cocos == coords) then (True) else (positionExists xs coords)
  26. positionExists [] _ = False
  27.  
  28. bringToFrontOfList :: BoardSpecGroup -> Coord -> BoardSpecGroup
  29. bringToFrontOfList board cocos = removeAllExcept board cocos ++ removeFromList board cocos
  30.  
  31. removeAllExcept :: BoardSpecGroup -> Coord -> BoardSpecGroup
  32. removeAllExcept ((coords,a,b):board) cocos = if (coords == cocos) then ([(coords,a,b)]) else (removeAllExcept board cocos)
  33. removeAllExcept _ _ = []
  34.  
  35. removeFromList :: BoardSpecGroup -> Coord -> BoardSpecGroup
  36. removeFromList ((coords,a,b):board) cocos = if (coords == cocos) then (board) else ((coords,a,b):(removeFromList board cocos))
  37. removeFromList _ _ = []
  38.  
  39. checkIfAllNumberOne :: BoardSpecGroup -> Bool
  40. checkIfAllNumberOne ((_,_,1):xs) = checkIfAllNumberOne xs
  41. checkIfAllNumberOne [] = True
  42. checkIfAllNumberOne otherwise = False
  43.  
  44. printBoardSpecGroup :: BoardSpecGroup -> [((Int,Int),Bool,Int)]
  45. printBoardSpecGroup (((a,b),c,d):xs) = ((a,b),c,d):(printBoardSpecGroup xs)
  46. printBoardSpecGroup [] = []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement