Guest User

Untitled

a guest
Sep 7th, 2023
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. spreadLight :: Grid -> (Int, Int) -> Int -> Int -> Int -> Grid
  2. spreadLight grid _ 0 _ _ = grid
  3. spreadLight grid (x, y) intensity gridWidthParam gridHeightParam
  4. | x < 0 || x >= gridWidthParam || y < 0 || y >= gridHeightParam = grid
  5. | grid !! y !! x /= ' ' && grid !! y !! x /= '#' = grid
  6. | otherwise =
  7. let updatedGrid = setElement grid x y '*' -- Place light at (x, y)
  8. neighbors = [(x + dx, y + dy) | dx <- [-1, 1], dy <- [-1, 1], dx /= dy]
  9. validNeighbors = filter (\(nx, ny) -> nx >= 0 && nx < gridWidthParam && ny >= 0 && ny < gridHeightParam) neighbors
  10. in spreadLight (foldl (\g (nx, ny) -> spreadLight g (nx, ny) (intensity - 1) gridWidthParam gridHeightParam) updatedGrid validNeighbors) (x, y) (intensity - 1) gridWidthParam gridHeightParam
  11.  
Advertisement
Add Comment
Please, Sign In to add comment