Recuerdo que la gente decía que el tamaño del código debería medirse en bytes, y no en caracteres, porque es posible almacenar información con caracteres Unicode extraños, que no tienen significado visual.
¿Qué tan malo puede ser?
En este desafío, debe generar el siguiente texto de Lorem Ipsum, tomado de Wikipedia :
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Especifique el número de caracteres (no bytes) en su código. El código con el número mínimo de caracteres gana.
Su código solo debe contener caracteres Unicode válidos, como se describe aquí , es decir:
- Puntos de código hasta U + 10FFFF
- Sin sustitutos (el rango D800 – DBFF está prohibido)
- Sin caracteres FFFE y FFFF
- Sin caracteres nulos (código 0)
Si su código no se puede mostrar, proporcione una versión con caracteres ofensivos redactados y un hexdump.
Algunas notas:
- La salida debe ser una línea larga (445 caracteres). Si su sistema no puede hacer eso (por ejemplo, lo está imprimiendo en papel), envíe una aproximación más cercana. Los saltos de línea finales no importan.
- Las funciones integradas que generan texto Lorem Ipsum no están permitidas
- Especifique una codificación de texto válida para su código, si corresponde
code-golf
kolmogorov-complexity
unicode
anatolyg
fuente
fuente
=lorem()
en MS Word no sale la versión correctaRespuestas:
Dyalog APL , 123 caracteres
Todos menos el período final están empaquetados en 111 caracteres de 32 bits (UTF-32).
'.',⍨
período adjunto a80⎕DR
el 8 bits (8
caracteres) (0
) D ata R ePresentation de'
...'
los 111 caracteres Unicode U + 26F4C 9206D D7573 C6F64 32072 12074 C7465 E6F63 46365 27574 96461 37369 10676E 4696C 57320 56965 46F6D F6420 D6574 10726F 9636E 56469 52074 107465 16C20 5726F F6C6F D2065 16E67 96C61 E6175 107455 106461 D696E 96E69 57620 D6169 57120 27473 52064 37265 E2073 46174 106E6F 16C6C 106F63 F6261 107.369 97.369 107.475 1696C 107.069 52.078 F6320 46F6D F6320 16573 E7461 97544 56120 92065 57275 C6F64 92072 57220 86572 5646E 107469 6206E 10756C 57461 C6576 52074 106573 C6C69 4206D 26F6C 56.520 77.566 107.461 C6C75 17020 46169 102E72 56378 56574 97320 F2074 56.163 107.461 97.075 17.461 F6E20 27020 56469 102C74 46E75 106E69 106C75 57120 66F20 96369 56420 57265 D2074 96C6C E6120 9206D 36520 16C20 5726F, que se encuentran en el rango 12074–10756C y, por lo tanto, dentro del rango totalmente permitido del OP 10000–10FFFF.fuente
JavaScript (ES7),
326283273249243242 caracteresCómo funciona
El primer paso en mi técnica de compresión es convertir toda la cadena a minúsculas (no es obligatorio, pero se ve mejor) y reemplazar cada par de caracteres en
, exum.
(así como el espacio final por sí mismo) con su índice en la cadena más 2. Esto hace que el texto sea un número válido de base 32:El siguiente paso es convertir cada ejecución de 4 caracteres a decimal, luego obtener el carácter en ese punto de código. Esto se puede hacer con la siguiente función:
( Nota: dado que todos los dígitos son 2 o más, el valor mínimo posible de cuatro dígitos es 2222₃₂. Esto es igual a 95978₁₀ o 176EA₁₆; por lo tanto, los puntos de código nunca estarán en el rango restringido).
Y ahora tenemos nuestra cadena comprimida:
Eso es 445 caracteres comprimidos en 106 caracteres. La descompresión simplemente invierte este proceso:
n
con" , exum. ".substr(n,2)
.La única característica de ES7 utilizada es
**
. Reemplace4**8
con65536
para ejecutar en un navegador que aún no es compatible con ES7.fuente
4**8
lugar de65536
.bash + coreutils + gzip + recode, 191 caracteres
La cadena es el gzip del texto interpretado como UTF-16BE, más algunos bytes adicionales para emparejar con las mitades sustitutas no emparejadas. El tr quita las mitades suplentes adicionales.
Este archivo de script (o el shell en el que se escribe este comando) debe interpretar el texto como UTF-8, por lo que se necesita la recodificación.
fuente
Javascript (ES6),
261255254 caracteresGuardado 1 byte, gracias a ETHproductions
Descompostura
Carga útil: 148 caracteres Unicode
Código: 107 bytes
Cómo funciona
Primero eliminamos los principales
'L'
del mensaje original para que nos queden 444 = 148 * 3 caracteres.Sin el encabezado
'L'
, el conjunto de caracteres está formado por los 27 caracteres siguientes:Cada grupo de 3 caracteres está codificado como:
donde a, byc son los índices de los caracteres en el conjunto de caracteres anterior.
Esto conduce a un punto de código Unicode en el rango U + 0020 a U + 801F, que termina en algún lugar de los "Ideógrafos Unificados CJK".
fuente
05AB1E , 319 bytes
Utiliza la codificación CP-1252.
Interprete la siguiente cadena como un número base 36 y codifíquela en base 214
Después de eso nosotros
Por alguna razón, la codificación no funcionó con un 0 al final, razón por la cual se necesita un caso especial para el "." Final.
Pruébalo en línea!
fuente
Y
yZ
por1
y2
y guardar algunos bytes. ¿También quizás reorganizar los 0, 1 y 2 para deshacerse del misterioso caso especial?PHP, 247 caracteres
combinación de las 2 versiones anteriores
PHP, 261 caracteres
La codificación $ s contiene la cadena
Versión anterior PHP, 386 bytes | Caracteres
fuente
C #,
337333331 caracteres-4 caracteres reemplazando la
.
s después de "pariatur" y "laborum" por!
antes de combinar los caracteres con caracteres anchos y agregar una nueva línea final.-2 caracteres reasignando la salida var en lugar de agregar con
+=
.Cómo funciona:
La cadena de lorem ipsum se convirtió en ese desastre reemplazándola
.
con!
,por
_
lo que cuando los caracteres ascii se colocan uno al lado del otro para hacer un carácter ancho, cada carácter ancho es un solo carácter.fuente
AISLADOS, 44016 bytes
http://pastebin.com/raw/Y2aAhdpi
Empuje el código ASCII para cada carácter en la cadena Lorem Ipsum, concatene todo y salga.
fuente
MATL , 354 caracteres
Esto decodifica desde la base 94 (usando los caracteres ASCII imprimibles, excepto comillas simples; por lo tanto, solo se usan caracteres Unicode hasta 126) al alfabeto de los caracteres requeridos, formado por la mayoría de las letras minúsculas, algunas letras mayúsculas, espacio, coma y punto.
Tarda unos segundos en el compilador en línea.
Pruébalo en línea!
fuente
JavaScript (ES5), 342 caracteres
Bastante sencillo, así que estoy seguro de que hay margen de mejora. Codifiqué cada par de caracteres de salida como un solo carácter Unicode.
fuente
var
?join('')
porjoin``
. Si no, cambie su idioma aJavaScript (ES5)
y/27|0
lugar de~~(y/27)
guardar dos bytes. También puedes eliminar el0
inx.charCodeAt(0)
..split('').map(function).join('')
puede ser.replace(/./g,function)
Jelly , 300 caracteres (¿no compite?)
Pruébalo en línea!
La codificación es Jelly .
Gracias a las cadenas comprimidas, pude comprimirlo en 3 bytes.
fuente