Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. module Solver1 where
  2.  
  3. import Data.Ord (comparing)
  4. import Data.Foldable (minimumBy)
  5.  
  6. maxVal :: [(Int, Int)] -> Int
  7. maxVal l = max (maximum l1) (maximum l2)
  8. where
  9. (l1, l2) = unzip l
  10.  
  11. best :: [[(Int, Int)]] -> [(Int, Int)]
  12. best = minimumBy $ comparing maxVal
  13.  
  14. gen :: Int -> Int -> (Int, Int) -> (Int, Int) -> [(Int, Int)]
  15. gen 0 _ _ __ = []
  16. gen n m p@(ap, bp) (an, bn) = best $ assign <$> els
  17. where
  18. els = if n == 1
  19. then [(a, b) | a <- [1..m], b <- [1..m], a /= b, a /= an, b /= bn, a /= bn, b /= an, a /= ap, b /= bp, a /= bp, b /= ap]
  20. else [(a, b) | a <- [1..m], b <- [1..m], a /= b, a /= an, b /= bn, a /= bn, b /= an]
  21. assign e = e : gen (n - 1) m p e
  22.  
  23. solve :: Int -> Int -> [(Int, Int)]
  24. solve n m = best $ assign <$> els
  25. where
  26. els = [(a, b) | a <- [1..m], b <- [1..m], a /= b]
  27. assign e = e : gen (n - 1) m e e
  28.  
  29. main :: IO ()
  30. main = do
  31. putStrLn $ "result for 4: " ++ show (solve 4 6)
  32. putStrLn $ "result for 5: " ++ show (solve 5 6)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement