7 , 23 caratteri, 9 byte
54340045141332401057403
Provalo online!
Questa è una sfida abbastanza difficile in una lingua che consiste interamente di cifre, ma l'ho gestita ...
Sono solo 9 byte nella codifica di 7. (A rigor di termini, sono 8⅜ byte (23 × ⅜ - ¼ perché gli ultimi due bit finali 1 possono essere omessi), ma per la prima volta, il requisito di PPCG di arrotondare per eccesso a un numero intero di byte è in realtà un vantaggio perché significa che i bit di trascinamento extra 1 sono necessari e quindi non vietati dalla domanda.) Una discarica esadecimale reversibile:
00000000: b1c0 2530 b6a0 22f8 1f ..%0.."..
La sfida principale di scrivere questo programma in 7 era giocare a golf con meno di 10 byte (come scrivere 7 senza usare 0o 1è piuttosto difficile.) Questo usa la stessa struttura del programma standard "Hello world":
5434004514133240105 7 403
5434004514133240105 comandi 0-5 aggiungono valori letterali allo spazio dati
7 avvia una nuova sezione di spazio dati
403 un altro letterale aggiunto allo spazio dati
{implicito: valuta l'ultima sezione come comandi}
4 scambia la 1a e la 2a sezione con una sezione vuota tra
6 ricostruisci i comandi che creerebbero l' output della 1a sezione
3 (+ alcuni altri effetti che non ci interessano)
In altre parole, iniziamo creando due sezioni dello spazio dati; abbiamo due letterali, ognuno dei quali invia una sequenza di comandi lì. La seconda sezione (sono spinti in stile stack quindi primo push = ultimo pop) è una sequenza di comandi abbastanza arbitraria ma è spinta usando la sequenza di comandi 5434004514133240105(producendo così la sequenza di dati 5434664574733246765; quando parlo di 7 nel testo, normalmente uso un carattere normale per un comando che spinge un valore letterale e grassetto per il valore letterale risultante corrispondente). La prima sezione viene spinta usando la sequenza di comandi 403, producendo 463. Quindi la prima sezione viene copiata nuovamente nel programma (un comportamento implicito di 7).
Il 463è ora composto di comandi (in grassetto) che fanno subito qualcosa, piuttosto che (non in grassetto) comandi che solo letterali push. 4riorganizza le sezioni per ottenere il nostro "string letterale" nella prima sezione. Quindi 0esegue l'operazione per cui 7 è più noto: prendere una sezione dello spazio dati e ricostruire la sequenza di comandi che molto probabilmente l'ha creata. Nel caso in cui la sequenza di comandi originale fosse tutta 0- 5, questo è accurato al 100% (non sorprende, poiché quei comandi trasmettono puramente i dati e quindi lasciano evidenti prove di ciò che hanno fatto), e quindi otteniamo la nostra sequenza originale 5434004514133240105. Alla fine, lo 3stampa.
Quindi la cosa rimanente da guardare qui è la codifica della stringa. Questo ha il suo linguaggio specifico del dominio:
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'
(Non esiste un "set di caratteri selezionato: lettere minuscole" nel set di caratteri "cifre e simboli comuni" - devi prima passare con un set di caratteri diverso - quindi ho dovuto usare maiuscole per giocare a golf così brevemente da inserirle sotto l'effettivo 10 -byte limit.)