Lembro-me de pessoas dizendo que o tamanho do código deve ser medido em bytes, e não em caracteres, porque é possível armazenar informações com caracteres Unicode estranhos, que não têm significado visual.
Quão ruim pode ser?
Neste desafio, você deve produzir o seguinte texto de Lorem Ipsum, retirado da 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 o número de caracteres (não bytes) no seu código. Código com o número mínimo de caracteres ganha.
Seu código deve conter apenas caracteres Unicode válidos, conforme descrito aqui , ou seja:
- O código aponta até U + 10FFFF
- Nenhum substituto (o intervalo D800 – DBFF é proibido)
- Nenhum caractere FFFE e FFFF
- Nenhum caractere nulo (código 0)
Se o seu código não puder ser exibido, forneça uma versão com os caracteres incorretos redigidos e um hexdump.
Algumas notas:
- A saída deve ser uma linha longa (445 caracteres). Se o seu sistema não puder fazer isso (por exemplo, você estiver imprimindo em papel), imprima uma aproximação mais próxima. As quebras de linha à direita não importam.
- Funções internas que geram texto Lorem Ipsum não são permitidas
- Especifique uma codificação de texto válida para o seu código, se relevante
code-golf
kolmogorov-complexity
unicode
anatolyg
fonte
fonte
=lorem()
, em MS Word não emite a versão corretaRespostas:
Dyalog APL , 123 caracteres
Todos, exceto o período final, são compactados em 111 caracteres de 32 bits (UTF-32).
'.',⍨
período anexado a80⎕DR
a 8 bits (8
caracteres) (0
) D ATA R ePresentation de'
...'
os 111 caracteres Unicode U + 26F4C 9206D D7573 C6F64 32072 12074 C7465 E6F63 46365 27574 96461 37369 10676E 4696C 57320 F6420 56965 46F6D D6574 10726F 9636E 56469 52074 16C20 5726F 10746520564920565465 46174 106E6F 16C6C 106F63 F6261 107369 97369 107475 1696C 107069 52078 F6320 46F6D F6320 16573 E7461 97544 56120 92065 57275 C6F64 92072 57220 86572 5646E 107469 6206E 10756C 57461 C6576 52074 106573 C6C69 4206D 26F6C 56520 77566 107461 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 estão todos na faixa de 12074 a 10756C e, portanto, dentro da faixa permitida do OP 10000 a 10FFFF.fonte
JavaScript (ES7),
326283273249243242 caracteresComo funciona
A primeira etapa da minha técnica de compactação é converter toda a cadeia de caracteres em minúsculas (não obrigatória, mas parece melhor) e substituir cada par de caracteres
, exum.
(e também o espaço à direita) pelo seu índice na cadeia mais 2. Isso torna o texto um número base-32 válido:O próximo passo é converter cada execução de 4 caracteres em decimal e obter o caractere nesse ponto de código. Isso pode ser feito com a seguinte função:
( Nota: Como todos os dígitos são 2 ou mais, o valor mínimo possível de quatro dígitos é 2222₃₂. Isso é igual a 95978₁₀ ou 176EA₁₆; portanto, os pontos de código nunca estarão no intervalo restrito.)
E agora temos nossa string compactada:
São 445 caracteres compactados em 106 caracteres. A descompressão simplesmente inverte esse processo:
n
por" , exum. ".substr(n,2)
.O único recurso do ES7 usado é
**
. Substitua4**8
por65536
para executar em um navegador que ainda não suporta o ES7.fonte
4**8
vez de65536
.bash + coreutils + gzip + recode, 191 caracteres
A string é o gzip do texto interpretado como UTF-16BE, além de alguns bytes extras para emparelhar com as metades substitutas não emparelhadas. O tr retira as metades substitutas extras.
Esse arquivo de script (ou o shell no qual esse comando é digitado) deve interpretar o texto como UTF-8, e é por isso que a recodificação é necessária.
fonte
Javascript (ES6),
261255254 caracteresEconomizou 1 byte, graças à ETHproductions
Demolir
Carga útil: 148 caracteres Unicode
Código: 107 bytes
Como funciona
Primeiro removemos os principais
'L'
da mensagem original para ficar com 444 = 148 * 3 caracteres.Sem o líder
'L'
, o conjunto de caracteres é composto pelos 27 caracteres a seguir:Cada grupo de 3 caracteres é codificado como:
onde a, bec são os índices dos caracteres no conjunto de caracteres acima.
Isso leva a um ponto de código Unicode no intervalo U + 0020 a U + 801F, terminando em algum lugar nos "CJK Unified Ideographs".
fonte
05AB1E , 319 bytes
Usa a codificação CP-1252.
Interprete a seguinte sequência como um número base 36 e codifique na base 214
Depois disso nós
Por alguma razão, a codificação não funcionou com um 0 no final, e é por isso que é necessário um caso especial para o final ".".
Experimente online!
fonte
Y
eZ
por1
e2
e economizar alguns bytes. Talvez também reorganize os 0, 1 e 2 para se livrar do misterioso caso especial?PHP, 247 caracteres
combinação das 2 versões anteriores
PHP, 261 caracteres
A codificação $ s contém a sequência
Versão antiga PHP, 386 bytes | Caracteres
fonte
C #,
337333331 caracteres-4 caracteres substituindo
.
s após "pariatur" e "laborum" por!
antes de combinar os caracteres com caracteres largos e adicionar uma nova linha à direita.-2 caracteres reatribuindo a var de saída em vez de anexar com
+=
.Como funciona:
A cadeia de caracteres do lorem ipsum foi convertida nessa bagunça substituindo
.
por!
,por
_
isso, quando os caracteres ascii são colocados próximos um do outro para formar um caractere amplo, cada caractere amplo é um único caractere.fonte
ISOLADOS, 44016 bytes
http://pastebin.com/raw/Y2aAhdpi
Empurre o código ASCII para cada caractere na sequência Lorem Ipsum, concatene tudo e faça a saída.
fonte
MATL , 354 caracteres
Isso decodifica da base-94 (usando os caracteres ASCII imprimíveis, exceto aspas simples; portanto, apenas caracteres Unicode até 126 são usados) para o alfabeto de caracteres necessários, formado pela maioria das letras minúsculas, algumas letras maiúsculas, espaço, vírgula e ponto final.
Demora alguns segundos no compilador online.
Experimente online!
fonte
JavaScript (ES5), 342 caracteres
Bem simples, então tenho certeza de que há espaço para melhorias. Codifiquei cada par de caracteres de saída como um único caractere Unicode.
fonte
var
?join('')
porjoin``
. Caso contrário, mude seu idioma paraJavaScript (ES5)
y/27|0
vez de~~(y/27)
salvar dois bytes. Você também pode remover o0
nox.charCodeAt(0)
..split('').map(function).join('')
pode ser.replace(/./g,function)
Gelatina , 300 caracteres (não-concorrente?)
Experimente online!
A codificação é geléia .
Graças a seqüências de caracteres compactadas, consegui compactá-lo em 3 bytes.
fonte