Как реализовать заливку заливкой scala с типом возврата List - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь реализовать алгоритм заливки в Scala функциональным способом, чтобы мне не приходилось использовать переменные или состояния любого типа.

Итак, что я запрашивается реализация, для определения функции, аналогичного этому, где возвращаемый тип представляет собой список пикселей, которые должны быть заполнены.

def FloodFill(replacementColor: Color, pixel: Pixel, pixels: List[Pixels] ): List[Pixels]

pixels: List[Pixel предполагается границей формы и pixel: Pixel чтобы быть где-то внутри фигуры.

До сих пор я пробовал что-то вроде этого:

def FloodFill(replacementColor: Color, pixel: Pixel, pixels: List[Pixels] ): List[Pixels]= {
  if(pixels.exists(p => p.x == pixel.x && p.y == pixel.y)) return pixels
  FloodFill(color, new Pixel(pixel.x, pixel.y-1, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
  FloodFill(color, new Pixel(pixel.x, pixel.y+1, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
  FloodFill(color, new Pixel(pixel.x-1, pixel.y, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
  FloodFill(color, new Pixel(pixel.x+1, pixel.y, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
}

... что явно не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...