import Data.List
key = '#'
blank = ' '
newLine_ [] = []
newLine_ (_:[]) = []
newLine_ (_:_:[]) = []
newLine_ list@(left:up:right:rest)
| (oneKey
&& oneBlank
) && up
== blank
= key :
(newLine
_ $ drop 1 list
) where
oneKey = left == key || right == key
oneBlank = left == blank || right == blank
newLine x = blank : ((newLine_ x) ++ [blank])
where
spacing
= replicate
lines blank
firstLine = spacing ++ [key] ++ spacing
sier prevLine
lines = prevLine :
(sier next
(lines
-1)) where next = newLine prevLine
main
= putStr $ intercalate
"\n" $ sier
[] (2^5)
aW1wb3J0IERhdGEuTGlzdAoKa2V5IDo6IENoYXIKa2V5ID0gJyMnCgpibGFuayA6OiBDaGFyCmJsYW5rID0gJyAnCgpuZXdMaW5lXyA6OiBTdHJpbmcgLT4gU3RyaW5nCm5ld0xpbmVfIFtdID0gW10KbmV3TGluZV8gKF86W10pID0gW10KbmV3TGluZV8gKF86XzpbXSkgPSBbXQpuZXdMaW5lXyBsaXN0QChsZWZ0OnVwOnJpZ2h0OnJlc3QpCiAgfCAob25lS2V5ICYmIG9uZUJsYW5rKSAmJiB1cCA9PSBibGFuayA9IGtleSA6IChuZXdMaW5lXyAkIGRyb3AgMSBsaXN0KQogIHwgb3RoZXJ3aXNlID0gYmxhbmsgOiAobmV3TGluZV8gJCBkcm9wIDEgbGlzdCkKICB3aGVyZQogICAgb25lS2V5ID0gbGVmdCA9PSBrZXkgfHwgcmlnaHQgPT0ga2V5CiAgICBvbmVCbGFuayA9IGxlZnQgPT0gYmxhbmsgfHwgcmlnaHQgPT0gYmxhbmsKCm5ld0xpbmUgOjogU3RyaW5nIC0+IFN0cmluZwpuZXdMaW5lIHggPSBibGFuayA6ICgobmV3TGluZV8geCkgKysgW2JsYW5rXSkKCnNpZXIgOjogU3RyaW5nIC0+IEludCAtPiBbU3RyaW5nXQpzaWVyIF8gbGluZXMKICB8IGxpbmVzIDwgMSA9IFtdCnNpZXIgW10gbGluZXMgPSBzaWVyIGZpcnN0TGluZSBsaW5lcwogIHdoZXJlCiAgICBzcGFjaW5nID0gcmVwbGljYXRlIGxpbmVzIGJsYW5rCiAgICBmaXJzdExpbmUgPSBzcGFjaW5nICsrIFtrZXldICsrIHNwYWNpbmcKc2llciBwcmV2TGluZSBsaW5lcyA9ICBwcmV2TGluZSA6IChzaWVyIG5leHQgKGxpbmVzLTEpKQogIHdoZXJlIG5leHQgPSBuZXdMaW5lIHByZXZMaW5lCgptYWluIDo6IElPICgpCm1haW4gPSBwdXRTdHIgJCBpbnRlcmNhbGF0ZSAiXG4iICQgc2llciBbXSAoMl41KQ==