solution to egg drop
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

30 lines
746B

  1. import Data.Map (Map, (!))
  2. import qualified Data.Map as Map
  3. loeb :: Functor f => f (f a -> a) -> f a
  4. loeb x = go where go = fmap ($ go) x
  5. loebify :: Integer -> Integer -> (Map (Integer, Integer) Integer -> Integer)
  6. loebify n k
  7. | k == 1 || k == 0 || n == 1 = const k
  8. | otherwise = (\m -> 1 + (minimum $ map (\i -> f m i) [1..k]))
  9. where
  10. f m i = max (m ! ((n-1),(i-1))) (m ! (n,(k-i)))
  11. solve :: Integer -> Integer -> Integer
  12. solve n k = (loeb m) ! (n,k)
  13. where
  14. f (n,k) = ((n,k), loebify n k)
  15. m = Map.fromList $ map f [ (x,y) | x <- [1..n], y <- [0..k]]
  16. -----------------
  17. -- gross io bs --
  18. -----------------
  19. main :: IO ()
  20. main = do
  21. l <- getLine
  22. let (n:k:_) = map read $ words l :: [Integer]
  23. putStrLn $ show $ solve n k