19 lines
738 B
Haskell
19 lines
738 B
Haskell
module Part1 where
|
|
|
|
import Commons
|
|
|
|
|
|
isSymbolNeighbor :: [Coordinates] -> [Coordinates] -> Bool
|
|
isSymbolNeighbor [] _ = False
|
|
isSymbolNeighbor (h: t) symbolsCoordinates = h `elem` symbolsCoordinates || isSymbolNeighbor t symbolsCoordinates
|
|
|
|
getActualPartNumbers :: [NumberPart] -> [Coordinates] -> [NumberPart]
|
|
getActualPartNumbers [] _ = []
|
|
getActualPartNumbers (h: t) symbolsCoordinates
|
|
| isSymbolNeighbor (neighbors h) symbolsCoordinates = h: getActualPartNumbers t symbolsCoordinates
|
|
| otherwise = getActualPartNumbers t symbolsCoordinates
|
|
|
|
getActualPartValuesNumbersFromEngine :: Engine -> [Int]
|
|
getActualPartValuesNumbersFromEngine engine =
|
|
map value (getActualPartNumbers (numbers engine) (map coordinates (symbols engine)))
|