Desafío simple: intente generar el siguiente texto en el menor número de bytes posible:
the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything
El dibujo original contiene 332 caracteres.
Reglas
- No hay entrada o una entrada no utilizada.
- La salida puede estar en cualquier formato razonable (cadena, lista de cadenas, matriz de caracteres, etc.).
- Puede usar mayúsculas en lugar de minúsculas para el dibujo si así lo prefiere.
- Se permiten espacios en blanco al final y líneas nuevas.
- Este es el código de golf , ¡así que puede ganar el programa / función más corto para cada idioma!
Notas
- Esto ha sido identificado como un posible duplicado de No somos ajenos al código de golf, usted conoce las reglas, y yo también . Esa pregunta era sobre buscar y reemplazar texto. Aquí tiene que dibujar una forma usando un texto dado, y al menos dos de las respuestas actuales demuestran que los idiomas de golf pueden vencer a los algoritmos de compresión simples en este caso.
42
con*
caracteres y luego los reemplacé con el texto, que encajaba perfectamente. No tuve que modificar el dibujo original para que la oración encajara. ¿Coincidencia?Respuestas:
Python 3 ,
224 220 219 215 211194 bytes15 bytes: enif(j%27<1)*j
lugar deif j*(j%27<1)
una declaración de impresión simplificada.7*'0'
Pruébalo en línea!
Explicación:
Utiliza compresión base 36 para comprimir este número binario (excluida la nueva línea)
Básicamente tenemos dos contadores
i
yj
. Al encontrarnos1
, imprimimos un espacio; De lo contrario, si0
se encuentra imprimimos la siguiente letra de la cadena y aumentamosi
.j
aumenta para cada uno0 or 1
. También imprimimos nuevas líneas cuando es necesario, es decir, cuando sej%27<1
hace realidad.fuente
if j*(j%27<1):
aif(j%27<1)*j:
Python 2 ,
235218213 bytesPruébalo en línea!
Cambió a una base 36 codificada int de las posiciones de las letras como se sugiere en la pregunta.
Reemplaza a cada personaje uno a la vez.
Editar: Parece que officialaimm utilizó la base 36 antes que yo.
fuente
Chicle , 125 bytes
Pruébalo en línea!
fuente
05AB1E ,
837974 bytes-4 bytes gracias a Erik the Outgolfer
Emite una lista de cadenas para guardar un byte.
Pruébalo en línea!
Explicación
2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm
es la representación base 255 del número decimal:Que codifica carreras de
1
s y0
s respectivamente, incluso los índices son los1
s y los desniveles desiguales los0
s. Esto evalúa el número binario:Código
fuente
"ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253ö
con•—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•
por -4.•
sirven :)Python 2 ,
220213212bytes-1 byte por conmutación
()*4
para%39
de @officialaimmPruébalo en línea!
Este es un enfoque diferente de las otras respuestas de Python. Utilizo una codificación
hexadecimal debase 36 (7 bytes guardados) de una codificación deestilo de imagenRLE de estiloPNGde la imagen (una cadena de dígitos que indica el número de píxeles repetidos consecutivos).La cadena de dígitos es :
Luego repito esos dígitos e imprimo alternativamente ese número de '' s o caracteres de la paleta ('theanswer ...'). Cuando se repite más de 9 caracteres, simplemente agregaría un 0 y luego el resto.
fuente
"theanswertolifetheuniverseandeverything"[w%39]
TIOSOGL V0.12 , 74 bytes
Pruébalo aquí!
fuente
Permítame responder mi propia pregunta ...
Carbón ,
140126121bytesPruébalo en línea!
Tienes aquí un enlace a la versión detallada más cercana.
Explicación (ver versión detallada para más detalles):
)%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.
cadena (68 bytes, 48 bytes comprimidos) es una representación de la codificación RLE del dibujo. Cada código de caracteres menos 34 es el número de espacios (posiciones pares) o el número de caracteres de texto (posiciones impares) para imprimir consecutivamente.gtheanswertolifetheuniverseandeverythin
cadena (39 bytes, 27 bytes comprimidos) cada vez que se necesita escribir un carácter que no sea un espacio en blanco. Cuando verifico la longitud de una lista para obtener el siguiente carácter y esa lista comienza con un elemento, el último carácter de la cadena se escribe en la primera posición.Expresiones de gratitud
fuente
Assign(Minus(1, c), c);
entonces puedes usarif (c) { ... } else Print(" ");
.for (68)
yAtIndex("...", i)
luego puede usarModulo(i, 2)
en su lugar y no necesitac
nada.if (Not(Modulo(Length(PushOperator(u, w)), 27)))
entonces tampoco lo necesitaa
.AtIndex
hace una automáticaModulo
así queModulo(b, 39)
puede ser justob
.u
es una variable predefinida que es solo una matriz vacía (se guarda usandoA⟦⟧υ
). Cada vez que empujas algo, su longitud aumenta en 1. Esto es más corto que una asignación explícita para incrementar.JavaScript (ES6),
207205203 bytesDevuelve una matriz de cadenas con algunos espacios finales.
fuente
Retina , 183 bytes
Pruébalo en línea! Explicación: La primera etapa agrega la codificación RLE del mapa de bits de la celda y el texto, que la segunda etapa duplica a la longitud correcta, mientras que la tercera etapa decodifica la codificación RLE. La cuarta etapa luego mueve el texto a las celdas.
fuente
Jalea , 83 bytes
Pruébalo en línea!
Cómo funciona
fuente
Agregar ++ , 1398 bytes
Pruébalo en línea!
Parece que la codificación es la forma más corta (al menos en Add ++)
fuente
Vim, 239 pulsaciones de teclas
Saltos de línea agregados para "legibilidad"
Explicación
La primera línea se extrae
life, the universe and everything
de una página de ayuda, que es un byte más corto que simplemente escribirlo. Luego lo convierte en esto:La segunda línea divide la cadena en:
Y luego la línea final sangra para hacer:
fuente
Jalea , 76 bytes
Pruébalo en línea!
fuente
Retina , 185 bytes
Pruébalo en línea!
fuente
JavaScript, 215 bytes
solución basada en guest44851
fuente
Ruby , 216 bytes
Pruébalo en línea!
Explicación Similar a las soluciones de Python, pero utilicé Run Length Encoding antes de convertir a la base 36. Por lo tanto, la cadena de datos tiene solo 54 caracteres en lugar de 68.
Pero aún así terminó por más tiempo, con suerte, se puede jugar más.
fuente
Un puerto de mi respuesta de carbón :
C # (.NET Core) , 229 bytes
Pruébalo en línea!
fuente
C (gcc) ,
220219217213210 bytes-1 byte gracias a ceilingcat
-3 bytes gracias a Jerry Jeremiah
Pruébalo en línea!
fuente
JavaScript,
265237219 bytesPocos bytes apagados gracias a @tsh.
JSFiddle
fuente
join
Pyth , 121 bytes
Esto contenía demasiados bytes que no pude mostrar en TIO, así que aquí hay un hexdump:
Pruébalo en línea!
Puede agregar una llamada a
wc
oxxd
en el script bash para ver la longitud del byte o el hexdump que produje anteriormente.Curiosamente, este programa muestra un error menor (?) En Pyth. Los bytes de retorno de carro (0x0d) se leen como bytes de nueva línea (0x0a) cuando están en literales de cadena. Esto me obliga a agregar 6 bytes:
X ... ]T]13
para reemplazar los diez incorrectos con trece.De lo contrario, la idea detrás de este código era bastante simple: registrar cada posición donde se produce una serie de espacios en blanco. Luego, empareje cada uno de esos índices con el número de espacios en esa ejecución. Luego, reconstruya la cadena original repitiendo la frase cuatro veces, luego insertando en las ubicaciones correctas. Si el número de espacios registrados fue cero, se inserta una nueva línea.
fuente
Java (OpenJDK 8) ,
258252251 bytesPruébalo en línea!
Es una implementación bastante ingenua. Primero una máscara, para los caracteres impresos, luego un rollo sobre el texto hasta que esté listo.
fuente
int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}
.Javascript, dibujo aproximado. 319 bytes
^ por lo que vale, no mucho en realidad, pero antes de eliminar el código fallido.
fuente