module AiVsAi.Util where
import Prelude
import Control.Monad.State
takeEnd :: Int -> [a] -> [a]
takeEnd n l = reverse $ take n $ reverse l
zipWithLeftover :: [a] -> [b] -> ([(a,b)], [a], [b])
zipWithLeftover la lb = (zipList, fst leftover, snd leftover)
where
zipList = zip la lb
leftover
| (length la) == (length lb) = ([], [])
| (length la) > (length lb) = (takeEnd (length la length lb) la, [])
| otherwise = ([], takeEnd (length lb length la) lb)
toState :: a -> State a ()
toState a = do
put a
return ()
euclidDist :: (Int, Int) -> (Int, Int) -> Double
euclidDist (xi,yi) (xxi,yyi) = sqrt $ (xxx)^2 + (y yy)^2
where
x = fromIntegral xi
y = fromIntegral yi
xx = fromIntegral xxi
yy = fromIntegral yyi
concatPairs :: [(a,a)] -> [a]
concatPairs [] = []
concatPairs ((a,b): t) = [a,b] ++ concatPairs t
data InfInt = Infinity | Finite Int
deriving (Eq, Show)
instance Ord InfInt where
Infinity < Infinity = False
Finite _ < Infinity = True
Infinity < Finite _ = False
Finite a < Finite b = a < b
maybeEmpty :: [a] -> Maybe [a]
maybeEmpty [] = Nothing
maybeEmpty l = Just l