Il giorno più lungo dell'anno - ecco qualcosa da perdere il tempo extra ...
Panoramica
Nota che questo non è un concorso di popolarità e non una sfida di output grafico: devi solo generare una stringa di 65.536 zero e uno. Lo snippet di stack nella parte inferiore della domanda visualizzerà questo come un'immagine in bianco e nero 256 per 256 e calcolerà il tuo punteggio ufficiale. È quindi possibile salvare l'immagine e caricarla nella risposta insieme al codice (poiché l'output della stringa non si adatta a una risposta Stack Exchange di 30.000 caratteri).
punteggio
Il punteggio di un'immagine è la somma dei punteggi dei suoi singoli pixel. Il punteggio di un singolo pixel è la somma dei punteggi parziali per ciascuna delle non ortogonali , distanza primi pixel che sono di colore opposto al pixel in azione. Il carattere di sottolineatura per ciascuno di questi pixel è 1/p
dove si p
trova la distanza principale.
Nel contesto di questa domanda, i termini hanno le seguenti definizioni:
Non ortogonale: un pixel non è ortogonale al pixel oggetto del punteggio se non è nella stessa riga e non è nella stessa colonna.
Distanza principale: un pixel si trova a una distanza primaria dal pixel che viene segnato se sono separati da una distanza euclidea che è esattamente un numero primo. In particolare, la distanza è la distanza minima misurata toroidalmente - il pixel in alto a sinistra è una distanza
sqrt(2)
dal pixel in basso a destra (tutti i 4 bordi si avvolgono).Colore opposto: un pixel ha un colore opposto al pixel da assegnare se i loro valori sono pari a 1. Cioè, il primo è 0 e il secondo è 1, oppure il primo è 1 e il secondo è 0.
Lo snippet di stack include un codice di esempio che mostra come assegnare un punteggio a un'immagine, ma non include alcuna ottimizzazione o un approccio efficiente, ma solo un codice corretto in modo che il punteggio delle immagini finali possa essere eseguito in modo coerente.
Se qualcosa nel codice non è corretto, per favore fatemi sapere nei commenti o nella chat .
JavaScript potrebbe non essere necessariamente la lingua migliore per rispondere a questa particolare sfida. Nota che il codice dello snippet non fornisce deliberatamente indizi su approcci più rapidi. Verranno introdotte solo efficienze che sono già state dimostrate in una risposta esistente.
visualizzazione
I pixel di punteggio
Per un'idea intuitiva della distribuzione dei pixel di punteggio, qui (in viola) sono riportati i pixel di distanza primi non ortogonali per pixel (128, 128) di un'immagine 256 per 256:
Un'immagine casuale
Questa è l'immagine generata casualmente dalla risposta di esempio Python 3. Ha un punteggio di 138.267,64 e ti dà qualcosa da battere.
Ingresso
Il codice non richiede input.
Produzione
Il codice dovrebbe generare una stringa di 65.536 zero e uno, che rappresentano i pixel di un'immagine in bianco e nero 256 per 256. Le cifre dovrebbero essere una stringa continua, senza separatori. Potresti trovare più facile copiare e incollare se esegui l'output in un file, ma dipende da te.
Il codice può anche generare altre informazioni che ritieni utili, a condizione che la stringa possa essere copiata e incollata nello snippet dello stack. Ad esempio, potresti voler inviare la stringa migliore ma ancora in un file e il punteggio migliore ancora a STDOUT a intervalli regolari, consentendo all'utente di scegliere quando interrompere la ricerca.
Stack Snippet
Come sottolineato da Sp3000 , lo snippet impiegava 10 minuti per calcolare un punteggio, che è un po ' troppo lento, anche per un'implementazione di riferimento deliberatamente inefficiente. Ho modificato il miglioramento suggerito da Sp3000 di pre-calcolare gli offset dei pixel per il punteggio e ora ci vogliono alcuni secondi per calcolare un punteggio.
Se usi l'output o il codice di un'altra risposta come punto di partenza per il tuo codice, ricorda di dare credito e di collegarti alla risposta di supporto. Le risposte a questa domanda non devono accreditare la risposta di esempio o il codice nella domanda.