Day16: Half needed time by ignoring multiplication with 0

This commit is contained in:
Arranun 2019-12-16 12:29:06 +01:00
parent 5a307bfa6e
commit 17ef30b293

View File

@ -4,21 +4,25 @@ main = do
content <- getContents content <- getContents
let input = map digitToInt $ init content let input = map digitToInt $ init content
let base = [0,1,0,-1] let base = [0,1,0,-1]
let patter = map (getPatternForIndex base (length input)) [1..(length input)] let patter = map (getPatternForIndex base (length input)) [0..(length input)]
let test1 = doSteps input patter 100 let test1 = doSteps input patter 100
putStrLn (show input) --putStrLn (show input)
--mapM putStrLn (map show patter) --mapM putStrLn (map show patter)
putStrLn (show test1) putStrLn (show test1)
getPatternForIndex :: [Int] -> Int -> Int -> [Int] getPatternForIndex :: [Int] -> Int -> Int -> [Int]
getPatternForIndex patter length index = drop 1 $ take (length +1) (cycle base) getPatternForIndex patter length index = drop (1 + index) $ take (length +1) (cycle base)
where base = concat $ map (replicate index) patter where base = concat $ map (replicate (index+1)) patter
getInputForIndex :: [Int] -> Int -> [Int]
getInputForIndex xs index = drop index xs
get :: [Int] -> Int get :: [Int] -> Int
get xs = mod (abs $ (sum xs)) 10 get xs = mod (abs $ (sum xs)) 10
step :: [Int] -> [[Int]] -> [Int] step :: [Int] -> [[Int]] -> [Int]
step xs patterns = map ( get . zipWith (*) xs ) patterns step xs patterns = map (\(a,b) -> get( zipWith (*) a b)) $ zip inputs patterns
where inputs = map (getInputForIndex xs) [0..(length patterns)]
doSteps :: [Int] -> [[Int]] -> Int -> [Int] doSteps :: [Int] -> [[Int]] -> Int -> [Int]
doSteps xs patterns cnt doSteps xs patterns cnt