From e29c4ddc7315b60885ff85689a811780e82312f3 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Wed, 29 Jul 2015 16:19:24 -0400 Subject: Placeholder matching algorithm. --- scheduling/Main.hs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 scheduling/Main.hs diff --git a/scheduling/Main.hs b/scheduling/Main.hs new file mode 100644 index 0000000..e08d171 --- /dev/null +++ b/scheduling/Main.hs @@ -0,0 +1,32 @@ +import Control.Monad (forM_) +data Player = Player { name :: String + , rank :: Int + , matchLimit :: Int + } deriving (Show, Eq) + +players :: [Player] +players = [ Player "orbekk" (-1) 4 + , Player "ltsang" (-4) 4 + , Player "sebh" 2 4 + , Player "fringd" (-1) 4 + , Player "sheyrax" (-2) 2 + ] + +remove :: Eq a => a -> [a] -> [a] +remove p = filter (/=p) + +matchPlayers :: [Player] -> [Player] -> ([Player], [(Player, Player)]) +matchPlayers [] qs = (qs, []) +matchPlayers ps [] = (ps, []) +matchPlayers (p:ps) (q:qs) + | p == q = matchPlayers (p:ps) qs + | otherwise = ([p', q'] ++ s', (p, q) : m') + where p' = p { matchLimit = matchLimit p - 1 } + q' = q { matchLimit = matchLimit q - 1 } + (s', m') = matchPlayers (remove q ps) (remove p qs) + +main = do + let (players', matches) = matchPlayers players players + print players' + forM_ matches $ \(p, q) -> + putStrLn ((name p) ++ " vs. " ++ (name q)) -- cgit v1.2.3