summaryrefslogtreecommitdiff
path: root/6-2.hs
diff options
context:
space:
mode:
authorLaura Orvokki Kursula <lav@vampires.gay>2024-12-07 00:47:26 +0100
committerLaura Orvokki Kursula <lav@vampires.gay>2024-12-07 00:50:32 +0100
commit1c166e353d82643b70d87044e300a1a6237cf9a8 (patch)
treed2ac2a22269aed814135508e48c56f1016938697 /6-2.hs
parentdbc00d64a4a2a5feb249773a1154ec136ce831c9 (diff)
downloadaoc2024-1c166e353d82643b70d87044e300a1a6237cf9a8.tar.gz
aoc2024-1c166e353d82643b70d87044e300a1a6237cf9a8.zip
Bugfix; now works
Fix a bug that was caused by advancing after turning without checking for obstacles. Now produces correct results, but atrociously slowly. Trying to make it more efficient with mutable arrays on another branch, but STArray is j a n k y.
Diffstat (limited to '6-2.hs')
-rw-r--r--6-2.hs9
1 files changed, 4 insertions, 5 deletions
diff --git a/6-2.hs b/6-2.hs
index 5153fb8..835bb23 100644
--- a/6-2.hs
+++ b/6-2.hs
@@ -50,9 +50,10 @@ checkAhead :: Map -> Vel -> Coords -> Bool
checkAhead m = (((== Free) . sub m) .) . move
turn :: Vel -> Coords -> (Coords, Vel)
-turn v p = let rot (Coords x y) = Coords (-y) x
- v' = rot v
- in (move v' p, v')
+turn v p =
+ let rot (Coords x y) = Coords (-y) x
+ v' = rot v
+ in (p, v')
step :: Map -> Vel -> Coords -> (Coords, Vel)
step m v p = if checkAhead m v p
@@ -103,6 +104,4 @@ main = do
let path = map fst $ execState (run m v p) []
let ms = possibilities m $ nub path
let res = ms `pseq` (map (\ n -> evalState (run n v p) []) ms `using` parList rdeepseq)
--- putStr . unlines . intersperse "--" . map (showMap . fst) . filter snd . zip ms $ res
print . length . filter id $ res
--- print . length $ ms