Функция floodFill Javascript - заполнение ASCII изображения

158
10 января 2020, 15:40

Дано вот такое изображение:

let bitmap = [ 
  "................**********........................", 
  "...............*..........*.......................", 
  "..........*****............*........*.............", 
  ".........*.................*.......*.*....*****...", 
  "........*................***......*...*.**.....**.", 
  "....****.................*.......*.....*.........*", 
  "..**......................*******................*", 
  ".*...............................................*", 
  ".*...............................................*", 
  "*...........****.............................****.", 
  "*..........*....*.........................***.....", 
  ".*.........*....*.......................**........", 
  "..***.......****.......................*..........", 
  ".....****......................******..*..........", 
  ".........**********************.....****.........." 
];

Нужно прописать функцию floodFill, запуская которую, все точки внутри контура из здёздочек превратятся в звёздочки, ну то есть содержимое картинки заполнится.

Для этого у меня есть пошаговая инструкция:

  1. вывести array построчно в консоль
  2. написать функцию, которая будет показывать, какой символ находится по координатам x, y
  3. написать функцию, которая будет менять символ по заданным координатам
  4. написать функцию floofFill, которая, используя вышесказанные функции, будет проверять находится ли на определенном месте звёздочка и, если нет, то заменять символ на этом месте на звёздочку.

Все эти функции я прописала, вот код:

const bitmap2string = bitmap => bitmap.join("\n"); 
 
console.log(bitmap2string(bitmap)); 
 
const showOnPosition = (x, y) =>  
  bitmap[y].charAt(x); 
   
const changeSymbol = (x, y, symbol) =>  
  bitmap[y].substr(0, x) + symbol + bitmap[y].substr(x + 1); 
 
const floodFill = (x, y) =>  
  showOnPosition(x, y) !== "*"  
    ? bitmap.map((line, i) => (i === y ? changeSymbol(x, y, "*") : line))  
    : bitmap;

Теперь следующие шаги, на которых я собственно и застряла:

  1. использовать изменённую картинку и вывести её построчно в консоль
  2. Повторить функцию, с помощью рекурсии, со сдвигом вправо. Рекурсия должна быть прервана, когда символ на позиции - звёздочка
  3. настроить собственно всю эту функцию для всей площади, чтобы при введении любых координат, например, console.log(floodFill(8, 7)) в консоли был вот такой результат:

READ ALSO
В чем ошибка в данном коде?

В чем ошибка в данном коде?

Текст задачи: You probably know the "like" system from Facebook and other pagesPeople can "like" blog posts, pictures or other items

142
Изменение значения css свойства

Изменение значения css свойства

Нужно что бы при клике значение translateX изменялось при каждом кликеСейчас событие срабатывает один раз

145
Откуда берутся значения функции

Откуда берутся значения функции

Не пойму, как так получается, что значением аргумента year становятся значения переменных carYear и personYear? Распишите пошагово, пожалуйста

128