Scrivi il programma più piccolo possibile per creare frattali affini. Puoi usare qualsiasi metodo che ritieni generi gli stessi risultati delle regole seguenti. Non devi usare alcuna idea dai metodi suggeriti!
Il tuo programma prenderà due input, il primo per definire il modello nel formato 074
composto da tre cifre da 0 a 7. Il secondo input definirà la dimensione, 3
sarà 8x8, 4
sarà 16x16 e così via (2 ^ n). Il tuo programma deve produrre il risultato corretto per tutte le dimensioni da 0 (1x1) ad almeno 5 (32x32). Se produce un output per numeri più alti, deve essere corretto, ovvero deve produrre l'output corretto fino a una determinata dimensione ma non produrre alcun output oltre tale dimensione se sarebbe sbagliato. Puoi assumere una dimensione massima di 15 (32768x32768) in quanto è già una dimensione folle per l'arte ASCII (1 GB)!
Un modello 8x8 sarà simile al seguente (regola 160
). La cifra più a sinistra sarà per il blocco A
, la cifra centrale (per favore niente pensieri maleducati!) Per il blocco B
e la cifra più a destra per il blocco C
. Per costruire il frattale, ridurlo di mezzo in entrambe le dimensioni e applicare la regola di rotazione / mirroring per il blocco. Per ridurre il motivo, dividerlo uniformemente in aree 2x2. Ci saranno 3 caratteri visibili o nessuno in ogni area. Se ci sono personaggi visibili, posiziona un personaggio nella posizione appropriata nel blocco più piccolo, altrimenti posiziona uno spazio. Le regole 0
- 3
non sono speculari, le regole 4
- 7
sono speculari. Regole 0
e 4
non sono ruotati, 1
e 5
vengono ruotati di 90 gradi in senso orario, 2
e6
sono ruotati di 180 gradi 3
e 7
ruotati di 270 gradi in senso orario. Cuci i tre blocchi insieme nell'ordine mostrato, A
nell'angolo in alto a sinistra, in B
basso a sinistra e in C
basso a destra.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Ridotto, ruotato e rispecchiato dal numero di regola:
0 1 2 3 4 5 6 7
---- ---- ---- ---- ---- ---- ---- ----
AA BAA CCB C C BCC AAB AA
A BB A CBB CC CC BBC A BB A
BBC CC A A BB BB A A CC CBB
BCC C AA AAB BAA AA C CCB
Regole:
- Non specchiato, ruotato di 90 gradi in senso orario
- Non specchiato, ruotato di 180 gradi in senso orario
- Non specchiato, ruotato di 270 gradi in senso orario
- Specchiato ma non ruotato
- Specchiato, quindi ruotato di 90 gradi in senso orario
- Specchiato, quindi ruotato di 180 gradi in senso orario
- Specchiato, quindi ruotato di 270 gradi in senso orario
- Regola 0: non speculare, non ruotato
Il mirroring viene sempre eseguito per primo e viene eseguito in diagonale attraverso l'angolo vuoto, ad es. Regola 0 vs regola 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Solo regole 1
, 6
e 0
sono utilizzati nel modello di cui sopra, in questo ordine. Dopo che le trasformazioni sono state applicate e i blocchi sono stati cuciti insieme, sembrerà il seguente, tranne per il fatto che ho distanziato ciascun blocco l'uno dall'altro di uno spazio. Il tuo codice non avrà questo spazio extra al suo interno. Se lo confronti con l'immagine "principale", vedrai che ha caratteri visibili nelle stesse posizioni.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Un altro modo per generare l'immagine senza ridurla è il seguente: Inizia con un carattere:
X
Applica le trasformazioni per ciascuno dei tre blocchi (nessuno poiché è solo un carattere) e unisci i blocchi:
X
XX
Applicare nuovamente le trasformazioni per ciascuno dei tre blocchi:
1
--
XX
X
6 0
-- --
XX X
X XX
Ricucili insieme:
XX
X
XXX
XXX
Applicare nuovamente le trasformazioni per ciascuno dei tre blocchi:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Ricucili insieme:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
È possibile utilizzare qualsiasi carattere o caratteri stampabili (0x21 - 0x7E) per la parte visibile del motivo, ma solo il carattere spazio (0x20) per gli spazi vuoti. Gli spazi finali sono consentiti ma non devono essere presenti spazi esterni all'intero quadrato (ovvero per un quadrato 8x8 non possono essere presenti caratteri oltre la colonna 8).
Esistono 512 regole diverse, ma alcune producono lo stesso modello. Come nota a margine, qualsiasi modello contenente solo 0
e 4
produrrà il triangolo Sierpinski (8 regole diverse).
Puoi opzionalmente pubblicare il tuo modello preferito e la regola che lo genera. In tal caso, assicurati che la dimensione sia almeno 3 (8x8) per distinguerla da regole simili.