diff --git a/76 b/76 new file mode 100755 index 0000000..b34ab2f Binary files /dev/null and b/76 differ diff --git a/76.hi b/76.hi new file mode 100644 index 0000000..9357ab2 Binary files /dev/null and b/76.hi differ diff --git a/76.hs b/76.hs new file mode 100644 index 0000000..1604857 --- /dev/null +++ b/76.hs @@ -0,0 +1,25 @@ +import qualified Data.IntMap.Strict as M + +filterSum :: Int -> M.IntMap Int -> Int +filterSum n subMap = + let filterMap = M.filterWithKey (\k _ -> k <= n) subMap + in M.foldr (+) 0 filterMap + +getSubmap :: Int -> M.IntMap (M.IntMap Int) -> M.IntMap Int +getSubmap k numMap = M.findWithDefault undefined k numMap + +insertSubmap :: Int -> M.IntMap (M.IntMap Int) -> M.IntMap (M.IntMap Int) +insertSubmap n numMap = + let getFilterSumInsert k subMap = M.insert k (filterSum k (getSubmap (n-k) numMap)) subMap + subMap = foldr getFilterSumInsert M.empty [n, n-1..1] + in M.insert n subMap numMap + +createNummap :: Int -> M.IntMap (M.IntMap Int) +createNummap bound = + let initialMap = M.fromList [(0, M.fromList [(0, 1)])] + in foldr insertSubmap initialMap [bound, bound-1..1] + +main = print $ + let bound = 100 + ways = filterSum bound $ M.findWithDefault undefined bound $ createNummap bound + in ways - 1 diff --git a/76.o b/76.o new file mode 100644 index 0000000..eb314cb Binary files /dev/null and b/76.o differ