7 , 23 caractères, 9 octets
54340045141332401057403
Essayez-le en ligne!
C'est un défi assez difficile dans une langue composée uniquement de chiffres, mais j'ai réussi à le gérer…
Ceci est juste 9 octets dans le codage de 7. (À proprement parler, il s'agit de 8⅜ octets (23 × ⅜ - ¼ car les deux derniers bits 1 peuvent être omis), mais pour la première fois, l'exigence de PPCG d'arrondir à un nombre entier d'octets est en réalité un avantage, car elle signifie les 1 bits de fin supplémentaires sont nécessaires et ne sont donc pas interdits par la question.) Un vidage hexadécimal réversible:
00000000: b1c0 2530 b6a0 22f8 1f ..%0.."..
Le principal défi de l'écriture de ce programme en 7 était de le graver à moins de 10 octets (écrire 7 sans utiliser 0
ou 1
c'est assez difficile.) Ceci utilise la même structure que le programme standard "Hello world":
5434004514133240105 7 403
5434004514133240105 commandes 0-5 ajout de littéraux à un espace de données
7 créer une nouvelle section d’espace de données
403 un autre littéral ajouté à l'espace de données
{implicite: évalue la dernière section en tant que commandes}
4 permutations des 1ère et 2ème sections avec une section vide entre
6 reconstruisent les commandes qui créeraient la sortie de la 1ère section
3 (+ quelques autres effets qui ne nous intéressent pas)
En d’autres termes, nous commençons par créer deux sections de l’espace de données; nous avons deux littéraux, chacun y poussant une séquence de commandes. La deuxième section (ils sont poussés dans le style de pile, donc premier push = dernier pop) est une séquence de commandes assez arbitraire mais est poussée à l'aide de la séquence de commandes 5434004514133240105
(produisant ainsi la séquence de données 5434664574733246765
; lorsque l'on parle de 7 dans le texte, j'utilise normalement la police normale pour une commande qui pousse un littéral, et gras pour le littéral résultant correspondant). La première section est poussée en utilisant la séquence de commande 403
, produisant 463
. Ensuite, la première section est recopiée dans le programme (comportement implicite de 7).
Le 463
est maintenant composé de commandes (gras) qui font quelque chose immédiatement, plutôt que de commandes (non gras) qui poussent juste des littéraux. 4
réorganise les sections pour obtenir notre "chaîne littérale" dans la première section. Ensuite, 0
l'opération 7 qui est la plus connue est la suivante: prendre une partie de l'espace de données et reconstruire la séquence de commandes qui l'a probablement créée. Dans le cas où la séquence de commande originale était tout 0
- 5
, elle est exacte à 100% (sans surprise, car ces commandes poussent uniquement les données et laissent ainsi des preuves évidentes de ce qu'elles ont fait), et nous retrouvons donc notre séquence d' 5434004514133240105
origine. Enfin, l' 3
imprime.
La dernière chose à regarder ici est donc l'encodage de la chaîne. Cela a son propre langage spécifique au domaine:
5434004514133240105
5 change encoding: 6 bits per character
43 select character set: digits and common symbols
40 '9'
04 space
51 select character set: uppercase letters
4133240105 'B' 'Y' 'T' 'E' 'S'
(Il n'y a pas de "jeu de caractères de sélection: lettres minuscules" dans le jeu de caractères "chiffres et symboles communs" - vous devez d'abord utiliser un jeu de caractères différent - j'ai donc dû utiliser une majuscule pour jouer aussi rapidement que possible sous le 10 réel. -byte limite.)