Sfida vinta: il gioco Snake sta in un codice QR e pesa solo 56 byte

Una versione supercompressa del celeberrimo videogioco Snake, ridotto a soli 56 byte grazie a codice Assembly ottimizzato. Superata la sfida che mirava a inserire un intero gioco in un semplice QR code.

Jan 14, 2025 - 13:37
Sfida vinta: il gioco Snake sta in un codice QR e pesa solo 56 byte

Nel mondo della programmazione, bisognerebbe cercare di ottenere il massimo con risorse minime. Un tempo, date le limitazioni computazionali dei calcolatori, quella era un po’ la regola per tutti gli sviluppatori. Oggi, purtroppo, queste attenzioni non si trovano in molti casi al primo posto. Sebbene si tratti di un esperimento, fa notizia la pubblicazione di una versione ultraleggera del celeberrimo videogioco Snake che occupa appena 56 byte!

Il gioco Snake contenuto in un codice QR pesante appena 56 byte

L’idea nasce dalla sfida “Can you fit a whole game into a QR code?” di @itsmattkc, che ha ispirato l’autore a creare il gioco più compatto possibile, mantenendo tutte le funzionalità ludiche più divertenti.

In questo repository GitHub potete trovare il codice sorgente Assembly e il codice QR che ospita il programma che porta alla visualizzazione di questo risultato finale. Il gioco è progettato per funzionare su DOS (piattaforma x86) ma è disponibile anche una versione che non richiede BIOS, bootloader né sistemi operativi.

Ridurre un intero gioco, seppur basilare, a 56 byte non è stato un processo semplice. Ogni singolo byte del codice ha una funzione critica, e il risultato è il frutto di un’ottimizzazione estrema. Per dare un’idea del traguardo raggiunto, basti pensare che 56 byte equivalgono a 56 caratteri posti uno dopo l’altro. Inoltre, vale la pena evidenziare che un programma C compilato senza alcun codice al suo interno (usando il comando gcc -Os -w -xc - <<< "main;" su x86-64) pesa 15.776 byte, 281 volte di più del gioco Snake in veste ultracompatta.

La natura ridotta del codice ha permesso persino di incorporare l’intero gioco in un QR code, rendendo possibile la distribuzione del gioco in modo innovativo. L’iniziativa rappresenta non solo un traguardo tecnico, ma una testimonianza di come la creatività possa aiutare nel superamento di limiti apparentemente invalicabili.

Come provare Snake in locale

L’autore dello Snake supercompresso in Assembly invita gli interessati a provare ad eseguire il progetto in locale. Allo scopo, si possono utilizzare nasm e python3: il primo compila il codice Assembly in eseguibile, ottimizzando la dimensione del gioco; il secondo automatizza la costruzione e la gestione dell’ambiente di test.

nasm (Netwide Assembler) è infatti un assembler utilizzato per scrivere e compilare il codice in linguaggio macchina. Il gioco Snake è scritto in Assembly x86, un linguaggio di basso livello che interagisce direttamente con l’architettura hardware del computer. Nello specifico, nasm compila il codice scritto in Assembly (snake.asm) in un formato eseguibile. La sua efficienza in fatto di ottimizzazione è fondamentale per ottenere i 56 byte finali.

È possibile installare i requisiti su un sistema Linux di derivazione Debian con il comando apt install nasm python3 -y.

A questo punto, si può avviare lo script main.sh e accedere da browser all’indirizzo locale localhost:8000. Il server del gioco è allestito proprio grazie all’utilizzo di Python.