Improve code

This commit is contained in:
daniele 2024-12-06 19:55:10 +01:00
parent a94312463b
commit 1b5a8ee458
Signed by: fuxino
GPG Key ID: 981A2B2A3BBF5514
3 changed files with 9 additions and 11 deletions

View File

@ -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

View File

@ -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"

View File

@ -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' ]