Bits of tidying
authorNeil Smith <neil.git@njae.me.uk>
Thu, 10 Dec 2020 11:18:09 +0000 (11:18 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Thu, 10 Dec 2020 11:18:09 +0000 (11:18 +0000)
advent02/src/advent02.hs
advent03/src/advent03.hs

index ce0eeb77245d679691debdde5f5c42379d3e47c3..b4a8e434c1cdf9a75a6f2112d23f74110b7ed022 100644 (file)
@@ -41,7 +41,7 @@ matches p = ((pw!!l) == c) /= ((pw!!u) == c)
 type Parser = Parsec Void Text
 
 sc :: Parser ()
-sc = L.space (skipSome spaceChar) CA.empty CA.empty
+sc = L.space space1 CA.empty CA.empty
 -- sc = L.space (skipSome (char ' ')) CA.empty CA.empty
 
 lexeme  = L.lexeme sc
index 777cf7e2bde2c9d04790aaef818b29f5abe2e04d..5c317a284925f9a3b67ea79a898a6d4b91645171 100644 (file)
@@ -9,38 +9,30 @@ main :: IO ()
 main = 
   do  text <- readFile "data/advent03.txt"
       let (trees, maxCorner) = readGrid text
-      -- print $ S.size trees
-      -- print trees
-      -- print $ maxCorner
-      -- print $ take 25 $ visitedPlaces (1, 3) maxCorner
-      -- print $ takeWhile (withinTrees maxCorner) $ visitedPlaces (1, 3) maxCorner
+      -- print $ trees == rg2 text
       print $ part1 trees maxCorner
       print $ part2 trees maxCorner
 
 
 readGrid :: String -> (Trees, Position)
-readGrid input = ( S.fromList [ (r, c) 
-                              | r <- [0..maxR], c <- [0..maxC]
-                              , (grid!!r)!!c == '#']
-                 , (maxR, maxC)
-                 )
-    where grid = lines input
-          maxC = (length $ head grid) - 1
-          maxR = (length grid) - 1
-
+readGrid input = (trees, (maxR, maxC))
+  where trees = S.fromList $ concat 
+                  [ [(r, c) | (t, c) <- zip row [0..], t == '#']
+                  | (row, r) <- zip rows [0..] ]
+        rows = lines input
+        maxC = (length $ head rows) - 1
+        maxR = (length rows) - 1
 
 part1 trees maxCorner = countEncounteredTrees trees maxCorner (1, 3)
 
-part2 trees maxCorner = foldr1 (*) $ map cet [(1, 1), (1, 3), (1, 5), (1, 7), (2, 1)]
+part2 trees maxCorner = product $ map cet [(1, 1), (1, 3), (1, 5), (1, 7), (2, 1)]
   where cet = countEncounteredTrees trees maxCorner
 
 countEncounteredTrees trees maxCorner delta = S.size $ S.intersection trees visited
   where visited = S.fromList $ takeWhile (withinTrees maxCorner) $ visitedPlaces delta maxCorner
 
-
 visitedPlaces :: Position -> Position -> [Position]
 visitedPlaces (dr, dc) (_maxR, maxC) = iterate wrappingStep (0, 0)
   where wrappingStep (r, c) = (r + dr, (c + dc) `mod` (maxC + 1))
 
 withinTrees (maxR, maxC) (r, c) = r >= 0 && r <= maxR && c >= 0 && c <= maxC
-