Je me souviens de gens disant que la taille du code devrait être mesurée en octets et non en caractères, car il est possible de stocker des informations avec des caractères Unicode étranges, qui n'ont aucune signification visuelle.
Comment peut-il être mauvais?
Dans ce défi, vous devez produire le texte Lorem Ipsum suivant, extrait 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.
Veuillez spécifier le nombre de caractères (pas d'octets) dans votre code. Le code avec le nombre minimal de caractères gagne.
Votre code ne doit contenir que des caractères Unicode valides, comme décrit ici , c'est-à-dire:
- Le code pointe jusqu'à U + 10FFFF
- Pas de substituts (la gamme D800 – DBFF est interdite)
- Aucun caractère FFFE et FFFF
- Aucun caractère nul (code 0)
Si votre code ne peut pas être affiché, fournissez une version avec les caractères incriminés et un hexdump.
Quelques notes:
- La sortie doit être une longue ligne (445 caractères). Si votre système ne peut pas faire cela (par exemple, vous l'imprimez sur du papier), sortez une approximation la plus proche. Les sauts de ligne de fin n'ont pas d'importance.
- Les fonctions intégrées qui génèrent du texte Lorem Ipsum ne sont pas autorisées
- Veuillez spécifier un encodage de texte valide pour votre code, le cas échéant
code-golf
kolmogorov-complexity
unicode
anatolyg
la source
la source
=lorem()
dans MS Word ne produit pas la bonne versionRéponses:
Dyalog APL , 123 caractères
Tous, sauf la période finale, sont regroupés en 111 caractères 32 bits (UTF-32).
'.',⍨
période annexée à80⎕DR
le caractère 8 bits (8
) (0
) D ata R représentation de'
...'
les 111 caractères 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 107465 F6C6F E6656166 D16656 46174 106E6F 16C6C 106F63 F6261 107369 97369 107475 1696C 107.069 52.078 F6320 46F6D F6320 16573 E7461 97.544 56.120 92.065 57.275 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 56.378 56.574 97.320 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, qui tombent tous dans la plage 12074–10756C et donc dans la plage autorisée 10000–10FFFF de l'OP.la source
JavaScript (ES7),
326283273249243242 caractèresComment ça fonctionne
La première étape de ma technique de compression consiste à convertir la chaîne entière en minuscules (non obligatoire, mais semble meilleure) et à remplacer chaque paire de caractères dans
, exum.
(ainsi que l'espace de fin par lui-même) par son index dans la chaîne plus 2. Cela fait du texte un nombre de base 32 valide:L'étape suivante consiste à convertir chaque exécution de 4 caractères en décimal, puis à obtenir le caractère à ce point de code. Cela peut être fait avec la fonction suivante:
( Remarque: Étant donné que tous les chiffres sont 2 ou plus, la valeur minimale possible de quatre chiffres est 2222₃₂. Ceci est égal à 95978₁₀ ou 176EA₁₆; par conséquent, les points de code ne seront jamais dans la plage restreinte.)
Et maintenant, nous avons notre chaîne compressée:
C'est 445 caractères compressés en 106 caractères. La décompression inverse simplement ce processus:
n
par" , exum. ".substr(n,2)
.La seule fonctionnalité ES7 utilisée est
**
. Remplacez4**8
par65536
pour exécuter dans un navigateur qui ne prend pas encore en charge ES7.la source
4**8
place de65536
.bash + coreutils + gzip + recode, 191 caractères
La chaîne est le gzip du texte interprété comme UTF-16BE, plus quelques octets supplémentaires à associer aux moitiés de substitution non appariées. Le tr enlève les moitiés de substitution supplémentaires.
Ce fichier de script (ou le shell dans lequel cette commande est tapée) devrait interpréter le texte comme UTF-8, c'est pourquoi le recodage est nécessaire.
la source
Javascript (ES6),
261255254 caractères1 octet enregistré grâce à ETHproductions
Panne
Charge utile: 148 caractères Unicode
Code: 107 octets
Comment ça fonctionne
Nous supprimons d'abord le premier
'L'
le début du message d'origine afin que nous nous retrouvions avec 444 = 148 * 3 caractères.Sans le début
'L'
, le jeu de caractères est composé des 27 caractères suivants:Chaque groupe de 3 caractères est codé comme suit:
où a, b et c sont les indices des caractères du jeu de caractères ci-dessus.
Cela conduit à un point de code Unicode dans la plage U + 0020 à U + 801F, se terminant quelque part dans les «idéogrammes unifiés CJC».
la source
05AB1E , 319 octets
Utilise l'encodage CP-1252.
Interpréter la chaîne suivante comme un nombre de base 36 et encoder en base 214
Après cela nous
Pour une raison quelconque, l'encodage ne fonctionnait pas avec un 0 à la fin, c'est pourquoi nous avons besoin d'un cas spécial pour le "." Final.
Essayez-le en ligne!
la source
Y
etZ
par1
et2
et économiser quelques octets. Peut-être aussi réorganiser les 0, 1 et 2 pour se débarrasser du mystérieux cas spécial?PHP, 247 caractères
combinaison des 2 versions précédentes
PHP, 261 caractères
Le codage $ s contient la chaîne
Ancienne version PHP, 386 octets | Caractères
la source
C #,
337333331 caractères-4 caractères en remplaçant les
.
s après "pariatur" et "laborum" par!
avant de combiner les caractères en caractères larges et en ajoutant une nouvelle ligne de fin.-2 caractères en réaffectant la sortie var plutôt qu'en ajoutant avec
+=
.Comment ça fonctionne:
La chaîne lorem ipsum a été convertie dans ce gâchis en la remplaçant
.
par!
,avec
_
donc lorsque les caractères ascii sont placés les uns à côté des autres pour créer un caractère large, chaque caractère large est un seul caractère.la source
ISOLADOS, 44016 octets
http://pastebin.com/raw/Y2aAhdpi
Poussez le code ASCII pour chaque caractère de la chaîne Lorem Ipsum, concaténez tout et sortez.
la source
MATL , 354 caractères
Cela décode de la base 94 (en utilisant les caractères ASCII imprimables sauf les guillemets simples; seuls les caractères Unicode jusqu'à 126 sont utilisés) jusqu'à l'alphabet des caractères requis, formé de la plupart des lettres minuscules, de certaines lettres majuscules, de l'espace, de la virgule et du point.
Cela prend quelques secondes dans le compilateur en ligne.
Essayez-le en ligne!
la source
JavaScript (ES5), 342 caractères
Assez simple, donc je suis sûr qu'il y a place à amélioration. J'ai encodé chaque paire de caractères de sortie en un seul caractère Unicode.
la source
var
?join('')
parjoin``
. Sinon, changez votre langue enJavaScript (ES5)
y/27|0
plutôt que~~(y/27)
d'économiser deux octets. Vous pouvez également supprimer l'0
enx.charCodeAt(0)
..split('').map(function).join('')
peut être.replace(/./g,function)
Jelly , 300 caractères (non compétitif?)
Essayez-le en ligne!
L'encodage est Jelly .
Grâce aux chaînes compressées, j'ai pu le compresser de 3 octets.
la source