A bit faster with Parallel, but still too slow

This commit is contained in:
Martin Potier 2020-12-18 16:23:47 +02:00
parent 7c8cb639cb
commit 6ee8b3fafa
No known key found for this signature in database
GPG Key ID: D4DD957DBA4AD89E
1 changed files with 10 additions and 9 deletions

View File

@ -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