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 0
o 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. 4
riorganizza le sezioni per ottenere il nostro "string letterale" nella prima sezione. Quindi 0
esegue 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 3
stampa.
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.)