diff --git a/77 b/77 new file mode 100755 index 0000000..4cfbc35 Binary files /dev/null and b/77 differ diff --git a/77.hi b/77.hi new file mode 100644 index 0000000..95bb839 Binary files /dev/null and b/77.hi differ diff --git a/77.hs b/77.hs new file mode 100644 index 0000000..cb9b901 --- /dev/null +++ b/77.hs @@ -0,0 +1,26 @@ +import qualified Data.IntMap.Strict as M +import Data.Numbers.Primes +import Debug.Trace + +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 $ takeWhile (<= n) primes + in M.insert n subMap numMap + +createNummap :: Int -> M.IntMap (M.IntMap Int) +createNummap bound = + let initialMap = M.fromList [(0, M.fromList [(0, 1)]), (1, M.fromList [(1,0)])] + in foldr insertSubmap initialMap [bound, bound-1..2] + +main = print $ + let bound = 71 + in filterSum bound $ M.findWithDefault undefined bound $ createNummap bound diff --git a/77.o b/77.o new file mode 100644 index 0000000..cb2f8e4 Binary files /dev/null and b/77.o differ