Questa domanda riguarda le sabbie abeliane . Leggi questa sfida precedente e guarda questo video con numero di file per saperne di più.
Una catasta di sabbia abeliana di dimensioni n per n è una griglia contenente il numero 0, 1, 2 e 3 (che rappresenta il numero di granelli di sabbia). L'aggiunta di due sandpiles funziona aggiungendo prima elemento per elemento, quindi rovesciando qualsiasi elemento che vada al di sopra di 3. L'ordine in cui si rovescia non ha importanza, il risultato finale è lo stesso. Quando una cellula si ribalta il suo numero diminuisce di 4 e ciascuno dei suoi vicini diretti aumenta di 1. Ciò può causare una reazione a catena. Se una cella si trova sul bordo della griglia, tutti i grani che cadono dalla griglia mentre cadono scompaiono.
Ad esempio, sto aggiungendo due sandpiles 3 per 3 (dando una reazione a catena piuttosto estrema):
3 3 3 1 2 1 4 5 4 4 6 4 6 2 6 6 3 6 2 5 2 4 1 4 4 2 4 0 4 0 2 0 2 2 1 2
3 3 3 + 2 1 2 = 5 4 5 -> 6 0 6 -> 2 4 2 -> 3 0 3 -> 5 0 5 -> 1 4 1 -> 2 0 2 -> 4 0 4 -> 0 4 0 -> 1 0 1
3 3 3 1 2 1 4 5 4 4 6 4 6 2 6 6 3 6 2 5 2 4 1 4 4 2 4 0 4 0 2 0 2 2 1 2
In questa sfida ci interessa un sottoinsieme di tutti i possibili n da n sandpiles. Questo sottoinsieme contiene qualsiasi sandpile che è possibile ottenere aggiungendo una sandpile arbitraria alla sandpile all-3s n by n . Ad esempio, appena sopra abbiamo visto che 212 | 101 | 212
è nel sottoinsieme, perché l'abbiamo ottenuto aggiungendo qualcosa alla sandpile all-3.
Ora questo sottoinsieme ha un elemento interessante: l' elemento identità . Se si prende questo elemento e lo si aggiunge a qualsiasi altro elemento nel sottoinsieme , la somma rimane invariata. In altre parole, questa catasta di sabbia si comporta come uno zero di questo sottoinsieme. Accade solo che 212 | 101 | 212
sia l'elemento zero per il sottoinsieme di 3 per 3. Ad esempio:
2 2 2 2 1 2 4 3 4 0 5 0 2 1 2 2 2 2
2 2 2 + 1 0 1 = 3 2 3 -> 5 2 5 -> 1 6 1 -> 2 2 2
2 2 2 2 1 2 4 3 4 0 5 0 2 1 2 2 2 2
Ora questa è la tua sfida: dato n , trova l'elemento identità del sottoinsieme di n per n griglia . Emettilo assegnando un colore unico con un contrasto sufficiente a tua scelta a ciascuno di essi 0, 1, 2, 3
e producendo un'immagine n per n. Il tuo codice deve essere in grado di produrre il caso 50 per 50 in meno di un minuto su un PC moderno e ragionevole.
Ad esempio, l'elemento identità 500 per 500:
Qui è blu = 3, verde = 2, rosso = 1, bianco = 0. Ma non è necessario utilizzare questa combinazione di colori nella risposta.