Sommario
L'obiettivo di questa sfida è quello di creare una versione immagine disfatta di un puzzle a 15 puzzle / scorrevole chiamato anche taquin in francese.
Dettagli:
Dato un input composto da:
- un'immagine,
- un numero intero
n
, - un altro numero intero
r
,
il tuo programma, o funzione, o qualsiasi altra cosa adatta, deve produrre la stessa immagine ( cioè la stessa dimensione e formato) dell'input, ma che ha subito il seguente processo:
- dividere l'immagine in
n²
rettangoli, - rimuovi uno di quei rettangoli, a caso,
- sposta un numero casuale di rettangoli contigui dalla linea / colonna interessata dal punto (2.) in modo che il foro creato sia riempito e ne venga generato un altro in questa linea / colonna. Questo numero può essere
0
se lo spazio vuoto è in un angolo o un bordo.
Ripetere (3.) r
volte.
chiarimenti:
- Se hai spostato i rettangoli dalla linea nel passaggio (3.), devi spostare i rettangoli dalla colonna nella ripetizione successiva,
- se hai spostato i rettangoli da sinistra a destra in un passaggio di riga, devono essere spostati da destra a sinistra nel passaggio di riga successivo, lo stesso per le colonne dall'alto verso il basso e dal basso verso l'alto relative alle colonne,
- puoi presumere che
n
sarà scelto in modo da dividere le lunghezze dei lati dell'immagine.
Un ultimo punto:
Un animato .gif
mostra l'intero processo è molto apprezzata.
Propongo di utilizzare la seguente immagine (che è 1024x768
), con n=16
e r=100
come modello, è possibile utilizzare qualsiasi altra immagine (purché pertinente e conforme alle regole di SE, ovviamente).
Si noti che si applicano le norme sulle scappatoie standard .
Si tratta di code-golf , quindi vince l'invio più breve!
Poiché è stato richiesto un esempio, eccone uno, realizzato "a mano", con n=4
er=1
Passaggi 1 e 2
Passaggio 3 : linea-saggio, 2 rettangoli a sinistra
move a random number of contiguous rectangles
può essere 0 rettangoli? (Sarebbe una seccatura fare in modo che il programma cambi il comportamento quando lo spazio vuoto è su un bordo / angolo)