From 1b5a8ee45829d107c7affdad205b34fb4078fa51 Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Fri, 6 Dec 2024 19:55:10 +0100 Subject: [PATCH] Improve code --- Day2/puzzle2.hs | 4 ++-- Day6/puzzle1.hs | 4 ++-- Day6/puzzle2.hs | 12 +++++------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Day2/puzzle2.hs b/Day2/puzzle2.hs index 5d186f4..756dc9b 100644 --- a/Day2/puzzle2.hs +++ b/Day2/puzzle2.hs @@ -2,9 +2,9 @@ import Data.List (sort, inits, tails) isSafe :: [Int] -> Bool isSafe xs = (isAscending xs || isDescending xs) && maximum distances <= 3 && minimum distances >= 1 - where isAscending xs = xs == sort xs + where isAscending xs = xs == sort xs isDescending xs = xs == reverse (sort xs) - distances = map abs $ zipWith (-) xs (tail xs) + distances = map abs $ zipWith (-) xs (tail xs) removeLevel :: [Int] -> [[Int]] removeLevel xs = zipWith (++) ys zs diff --git a/Day6/puzzle1.hs b/Day6/puzzle1.hs index 7dc4037..95e79c9 100644 --- a/Day6/puzzle1.hs +++ b/Day6/puzzle1.hs @@ -53,8 +53,8 @@ visitGrid :: Position -> Direction -> Grid -> Grid visitGrid (x, y) direction grid = let newGrid = markVisited (x, y) 'X' grid (nextPosition, newDirection) = getNextPosition (x, y) direction grid in if nextPosition `isInside` newGrid - then visitGrid nextPosition newDirection newGrid - else newGrid + then visitGrid nextPosition newDirection newGrid + else newGrid main = do contents <- lines <$> readFile "day6.txt" diff --git a/Day6/puzzle2.hs b/Day6/puzzle2.hs index 37e44f9..b93409d 100644 --- a/Day6/puzzle2.hs +++ b/Day6/puzzle2.hs @@ -62,18 +62,16 @@ visitGrid :: Position -> Direction -> Grid -> Grid visitGrid (x, y) direction grid = let newGrid = markVisited (x, y) 'X' grid (nextPosition, newDirection) = getNextPosition (x, y) direction grid in if nextPosition `isInside` newGrid - then visitGrid nextPosition newDirection newGrid - else newGrid + then visitGrid nextPosition newDirection newGrid + else newGrid checkGridLoop :: Position -> Direction -> Grid -> Bool checkGridLoop startPosition direction grid = let (nextPosition, newDirection) = getNextPosition startPosition direction grid newDirectionChar = printDirection newDirection newGrid = markVisited nextPosition newDirectionChar grid - in if not $ nextPosition `isInside` grid - then False - else if getGridVal nextPosition grid == newDirectionChar - then True - else checkGridLoop nextPosition newDirection newGrid + in (nextPosition `isInside` grid) + && ((getGridVal nextPosition grid == newDirectionChar) + || checkGridLoop nextPosition newDirection newGrid) setGridObstacles :: Position -> Grid -> [Grid] setGridObstacles startPosition grid = let positions = [ (x, y) | x <- [0..(length grid - 1)], y <- [0..(length (head grid) - 1)], (x, y) /= startPosition, getGridVal (x, y) grid == 'X' ]