JSFiddle - React, Tailwind, and code Playground
CSS
html,body {
font-family: monospace;
}
JavaScript
document.body.innerHTML=g("\
.#####....\n\
.#....####\n\
###.###..#\n\
#.#...##..\n\
.####..#.#\n\
......###.\n\
..#...#..#\n\
..#...#..#").replace(/\n/g,"<br/>");
// begin code
function g(b){function f(b,c,e){return b.substr(0,c)+e+b.substr(c+1)}function e(d,c){"#"==b[c][d]&&(b[c]=f(b[c],d,"F"),1<d&&e(d-1,c),d<w-1&&e(d+1,c),1<c&&e(d,c-1),c<h-1&&e(d,c+1))}b=b.split("\n");w=b[0].length;h=b.length;for(i=0;i<w;i++)"#"==b[h-1][i]&&e(i,h-1);for(j=h-2;-1<j;j--)for(i=0;i<w;i++)if(k=j+1,"#"==b[j][i]){for(;k<h&&"F"!=b[k][i]&&"#"!=b[k][i];)k++;k--;b[j]=f(b[j],i,".");b[k]=f(b[k],i,"#")}return b.join("\n").replace(/F/g,"#")};