;;;; Based on //ideone.com/VLzcnO
(defun show (pattern)
(let* ((characters " ��└�│┌├�┘─┴┐┤┬┼")
(w (length (car pattern)))
(h (length pattern))
(m (make-array (list (+ (* h 2) 1)
(+ (* w 2) 1))
:element-type 'integer
:initial-element 0)))
(macrolet ((setf-logior (place integer)
`(setf ,place (logior ,place ,integer))))
(loop for y from 0 below h
do (loop for x from 0 below w
when (eql (elt (elt pattern y) x) #\#)
do (let ((x (* x 2))
(y (* y 2)))
(setf-logior (aref m (+ y 0) (+ x 0)) 6)
(setf-logior (aref m (+ y 0) (+ x 1)) 14)
(setf-logior (aref m (+ y 0) (+ x 2)) 12)
(setf-logior (aref m (+ y 1) (+ x 0)) 7)
(setf-logior (aref m (+ y 1) (+ x 1)) 15)
(setf-logior (aref m (+ y 1) (+ x 2)) 13)
(setf-logior (aref m (+ y 2) (+ x 0)) 3)
(setf-logior (aref m (+ y 2) (+ x 1)) 11)
(setf-logior (aref m (+ y 2) (+ x 2)) 9)))))
(loop for y from 0 below (array-dimension m 0)
do (loop for x from 0 below (array-dimension m 1)
do (princ (char characters (aref m y x))))
(terpri))))
(loop for pattern = (loop for line = (read-line t nil nil)
until (or (equal line "")
(null line))
collect line)
while pattern
do (show pattern)
when (listen t)
do (write-line "--------------------------------------------------"))