From 448981d4d86fb2abe598ec7ba790922c4e5125c3 Mon Sep 17 00:00:00 2001 From: Thorn Avery Date: Fri, 12 Mar 2021 14:44:46 +1300 Subject: [PATCH] first commit --- .gitignore | 4 ++++ README.md | 1 + egg.hs | 29 +++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 egg.hs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..093218d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.hi +*.o +*.swp +eggdrop diff --git a/README.md b/README.md new file mode 100644 index 0000000..f54e37e --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +solution for the eggdrop problem diff --git a/egg.hs b/egg.hs new file mode 100644 index 0000000..2afe002 --- /dev/null +++ b/egg.hs @@ -0,0 +1,29 @@ +import Data.Map (Map, (!)) +import qualified Data.Map as Map + +loeb :: Functor f => f (f a -> a) -> f a +loeb x = go where go = fmap ($ go) x + +loebify :: Integer -> Integer -> (Map (Integer, Integer) Integer -> Integer) +loebify n k + | k == 1 || k == 0 || n == 1 = const k + | otherwise = (\m -> 1 + (minimum $ map (\i -> f m i) [1..k])) + where + f m i = max (m ! ((n-1),(i-1))) (m ! (n,(k-i))) + +solve :: Integer -> Integer -> Integer +solve n k = (loeb m) ! (n,k) + where + f (n,k) = ((n,k), loebify n k) + m = Map.fromList $ map f [ (x,y) | x <- [1..n], y <- [0..k]] + +----------------- +-- gross io bs -- +----------------- + +main :: IO () +main = do + l <- getLine + let (n:k:_) = map read $ words l :: [Integer] + putStrLn $ show $ solve n k +