Intentemos jugar al golf esta pieza de arte ascii que representa a un hombre de golf:
'\. . |> 18 >> \. '. El | O >>. 'o | \. El | / \. El | / /. ' El | jgs ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^
Fuente: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm
Reglas:
- No se permite entrada
- No se permiten recursos externos
- El resultado debe ser exactamente este texto, que se muestra en una fuente monoespaciada (consola del sistema operativo, consola JS, etiqueta HTML <pre>, ...), incluido el salto de línea inicial y final.
- Se permiten comillas circundantes o comillas dobles (la consola JS agrega comillas dobles cuando genera una cadena, esto está bien)
La mejor respuesta será la que use menos caracteres en cualquier idioma.
¡Que te diviertas!
Respuestas:
CJam, 62 caracteres
Pruébalo en línea.
Prueba de funcionamiento
Cómo funciona
2G#b
convierte la cadena anterior en un número entero al considerarla un número base-65536.128b:c
convierte ese entero de nuevo en una cadena ( 110 bytes ) al considerarlo un número base-128, que~
luego ejecuta:(notación caret)
divide la cadena en pares de dos caracteres y hace lo siguiente para cada par: Pop el segundo carácter de la cadena, convertirlo en un entero y repetir la cadena
" "
tantas veces.Por ejemplo, se
".("
convierte". "
, porque el código de caracteres ASCII de(
es 40.Finalmente,
empuja la cadena
"jgs"
, el carácter se^
repite 7 veces, el carácter`
, el carácter se^
repite 51 veces y un salto de línea.fuente
Ruby, 107
Pensé que realmente trataría de "generar" la imagen en código (en lugar de usar alguna función de compresión existente):
Hay algunos caracteres no imprimibles en esa matriz literal.
Aquí está la vista hexadecimal del archivo, para mostrar también los caracteres no imprimibles:
¡Gracias a Ventero por algunas mejoras importantes! (Básicamente redujo el código en un 50%).
fuente
6.times{|i|S[i+1]=' '*55+?|}
guardar 2 caracteres.i
más de una vez. ¡Buena atrapada!S.fill{' '*55+?|}
vez ahorra unos cuantos más caracteres (que tendrán que definirS
como['']*7
, cambiar elputs
aputs p,S,p
y restar 1 a todas sus coordenadas y, aunque). Luego, usando varargs en f (def f(*p,c)
), puede guardar el[]
en las llamadas a funciones. Ah, y puedes dejarlo()
todoy,x
.S
unidimensional, puede guardar otros 55 caracteres;) Aquí está el código si no desea hacerlo usted mismo.código de máquina bash + iconv + DosBox / x86 (
104979695 caracteres)Sugiero poner esto en un script en un directorio vacío, es casi seguro que copiarlo y pegarlo en un terminal lo romperá todo; aún mejor, puedes obtener el script aquí ya hecho.
Rendimiento esperado:
Cómo funciona
La parte bash es solo un lanzador que se usa
iconv
para "descomprimir" un.com
archivo de los caracteres UTF-8 del script y lo lanza con DosBox.Tenga en cuenta que esto plantea una limitación en el contenido, ya que no todas las secuencias de entrada pueden interpretarse como UCS-2
iconv
sin quejarse; por ejemplo, por alguna razón, muchas operaciones relacionadas con elbx
registro causaron estragos dependiendo del lugar donde las usé, así que tuve que solucionar este problema varias veces.Ahora, lo de Unicode es aprovechar las reglas de "recuento de caracteres"; El tamaño real (en bytes) del script es mucho mayor que el
.COM
archivo original .El
.com
archivo extraído esy tiene 108 bytes de longitud. La fuente NASM para ello es:
Todo esto es solo un descompresor
compressed.dat
cuyo formato es el siguiente:compressed.dat
a su vez se genera usando un script Python del texto original.Todo se puede encontrar aquí .
fuente
Python, 156
Esto utiliza el formato de cadena con espacio para una compresión básica.
fuente
PHP, 147
Esto se ejecuta en la línea de comando y sale directamente a la consola:
fuente
Perl - 127
129 129130132135137145Gracias a Ventero y m.buettner por su ayuda en mi optimización RegEx.
fuente
s/\d+(?!8?>)/%$&s/rg
/\d++(?!>)/
GCC C - 203 bytes
Pensé que me divertiría con este. Esto compila en mi versión de MinGW y genera el texto esperado.
Espacio en blanco agregado para mayor claridad.
Ninguno de los sitios de pegado de código en línea permite el uso de caracteres de un solo byte fuera del rango ASCII, por lo que tuve que escapar de ellos para obtener un ejemplo cargado. Sin embargo, es idéntico. http://codepad.org/nQrxTBlX
Siempre puede verificarlo también con su propio compilador.
fuente
LOLCODE, 590 caracteres.
Porque LOLCODE es lenguaje perfik 4 golfin: es fácil 2 comprimir y ofuscar y no es detallado en absoluto.
Estoy bastante seguro de que no lo hago, pero tengo un intérprete de LOLCODE y http://repl.it parece que no es 2 funkshuns liek.
(Tranzlashun generosamente proporcionado por los robots de http://speaklolcat.com porque yo hago un lolcat de Speek)
Versión con sangría, espaciada y comentada del código (los comentarios de LOLCODE comienzan con BTW):
fuente
Python -
205203197La cadena
i
intercala los caracteres en el arte ascii con sus multiplicitas, representadas como caracteres, todo en orden inverso. Además, ahorro un poco de espacio usando '!' en lugar de 'G'i
y luego simplemente reemplazarlo.fuente
Pitón (145)
No muy original, lo sé.
fuente
Javascript ( ES6 )
193175 bytesEditar: ModPack modificado v3 para mantener nuevas líneas, usar un
for in
bucle para guardar 3 bytes y eliminar eval para la salida implícita de la consola.Usando la compresión unicode de xem: 133 caracteres
fuente
ES6, 155 caracteres
Solo intento un enfoque diferente:
Ejecuta esto en la consola JS de Firefox.
Cada carácter unicode tiene la siguiente forma: \ uD8 [ascii charcode] \ uDC [número de repeticiones].
(Cadena Unicode hecha con: http://jsfiddle.net/LeaS9/ )
fuente
.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
PHP
Método 1, más simple (139 bytes):
Usando una cadena previamente desinflada.
Método 2, codificación de corridas de espacios en letras del alfabeto (192 bytes):
fuente
PowerShell,
192188119La parte anterior contiene algunos no caracteres. Volcado hexadecimal:
El esquema de codificación es RLE con la longitud codificada por encima de los 7 bits inferiores, que son los caracteres a mostrar.
fuente
Python - 236
fuente
JS (190b) / ES6 (146b) / ES6 empaquetado (118 caracteres)
Ejecute esto en la consola JS:
JS:
ES6:
ES6 empaquetado: ( http://xem.github.io/obfuscatweet/ )
Gracias a @nderscore!
fuente
"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)
(stackexchange agrega caracteres invisibles de salto de línea después de 41 | \ )ES6, 163b / 127 caracteres
Otro enfoque más, gracias a @nderscore.
Ejecútalo en la consola de Firefox
JS (163b):
Embalado (127c):
fuente
Python, 70 caracteres UTF-16
Por supuesto, probablemente tendrá que usar la versión hexadecimal:
o la versión base64:
La primera "línea" del programa declara la codificación UTF-16. El archivo completo es UTF16, pero el intérprete de Python siempre interpreta la línea de codificación en ASCII (lo es
#coding:UTF-16BE
). Después de la nueva línea, comienza el texto UTF-16. Simplemente equivale aprint'<data>'.decode('zlib')
donde el texto es una versión desinflada de la imagen ASCII de destino. Se tuvo cuidado para asegurar que la secuencia no tuviera sustitutos (lo que arruinaría la decodificación).fuente
zip
en lugar dezlib
puede guardar un personaje.zlib
algozip
es muy útilzlib
es un número par de caracteresC # -
354332Un poco de golf:
fuente
string[] args
.Main
no necesita tener ningún argumento, aún se compilará (en contraste con Java). Quitando eso y alineandox
trae esto a 333 ya. Puede guardar otro byte eliminando el espacio entre los argumentos en elDeflateStream
ctor. Puede usar un reparto para el miembro de enumeración: lo(CompressionMode)0
que nos lleva a 324. Entonces diría que aún no es lo más corto posible ;-)bzip2, 116
Después de ver la respuesta de CJAM, pensé que esta también debería calificar.
Dudo que se requiera alguna explicación adicional. :)
fuente
C (gcc) , 190 bytes
Pruébalo en línea!
fuente
Vim, 99 pulsaciones de teclas
probablemente golfable
Explicación:
fuente