Scrivi un programma o una funzione che accetta tre numeri interi, una larghezza w, un'altezza he un conteggio dei passi s. Disegnerai una camminata casuale non autointersecante slungo su un'immagine 5*wper 5*hpixel in cui ogni cella di 5 per 5 pixel è vuota (beige puro) o una di queste dodici semplici "pipe":
L'immagine sopra è ingrandita per mostrare i dettagli. Ecco i tubi di dimensioni reali:
(Le linee grigie servono solo a separare i tipi di tubo.)
La camminata casuale sarà un singolo percorso di tubo continuo che inizia in corrispondenza di un punto finale del tubo (uno dei quattro tipi di tubo in basso) e termina in un altro punto finale del tubo.
Inizia con un vuoto wdih griglia e scegli casualmente una cella come punto di partenza. Quindi scegli una delle quattro direzioni in modo casuale per iniziare e disegnare il punto finale del tubo corrispondente. Questa cella iniziale segna il primo passo della tua camminata e ogni volta che disegni una nuova cella o ne sovrascrivi una esistente, conta come un altro passo fatto.
Ora, ripetutamente, scegli casualmente di andare a destra, a sinistra o dritto, disegnando la cella del tubo appropriata se la direzione scelta è valida. Tornare indietro e scegliere nuovamente se una direzione non è valida fino a quando non sviene formato il percorso completo . Il percorso dovrebbe terminare con un endpoint del tubo, che potrebbe trovarsi in qualsiasi punto della griglia, a seconda del percorso seguito dal percorso.
È molto importante notare che solo le due celle a tubo diritto possono essere sovrascritte e solo dalla cella a tubo diritto con orientamento opposto, il risultato è una cella di intersezione. Altrimenti, tutti i tubi devono essere posizionati in celle vuote.
Quando viene disegnata un'intersezione, la parte del percorso che si trova più lontano dalla cella iniziale deve essere disegnata in alto.
Spetta a te se la griglia ha o meno condizioni al contorno periodiche (PBC), ovvero se un tubo che esce da un lato della griglia uscirà dall'altro lato. Senza PBC il confine della griglia conta come una barriera che puoi incontrare proprio come le altre pipe.
Casi speciali
- Quando
sè 0 senza tubi devono essere compilati e l'uscita dovrebbe essere uno sbozzato5*wda5*himmagine (cioè tutto beige). Quando
sè 1 un moncone monotubodovrebbe essere disegnato nella cella iniziale scelta casualmente.
Altri dettagli
- Puoi supporre che
ssia al massimow*hquindi un percorso sarà sempre possibile. (Anche se sono possibili percorsi più lunghi a causa delle intersezioni.) wehsarà sempre positivo.- Tutte le scelte casuali devono essere uniformemente casuali. ad es. non dovresti evitare di fare intersezioni quando sono possibili anche se questo semplifica il problema. Sono consentiti generatori di numeri pseudo-casuali.
- È possibile utilizzare tre colori visivamente distinti al posto del nero, del blu e del beige.
- Le tue immagini di output possono essere ingrandite in modo che siano realmente
5*w*kdi5*h*kpixel in cuikè un numero intero positivo. (Si consiglia di ingrandire qualsiasi esempio che pubblichi anche se haik1.) - È possibile utilizzare qualsiasi formato di file immagine lossless comune e l'immagine può essere salvata in un file, visualizzata o emessa grezza su stdout.
Vince il codice più breve in byte.
Esempi
(Tutto ampliato del 500%.)
Se l'ingresso è w=2, h=1, s=0allora l'uscita sarà sempre:
Se l'input è w=2, h=1, s=1allora l'output sarà una di queste immagini con uguale probabilità:
Se l'ingresso è w=2, h=1, s=2allora l'uscita sarà
o forse
se si presume che la griglia abbia PBC.
(Notare che l'avvio di un percorso del genere
renderebbe impossibile un secondo passo.)
Ecco alcune possibili uscite per w=3, h=2, s=6, supponendo PBC:
Ecco un possibile output per w=3, h=3, s=9, supponendo PBC:
Si noti che il percorso non ha dovuto coprire tutte le celle a causa dell'intersezione che conta come due passaggi. Inoltre, possiamo dedurre che l'endpoint dell'angolo era la cella iniziale poiché il cavalcavia dell'intersezione deve essere stato disegnato in seguito. Quindi possiamo dedurre la sequenza di scelte casuali fatte:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
Infine, ecco alcuni esempi di w=4, h=5, s=20e w=4, h=5, s=16:
You will be drawing a non-self-intersecting random walk... è autointersecante o no?

















