Day13: Fix parseoutput

This commit is contained in:
Arranun 2019-12-13 15:34:20 +01:00
parent 8df4b4c9c0
commit e5adad16ed

View File

@ -13,7 +13,7 @@ main = do
let blocks =length $ M.filter(==2) step1Result let blocks =length $ M.filter(==2) step1Result
let result = runGame arcade M.empty let result = runGame arcade M.empty
--let gameMap = createMap result [0..23] [] --let gameMap = createMap result [0..23] []
--let score = M.filterWithKey(\(V2 a b) _ -> a == -1 ) result let score = M.filterWithKey(\(V2 a b) _ -> a == -1 ) result
--mapM putStrLn( map (map getSymbol) gameMap) --mapM putStrLn( map (map getSymbol) gameMap)
--putStrLn(show score) --putStrLn(show score)
putStrLn(show result) putStrLn(show result)
@ -26,19 +26,19 @@ data Amplifier = Amplifier{ state :: [Int]
,output :: [Int] ,output :: [Int]
} deriving Show } deriving Show
runGame :: Amplifier -> M.Map (V2 Int) Int -> [Int] runGame :: Amplifier -> M.Map (V2 Int) Int -> M.Map (V2 Int) Int
runGame arcade gameM= do runGame arcade gameM= do
let newArcade = step arcade [0] let newArcade = step arcade [0]
let tiles = ((parseOutput M.empty (output newArcade))) let tiles = ((parseOutput M.empty (output newArcade)))
let newGameM = M.union tiles gameM let newGameM = M.union tiles gameM
let blocks = length $ M.filter(== 2) newGameM let blocks = length $ M.filter(== 2) newGameM
if blocks == 0 if blocks == 0
then output newArcade then tiles
else runGame newArcade newGameM else runGame newArcade newGameM
parseOutput :: M.Map (V2 Int) Int -> [Int] -> M.Map (V2 Int) Int parseOutput :: M.Map (V2 Int) Int -> [Int] -> M.Map (V2 Int) Int
parseOutput tiles (x:y:c:xs) parseOutput tiles (x:y:c:xs)
| length xs == 0 = tiles | length xs == 0 = M.insert (V2 x y) c tiles
| length xs > 0 = parseOutput newtiles xs | length xs > 0 = parseOutput newtiles xs
where newtiles = M.insert (V2 x y) c tiles where newtiles = M.insert (V2 x y) c tiles