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