Este es un problema en Luogu OJ. Decidí publicarlo aquí porque en Luogu OJ, muchas personas, incluidos yo y mi amigo, estamos interesados en cómo resolver este problema con la menor cantidad de caracteres.
Su tarea es generar el siguiente arte ASCII:
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
Este es el código de golf, por lo que gana el programa más corto.
code-golf
ascii-art
kolmogorov-complexity
Altamente radioactivo
fuente
fuente
Respuestas:
Brainfuck , 1347 bytes
¿Por qué me hago esto a mí mismo?
Pruébalo en línea!
La versión "legible":
fuente
T-SQL,
322 298288 bytesUtiliza la compresión G-Zip integrada en SQL 2016 y posterior, junto con la codificación Base64, consulte esta publicación de consejos para obtener más detalles .
En SSMS, tendrá que generar como texto después de jugar con los límites de caracteres SSMS en la configuración, o simplemente copiar y pegar la salida en la ventana de código:
EDICIONES : Guardado 24 bytes con una cadena mejor comprimida, gracias a @someone; ahorró 10 bytes con una conversión implícita usando
CONCAT
, gracias a @digscoop.fuente
H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA=
. No puedo probar esto porque no tengo idea de cómo, pero es posible que no puedas omitir el=
.=
) y ahorra 24 bytes; Supongo que mi rutina de codificación está lejos de ser ideal.DECLARE @ XML='H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA='SELECT CONCAT('',DECOMPRESS(@.value('.','varbinary(max)')))
CONCAT
truco, pero no la variable XML, ya que habría agregado 3 bytes (aunque sería más corto, en situaciones en las que ya tenía una variable)PHP ,
176155bytes-21 bytes gracias a la cadena super comprimida de Ryan Moore .
Esta versión utiliza la salida sin formato de gzdeflate y contiene datos binarios no imprimibles, por lo que el código en sí y el enlace TIO no se pueden publicar aquí, pero aquí hay un volcado hexadecimal:
Gracias a @dzaima , aquí hay un TIO que usa bash para crear y ejecutar este archivo: ¡ Pruébelo en línea!
Básicamente, esto invierte el desinflado e imprime el resultado. Guárdelo como un archivo binario y luego ejecútelo así:
php mario.php
PHP ,
239216 bytes-23 bytes gracias a la cadena super comprimida de Ryan Moore .
Pruébalo en línea!
Igual que la versión anterior, pero usó base64_encode en la salida de
gzdeflate
, por lo que el código es legible y el enlace TIO también está disponible. Básicamente, esto invierte la base64 y desinfla e imprime el resultado.fuente
Chicle , 138 bytes
Pruébalo en línea!
fuente
Gelatina ,
235213 bytesPruébalo en línea!
Utiliza una combinación de codificación de longitud de ejecución y reemplazo de secuencias de longitud 2 comunes con un solo dígito. No utiliza ninguna biblioteca de compresión estándar como gzip. En general tiene 169 bytes de datos comprimidos y 44 de código.
Explicación
Paso 1: reemplace los valores en los datos entre 17 y 39 con pares de bytes almacenados previamente
Paso 2: decodificación de longitud de ejecución y convertir a cadena
fuente
LaTeX,
452448 bytesCreado con reemplazo de bigram (y un trigrama) en lugar de programar un bucle para reemplazar múltiples símbolos consecutivos.
LaTeX, 506 bytes
Lo más probable es que haya una variante más eficiente, pero esto es lo que logré obtener a mano (no hay herramientas de compresión integradas en LaTeX ...). Creé un pequeño bucle para reemplazar secuencias consecutivas.
Salida de terminal (de ambos códigos):
fuente
Bash + coreutils + xz,
243242240 bytesfuente
Barril ,
22041012745 bytesPruébalo en línea!
Ahorró 267 bytes gracias a @Sriotchilism O'Zaic
Programa de 1012 bytes
Pruébalo en línea!
Esta es solo una codificación de longitud de ejecución de la imagen ASCII pero implementada en Keg
Viejo programa
Pruébalo en línea!
Sé que esto probablemente no ganará ninguna competencia, pero bueno, se ve bien. Literalmente simplemente escapando de cada personaje e imprimiéndolo. Quiero decir, podría jugar golf, pero ¿no te encantan los programas de arte ascii?
fuente
JavaScript (Node.js) ,
265264 bytesGuardado 1 byte gracias a @ Night2
Desinflado.
Pruébalo en línea!
JavaScript (Node.js) , 318 bytes
Substituciones consecutivas de cuerdas.
Pruébalo en línea!
JavaScript (ES7), 340 bytes
Aplastada.
Pruébalo en línea!
O aquí:
Mostrar fragmento de código
fuente
C (gcc) ,
322320318316 bytes-2 bytes gracias a ceilingcat.
Pruébalo en línea!
fuente
Bash + coreutils,
269262261 BytesUn poco trivial: aquí no pasa nada inteligente. No estoy seguro si se me permite usar gzip como este. Si no lo estoy, no tengo dudas de que alguien me gritará.
(mejor si elimino espacios / comillas sin sentido)
Gracias a @manatwork por guardar un byte
Pruébalo en línea!
fuente
echo
comando y una tubería al hacerlobase64 -d<<<...|gunzip
Python3,
921 916 752 751 539 534476 bytesY aquí hay una versión justa obligatoria. Usé un script para contar los caracteres individuales, debería ser idéntico:
Pruébalo en línea!
¡Cortesía de los chicos increíbles en los comentarios que son mucho mejores que yo!
Y aquí está el script (python3) para cualquier otro que quiera generar algún código y sea demasiado vago / eficiente para contar manualmente:
Laguna de Python3 abusada, 167 bytesDado que no se dijo nada sobre las lagunas estándar, voy a introducir esto aquí mientras pueda. A TIO no le gusta urllib por alguna razón, si alguien conoce un sitio para alojar el script, por favor dígamelo. Obviamente, un acortador de enlaces podría ahorrar algunos bytes, pero no quería seguir por ese agujero de conejo.
fuente
many people, including me and my friend, are interested about how to solve this problem within the fewest characters
, pensé que valdría la pena reírse; qué tipo de tema se ajusta al tema de programación recreativa de esta publicación y partes de este sitio.print(input())
MarioLANG ,
3287 32863285 BytesTenía que hacer esto para el tema.
Pruébalo en línea!
Esto es horrible y lo siento mucho.Los bucles pueden volverse muy caros (bytes sabios) en MarioLANG si no eres inteligente con ellos y también casi había perdido la voluntad de vivir cuando llegué tan lejos, así que Mario literalmente solo corre en línea recta, primero configurando 6 celdas de memoria con los valores ASCII correctos, luego cambiando entre ellas para que salgan en el orden correcto. Definitivamente, esto puede reducirse aún más y, si realmente te odias, te recomiendo que lo pruebes.(Se guardó un byte al eliminar los últimos iguales (personaje de piso) ya que Mario golpea la última instrucción mientras cae incluso sin ella y otro al darse cuenta de que en realidad podría golpear dos instrucciones en el otoño).
5413 bytes
Pruébalo en línea!
Este es un puerto de la respuesta del tipo aleatorio usando el convertidor Brainfuck a MarioLANG de Dennis haciendo cambios muy pequeños para guardar un par de bytes. Aunque obviamente es mucho más largo, incluye más características del lenguaje y muestra mejor cómo funciona el idioma, así que pensé en incluirlo.
fuente
Pyth , 211 bytes
Pruébalo en línea!
Método de compresión: dado que solo hay 6 caracteres, el espacio, la nueva línea y el
#.-*
reemplazo de cada uno de estos con una letra dea-f
. Luego, la longitud de ejecución codifica todo (aaaaaccc
->5a3c
etc.), luego comprime usando zlib.La cadena comprimida es
fuente
Bash , 486 bytes
Pruébalo en línea!
La cadena codificada Run-Length $ S generada por el programa no golfizado aquí: ¡ Pruébelo en línea!
Luego, las variables $ a, $ b, $ c en $ S fueron sustituidas por una inspección manual, y se tuvo que escapar una sola marca de retroceso en $ S para permitir el uso de variables.
fuente
Perl,
422396370366365 caracteresLongitud de ejecución codificada en 2 pasos: caracteres consecutivos y patrones consecutivos de varios caracteres.
Pruébalo en línea!
fuente
PHP,
608565557 bytesUtiliza GMP, la
5kJvr...
cadena se creó usando primero sustituciones para convertir el original a base56, luego GMP para convertir a base 62.Corre en línea.
fuente
Python3, 557 bytes
Ejecute la longitud codificada, luego algunas subcadenas repetidas (espacios y luego tres "#", "-" rodeados de bloques, etc.) extraídos manualmente. Definitivamente margen de mejora
Python3, 789 bytes
Diversión con generadores de números aleatorios. La imagen se codifica en longitud, luego se divide en fragmentos de 6. El primer fragmento (índices para que se imprima el símbolo) se genera a partir de un generador de números pseudoaleatorios. El segundo es una codificación base64 de los 6 números.
fuente
print(line1,line2,...,sep='\n')
C,
114210681044 bytesNo es muy bueno, pero lo logré. Básicamente, fui línea por línea y cualquier lugar donde una función más dos o más llamadas a funciones fuera más corto que el texto original, reemplacé el texto con una función.
Ahorra 99 bytes con solo usar printf directo.
Se guardaron 69 bytes eliminando los especificadores int y void , y el #include <stdio> . Ahorró otros 2 bytes declarando i como global en lugar de en el bucle for . Se guardaron otros 3 bytes cambiando printf a putchar en dos lugares. Fuera otros 21 bytes con cambios sugeridos por @Christian Gibbons: declaraciones de variables retirados al principio, cambiado la de bucle a un decremento mientras bucle, cambió '\ n' a 10 en el n () función. Se guardaron otros 3 bytes cambiando putchar (10) a put ( "") , cortesía de esta respuesta .
1143 bytes
Pruébelo en línea aquí .
Sin golf (ish)
fuente
s,a,h,d,m,
desde el principio, esos se declararán implícitamente comoint
s cuando los inicialice inmediatamente después.for(;i++>n;)
le permitirá evitari
volver a escribir dentro del ciclo.putchar('\n')
->putchar(10)
para afeitarse un par de bytes más. También parece que tienes algo extraño;
en tuz
función.i
completo. En lugar de un ciclo for, hazlowhile(n--)
x()
a la parte superior, puede tenerloc()
yo()
llamarlo para guardar algunos bytes.x()
puede tomarint*
, ya que todos los punteros tienden a tener el mismo tamaño, e imprimir usandoprintf(c)
para guardar unos pocos bytes más. Dos funciones pueden acortarse un poco:n(){p(10,1);}
yp(c,n){while(n--)x(&c);}
(supone little endian). Cada vez que llame a una función sin un argumento, puede usar la llamada a la función anterior como argumento, así:c();n();
->n(c());
.Python ,
340378 bytesConfundí la codificación en la respuesta original, aquí hay una basada en la compresión LZW. Podría volver a visitar mi respuesta original en algún momento.
Pruébalo en línea!
fuente
JavaScript puro 419 bytes (sin lib)
Compresión (1 paso: cuente cada carácter en hexadecimal, por ejemplo ,
**********
da*a
, 2 pasos: convierta dos caracteres como * 1 o # 4 en un código ascii libre de brujas de un solo carácter)Mostrar fragmento de código
Descompresión
Mostrar fragmento de código
fuente
PowerShell + tar, 265 = 9 + 256 bytes
Este script funciona con Windows y Linux. El script extrae la salida del archivo tar
t
(256 bytes). Elt
debe colocarse en el mismo directorio que el script.Pruébalo en línea!
El script de powershell para crear el archivo tar
t
:fuente
Perl con filtro: módulo sh, 672 bytes
Es largo pero también es bastante ilegible, así que pensé que califica como una respuesta de golf ...
Explicación: el filtro reemplaza
S
con" "
y un número conx(num) .
, por ejemplo, seS14
convierte en" "x14
. En Perl esto significa "imprimir un espacio 14 veces". Además, hay algo de compresión manual para secuencias que ocurren a menudo usando variables$a
-$h
.fuente
s/regex/replace/g
sintaxis de forma nativa?e
modificador de expresiones regulares que se necesita aquí para ejecutar el operador x después de la sustitución, pero ahora sí: DSOGL V0.12 , 971 bytes
Simplemente copié toda la cadena al compresor. Me di cuenta de que la cuerda no estaba muy comprimida.
Pruébalo aquí!
fuente