diff --git a/day13/main.hs b/day13/main.hs index 871b01b..5c31e76 100755 --- a/day13/main.hs +++ b/day13/main.hs @@ -1,6 +1,6 @@ #! /usr/bin/env -S"GHCRTS=-N4" nix-shell #! nix-shell -p ghcid -#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple attoparsec arithmoi containers])" +#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple attoparsec arithmoi containers parallel])" #! nix-shell -i "ghcid -c 'ghci' -T main" {-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-} @@ -27,6 +27,7 @@ import qualified Data.Attoparsec.Text as A import qualified Data.IntSet as I import qualified Data.Text as T import qualified Data.Vector as V +import Control.Parallel.Strategies (parMap, parListChunk, rdeepseq) exampleData :: String exampleData = "939\n7,13,x,x,59,x,31,19" @@ -98,7 +99,7 @@ isT tpx x xs = head $ catMaybes $ map go allTs where allTs = [158478605388*tpx,158478605389*tpx..] go :: Int -> Maybe Int - go tpx0 = case and (map (go' tpx0) xs) of + go tpx0 = case and (parMap rdeepseq (go' tpx0) xs) of True -> Just (tpx0 - x) _ -> Nothing go' tpx0' (shift,fact) = @@ -145,11 +146,11 @@ main = do print $ 100000000000000 `mod` 631 print $ 100000000000000 `div` 631 putStrLn ":: Day 13 - Part 2" - -- print $ solvePart2 "939\n3,5" - -- print $ solvePart2 exampleData - -- print $ solvePart2 "1\n17,x,13,19" - -- print $ solvePart2 "1\n67,7,59,61" - -- print $ solvePart2 "1\n67,x,7,59,61" - -- print $ solvePart2 "1\n67,7,x,59,61" - -- print $ solvePart2 "1\n1789,37,47,1889" + print $ solvePart2 "939\n3,5" + print $ solvePart2 exampleData + print $ solvePart2 "1\n17,x,13,19" + print $ solvePart2 "1\n67,7,59,61" + print $ solvePart2 "1\n67,x,7,59,61" + print $ solvePart2 "1\n67,7,x,59,61" + print $ solvePart2 "1\n1789,37,47,1889" print $ solvePart2 input