Sommaire
Le but de ce défi est de créer une version image défaite d'un puzzle de 15 casse-tête / coulissant également appelé taquin en français.
Détails:
Soit une entrée composée de:
- une image,
- un entier
n
, - un autre entier
r
,
votre programme, ou fonction, ou tout autre élément qui convient, doit produire la même image ( c'est-à-dire la même taille et le même format) que l'entrée, mais qui a subi le processus suivant:
- divisez l'image en
n²
rectangles, - supprimer l'un de ces rectangles, au hasard,
- déplacez un nombre aléatoire de rectangles contigus de la ligne / colonne affectée par le point (2.) afin que le trou créé soit rempli et qu'un autre soit généré dans cette ligne / colonne. Ce nombre peut être
0
si le blanc est dans un coin ou un bord.
Répétez (3.) r
fois.
Clarifications:
- Si vous avez déplacé des rectangles de la ligne à l'étape (3.), vous devez déplacer les rectangles de la colonne dans la répétition suivante,
- si vous avez déplacé des rectangles de gauche à droite dans un pas de ligne, ils doivent être déplacés de droite à gauche dans le pas de ligne suivant, de même pour les colonnes de haut en bas et de bas en haut concernant les colonnes,
- vous pouvez supposer que ce
n
sera choisi de sorte qu'il divise les longueurs des côtés de l'image.
Un dernier point:
Une animation .gif
montrant l'ensemble du processus est la bienvenue.
Je propose d'utiliser l'image suivante (qui est 1024x768
), avec n=16
et r=100
comme modèle, vous pouvez utiliser n'importe quelle autre image (tant qu'elle est pertinente et conforme aux règles de SE, bien sûr).
Notez que les politiques d'échappatoires standard s'appliquent.
Il s'agit de code-golf , donc la soumission la plus courte gagne!
Puisqu'un exemple a été demandé, en voici un, fait "à la main", avec n=4
etr=1
Étapes 1 et 2
Étape 3 : ligne par ligne, 2 rectangles à gauche
la source
move a random number of contiguous rectangles
peut-il être 0 rectangles? (ce seraitRéponses:
Mathematica, 246 octets
Fonction anonyme. Contient U + F3C7, correspondant à l'
Transpose
opérateur de Mathematica . Cette fonction prend unImage
objet et retourne unImage
objet.Exemple d'animation, avec
n=16
etr=100
Après 5000 itérations:
(cliquez sur l'image pour une version plus grande)
Explication
Initialisation
Enregistrez la
Nest
fonction (opération répétée) dansn
.Enregistrez la
RandomInteger
fonction dansk
, et laReverse
fonction dansq
.Fractionner l'image
Partitionnez l'image d'entrée en (deuxième entrée) ^ 2 tuiles.
Générez deux
RandomInteger
s entre 1 et la deuxième entrée. Cela sélectionne une tuile aléatoire.Rendez cette tuile blanche. Conservez-le
i
.Déplacer les tuiles
Générez deux entiers aléatoires de 0 à 1 et stockez-les respectivement dans
t
etr
. Cela sélectionne au hasard la direction.Définir la fonction
o
: la composition det
temps d' entrée .r
.Appliquer
o
à l'entrée.Trouvez la colonne de
i
(image blanche).Soustrayez un et trouvez un entier aléatoire entre 0 et ce nombre. Cela choisit au hasard le nombre de tuiles à déplacer.
Lorsque ledit nombre de tuiles se produit avant une
i
(image blanche), changez de place.Inversez la
o
fonction et appliquez-la au résultat de l'opération ci-dessus. Cela annule et transpose l'image.Bouclage et assemblage d'images
Répétez le processus ci-dessus (troisième entrée) fois.
Rassemblez les images.
la source