Siempre quise rodear un texto con #
s, pero tengo problemas para entender lo que rodeé, por lo que en este desafío escribirás un programa para hacer exactamente eso
Ejemplos
Las entradas / salidas están separadas por una nueva línea.
###
#a#
###
a
#
#a#
#
a
###
# a #
# b c #
#######
a
b c
ABCDHIJ
E####GK
F# M #L
# N#O
P####
M
N
###A###
#C#B#o#
#d###e#
# go#
###
C o
d e
go
Especificaciones
#
s son los que "rodean" un bloque de texto#
siempre estarán adyacentes entre sí (incluso en diagonal)#
siempre formará una forma cerrada- Solo habrá una
#
forma - En el caso de una forma cóncava, los agujeros deben rellenarse con espacios.
- El espacio en blanco debe conservarse en la salida
#
s y ahí lo tienes ... y luego se puso difícil.\n
después de cada línea de entrada y pasar como parámetro de función a mi programa o qué?_M_\n___N
(usando guiones bajos en lugar de espacios debido a problemas de formato), mientras que en los ejemplos abc y Codego la salida también incluye espacios en blanco donde #s estaban en la entrada. Si solo se va a imprimir el texto rodeado por #s, la salida del ejemplo abc debería ser_a_\n_b_c_
(en lugar de__a_\n_b_c
) y la salida del ejemplo de Codego debería serCo\nde\n_go
(en lugar deC___o\nd___e\n__go
).MN
ejemplo. ya que no de debe sido un espacio adicional después M.Respuestas:
Perl,
144138132129128127126124 bytesIncluye +2 para
-p0
El código asume
\0
que no es un carácter de entrada válido (al menos dentro de#
).Ejecutar con la entrada en STDIN:
surround.pl
:El código funciona como es, pero reemplaza el
\0
y\n
por sus versiones literales para la puntuación reclamada. Observe que hay un espacioal final de la línea. El código se repite demasiadas veces, por lo que puede que tenga que esperar 30 segundos más o menos para la salida.
Explicación
Voy a hacer un relleno con
\0
parada#
desde el exterior en las direcciones ortogonales. Después de eso, cortaré los#
lados y reemplazaré todo lo que quede por espacios. Para evitar tener que manejar todas las direcciones en el relleno, rotaré repetidamente el área objetivo y solo el relleno de derecha a izquierdaEn este punto, por ejemplo
habrá sido reemplazado por:
Básicamente, todas las columnas y filas que no bordean directamente el interior se han cortado. Los caracteres externos que quedan se han reemplazado por \ 0. En la parte superior y derecha hay una capa adicional de \ 0. Entonces, todo lo que queda es la limpieza:
fuente
#
despojado. verifique mi sesión de bash: codepad.org/YbCzB4O4Javascript,
485 464 427 417 396390 bytesSi. Lo intenté. Y, aunque estoy en
485bytes, estoy ganando porque nadie más quería responder a esta pregunta. Entonces, ja!Y también, soy muy consciente de que podría jugar mucho golf, estoy cansado en este momento ... bueno, ahora estoy en 396 Gracias a Conor por la mayor parte del golf ...: D
fuente
y=z=0