Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- spreadLight :: Grid -> (Int, Int) -> Int -> Int -> Int -> Grid
- spreadLight grid _ 0 _ _ = grid
- spreadLight grid (x, y) intensity gridWidthParam gridHeightParam
- | x < 0 || x >= gridWidthParam || y < 0 || y >= gridHeightParam = grid
- | grid !! y !! x /= ' ' && grid !! y !! x /= '#' = grid
- | otherwise =
- let updatedGrid = setElement grid x y '*' -- Place light at (x, y)
- neighbors = [(x + dx, y + dy) | dx <- [-1, 1], dy <- [-1, 1], dx /= dy]
- validNeighbors = filter (\(nx, ny) -> nx >= 0 && nx < gridWidthParam && ny >= 0 && ny < gridHeightParam) neighbors
- in spreadLight (foldl (\g (nx, ny) -> spreadLight g (nx, ny) (intensity - 1) gridWidthParam gridHeightParam) updatedGrid validNeighbors) (x, y) (intensity - 1) gridWidthParam gridHeightParam
Advertisement
Add Comment
Please, Sign In to add comment