Introducción
Creo que todos están de acuerdo en que las buenas fotos deben tener un marco agradable. Pero la mayoría de los desafíos en este sitio sobre ASCII-Art solo quieren la imagen en bruto y no les importa su preservación.
¿No sería bueno si tuviéramos un programa que toma algo de arte ASCII y lo rodea con un marco agradable?
El reto
Escriba un programa que tome algo de ASCII-Art como entrada y salga rodeado de un marco agradable.
Ejemplo:
***** *** * * *** *****
se convierte
╔═══════╗ ║ ***** ║ ║ *** ║ ║ * ║ ║ *** ║ ║ ***** ║ ╚═══════╝
- Debe usar exactamente los mismos caracteres para el marco que en el ejemplo:
═ ║ ╔ ╗ ╚ ╝
- La parte superior e inferior del marco se insertan antes de la primera y después de la última línea de la entrada.
- Las partes izquierda y derecha del marco deben tener un espacio exacto para la línea más ancha de la entrada.
- Puede que no haya espacios en blanco iniciales o finales en la salida. Solo se permite una nueva línea final.
- Puede suponer que la entrada no tiene espacios en blanco iniciales innecesarios.
- Puede suponer que la entrada no tiene espacios en blanco finales en ninguna línea.
- No tiene que manejar entradas vacías.
- La entrada solo contendrá caracteres ASCII imprimibles y líneas nuevas.
Reglas
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
¡Feliz codificación!
Usando un gran ASCII-Art, que se produjo en cualquier desafío en este sitio, ¡se recomienda encarecidamente la entrada a su programa y mostrarlo con un marco agradable!
#
cuatro veces. Adaptar este enfoque aquí será difícil en el mejor de los casos , y no es viable en el peor.)Respuestas:
CJam, 45 caracteres / 52 bytes
Intentar evitar esos caros caracteres de 3 bytes fue ... interesante.
Pruébalo en línea
Explicación
fuente
Haskell, 139 bytes
Como ejemplo, estoy enmarcando el muñeco de nieve "12333321" .
Cómo funciona:
fuente
JavaScript (ES6), 138 bytes
Esto es 138 bytes en la codificación IBM866, que en el momento de la escritura todavía es compatible con Firefox, pero 152 en UTF-8.
fuente
Bash,
173171150148147 bytes,157136134133 caracteresMultilínea:
Ejecución de ejemplo:
Ejecución de muestra desde script:
fuente
...?${#2}+2:n))
en lugar de+1
, la caída de 2 plazas yprintf -v z %${n}s;
en lugar deprintf -v z " %*.s" $n
.AWK, 159 bytes
Aparentemente
awk
puede imprimir Unicode si puede descubrir cómo obtenerlo en el código.fuente
Perl, 111 caracteres
(la puntuación incluye +5 para las banderas de intérprete)
Primero, encontramos la longitud de línea más larga
$n
, ordenando numéricamente las longitudes de todas las líneas.Establecemos
$l
ser la barra de encabezado / pie de página para ser$n
repeticiones del carácter de marco horizontal.Luego imprimimos cada línea formateada para alinear a la izquierda en un campo de ancho
$n
, intercalado entre los caracteres del marco.Resultado:
fuente
Pyth, 44 caracteres (58 bytes)
Explicación
Pruébalo aquí.
fuente
PHP 5.3, 209 bytes
Esto solo funciona con la codificación OEM 860 . Es un superconjunto ASCII extendido, usado en versiones portuguesas de DOS. Como soy portugués (y me encantaba hacer estos "marcos" en Pascal) y esta es una codificación estándar, seguí adelante con esto:
Aquí está la base64:
Esta respuesta se basó en mi respuesta en: https://codegolf.stackexchange.com/a/57883/14732 (todo el trabajo pesado se hizo allí, solo tuve que moverme un poco).
fuente
22+58+11+5+11+24+66+12=209
Los últimos 12 son líneas nuevas y, como es DOS, significa CRLF, o dos bytes por línea nueva. El sitio charactercountonline no cuenta nuevas líneas. Cada uno de los glifos no ASCII tiene 1 byte en OEM 860.\n
en\r\n
, al abrir el archivo en modo ASCII / texto.Python 3, 119 bytes
126 bytesEntrada:Salida:
fuente
print"╔"+h+"╗\n"+"".join(o)+"╚"+h+"╝"
.def f(x):
n='\n';s="║ ";e=" ║";h=(x.find(n)+2)*"═";return"╔"+h+"╗"+n+s+x.replace(n,e+n+s)+e+n+"╚"+h+"╝"
<s>...</s>
). También puede agregar<!-- language-all: lang-python -->
antes de su bloque de código para agregar resaltado de sintaxis a su código.Python 2, 115 bytes
Parece más corto que 115 aquí, pero el archivo de trabajo incluye la firma de la marca BOM UTF-8 de 3 bytes, aumentando hasta 115 bytes. Si lo ejecutara en Python 3, no necesitaría la lista de materiales y se reduciría a 112 bytes.
fuente
sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' codeGolf.py
C, 290 bytes
Función de golf
B
, con dependencias; toma la entrada como char terminado en nulo *Función un poco descuidada en el programa completo
entrada
salida
C consejos de golf apreciados!
fuente