Zusammenfassung
Das Ziel dieser Herausforderung ist es, eine ungelöste Bildversion eines 15-Puzzle- / Schiebepuzzles zu erstellen, das auf Französisch auch als Taquin bezeichnet wird .
Einzelheiten:
Bei einer Eingabe bestehend aus:
- ein Bild,
- eine ganze Zahl
n
, - eine andere ganze Zahl
r
,
Ihr Programm oder Ihre Funktion oder alles andere, was passt, muss dasselbe Bild ( dh dieselbe Größe und dasselbe Format) wie die Eingabe ausgeben , das jedoch den folgenden Prozess durchlaufen hat:
- Teilen Sie das Bild in
n²
Rechtecke, - entferne eines dieser Rechtecke nach dem Zufallsprinzip,
- Verschieben Sie eine zufällige Anzahl zusammenhängender Rechtecke von der von Punkt (2.) betroffenen Linie / Spalte, damit das erzeugte Loch gefüllt wird und ein weiteres in dieser Linie / Spalte erzeugt wird. Diese Zahl kann angegeben werden,
0
wenn sich der Rohling in einer Ecke oder Kante befindet.
Wiederholen Sie (3.) r
mal.
Klarstellungen:
- Wenn Sie in Schritt (3.) Rechtecke aus der Zeile verschoben haben, müssen Sie in der nächsten Wiederholung Rechtecke aus der Spalte verschieben.
- Wenn Sie Rechtecke in einem Zeilenschritt von links nach rechts verschoben haben, müssen sie im nächsten Zeilenschritt von rechts nach links verschoben werden. Dies gilt auch für Spalten von oben nach unten und von unten nach oben.
- Sie können davon ausgehen, dass
n
dies so gewählt wird, dass die Länge der Seiten des Bildes geteilt wird.
Ein letzter Punkt:
Eine animierte .gif
Darstellung des gesamten Prozesses ist sehr willkommen.
Ich schlage vor, das folgende Bild (das ist 1024x768
) zu verwenden, mit n=16
und r=100
als Modell können Sie jedes andere Bild verwenden (sofern es relevant ist und den SE-Regeln entspricht, natürlich).
Beachten Sie, dass Richtlinien für Standardlücken gelten.
Das ist Code-Golf , also gewinnt die kürzere Einreichung!
Da ein Beispiel angefordert wurde, wird hier eines "von Hand" mit n=4
und erstelltr=1
Schritte 1 und 2
Schritt 3 : Zeilenweise, 2 Rechtecke links
quelle
move a random number of contiguous rectangles
Kann es 0 Rechtecke sein? (Es wäreAntworten:
Mathematica, 246 Bytes
Anonyme Funktion. Enthält U + F3C7, entsprechend dem
Transpose
Operator von Mathematica . Diese Funktion nimmt einImage
Objekt und gibt einImage
Objekt zurück.Beispielanimation mit
n=16
undr=100
Nach 5000 Iterationen:
(Bild anklicken für größere Version)
Erläuterung
Initialisierung
Speichern Sie die
Nest
Funktion (Wiederholung) inn
.Speichern Sie die
RandomInteger
Funktion ink
und dieReverse
Funktion inq
.Bild aufteilen
Partitionieren Sie das Eingabebild in (zweite Eingabe) ^ 2 Kacheln.
Generiere zwei
RandomInteger
s zwischen 1 und der zweiten Eingabe. Dies wählt eine zufällige Kachel aus.Mach die Fliese weiß. Speichern Sie es in
i
.Fliesen bewegen
Generieren Sie zwei zufällige Zahlen von 0 bis 1 ist , und speichern sie in
t
undr
dargestellt. Dies wählt zufällig die Richtung.Funktion definieren
o
: die Zusammensetzung vont
.r
mal umkehrt .Auf
o
die Eingabe anwenden .Suchen Sie die Spalte von
i
(weißes Bild).Subtrahiere eins und finde eine zufällige ganze Zahl zwischen 0 und dieser Zahl. Dadurch wird zufällig ausgewählt, wie viele Kacheln verschoben werden sollen.
Wenn die Anzahl der Kacheln vor einem
i
(weißen Bild) liegt, tauschen Sie die Plätze.Kehren Sie die
o
Funktion um und wenden Sie diese auf das Ergebnis der obigen Operation an. Dadurch wird das Bild umgekehrt und transponiert.Looping und Image Assembly
Wiederholen Sie den obigen Vorgang (dritte Eingabe) mal.
Setze die Bilder zusammen.
quelle