Formula autoreferenziale di Tupper (copiata da Wikipedia)
La formula autoreferenziale di Tupper è una formula definita da Jeff Tupper che, se rappresentata in due dimensioni in una posizione molto specifica nel piano, può essere "programmata" per riprodurre visivamente la formula stessa. È utilizzato in vari corsi di matematica e informatica come esercizio di formule grafiche.
Dov'è la funzione pavimento.
Sia k
il seguente numero di 543 cifre:
960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719
Se uno grafici l'insieme dei punti (x, y)
in 0 <= x < 106
e k <= y < k + 17
soddisfare la disuguaglianza di cui sopra, le risultanti aspetto grafico come questo (si noti che gli assi in questa trama sono stati invertiti, altrimenti l'immagine viene fuori a testa in giù):
E allora?
La cosa interessante di questa formula è che può essere utilizzata per rappresentare graficamente qualsiasi immagine 106x17 in bianco e nero. Ora, la ricerca attraverso la ricerca sarebbe estremamente noiosa, quindi c'è un modo per capire il valore k dove appare la tua immagine. Il processo è abbastanza semplice:
- Inizia dal pixel inferiore della prima colonna della tua immagine.
- Se il pixel è bianco, verrà aggiunto uno 0 al valore k. Se è nero, aggiungi un 1.
- Sposta in alto la colonna, ripetendo il passaggio 2.
- Una volta alla fine della colonna, passa alla colonna successiva e inizia dal basso, seguendo lo stesso processo.
- Dopo aver analizzato ogni pixel, converti questa stringa binaria in decimale e moltiplica per 17 per ottenere il valore k.
Che lavoro faccio?
Il tuo compito è creare un programma che possa contenere qualsiasi immagine 106x17 e produrre il suo valore k corrispondente. È possibile formulare le seguenti ipotesi:
- Tutte le immagini saranno esattamente 106x17
- Tutte le immagini conterranno solo pixel neri (# 000000) o bianchi (#FFFFFF), nulla in mezzo.
Ci sono anche alcune regole:
- L'output è semplicemente il valore k. Deve essere nella base corretta, ma può essere in qualsiasi formato.
- Le immagini devono essere lette da un PNG o PPM.
- Nessuna scappatoia standard.
Immagini di prova
[ ] dovrebbe produrre ~ 1.4946x10 542
[ ] dovrebbe produrre ~ 7.2355x10 159
[ ] dovrebbe produrre 2 1801 * 17
[ ] dovrebbe produrre (2 1802 -1) * 17
Dai un'occhiata a questo Gist per le soluzioni esatte.
Questo è code-golf , quindi vince il numero minimo di byte.
Collegamenti utili
quine
da qualche parte.