Schreiben Sie ein Programm oder eine Funktion, die drei Ganzzahlen, eine Breite w
, eine Höhe h
und eine Schrittzahl enthält s
. Sie werden einen nicht-selbstschneidende zeichnen werden Irrfahrt s
auf einem langen Schritte 5*w
von 5*h
Pixelbild , wo all 5 von 5 Pixelzelle entweder leer (reine beige) ist oder eine dieser zwölf einfachen „Rohre“:
Das Bild oben ist vergrößert, um Details anzuzeigen. Hier sind die Pfeifen in Originalgröße:
(Die grauen Linien dienen nur zur Trennung der Rohrtypen.)
Die zufällige Wanderung ist ein einzelner durchgehender Rohrleitungspfad, der an einem Rohrleitungsendpunkt (einer der unteren vier Rohrleitungstypen) beginnt und an einem anderen Rohrleitungsendpunkt endet.
Beginnen Sie mit einem leeren w
durch h
Gitter und zufällig wählen Sie eine Zelle der Ausgangspunkt zu sein. Wählen Sie dann nach dem Zufallsprinzip eine der vier Richtungen, in die Sie starten möchten, und zeichnen Sie den entsprechenden Rohrendpunkt. Diese Startzelle markiert den ersten Schritt auf Ihrem Weg. Jedes Mal, wenn Sie eine neue Zelle zeichnen oder eine vorhandene Zelle überschreiben, wird dies als weiterer Schritt gewertet.
Wählen Sie nun wiederholt nach dem Zufallsprinzip, ob Sie nach rechts, links oder gerade gehen möchten, und zeichnen Sie die entsprechende Rohrzelle, wenn die gewählte Richtung gültig ist. Zurückverfolgen und erneut auswählen, wenn eine Richtung nicht gültig ist, bis der vollständige s
Schrittpfad gebildet ist. Der Pfad sollte mit einem Pipe-Endpunkt enden, der sich je nach Verlauf des Pfades an einer beliebigen Stelle im Raster befinden kann.
Es ist sehr wichtig zu beachten, dass nur die beiden geraden Rohrzellen überschrieben werden können und nur die gerade Rohrzelle mit der entgegengesetzten Ausrichtung. Das Ergebnis ist eine Schnittzelle. Ansonsten müssen alle Rohre in leere Zellen gelegt werden.
Wenn eine Kreuzung gezeichnet wird, sollte der Teil des Pfades, der weiter von der Startzelle entfernt ist, oben gezeichnet werden.
Es liegt an Ihnen, ob das Gitter periodische Randbedingungen (PBC) aufweist oder nicht , dh ob ein Rohr, das aus einer Seite des Gitters austritt, auf der anderen Seite austritt. Ohne PBC gilt die Gittergrenze als Barriere, auf die Sie wie auf andere Rohre stoßen können.
Spezialfälle
- Wenn
s
0 ist , sollte keine Rohre gezogen werden , und die Ausgabe sollte leer sein5*w
durch5*h
Bildes (dh alle beige). Wann
s
ist 1 ein einzelner Rohrstutzensollte an der zufällig ausgewählten Startzelle gezeichnet werden.
Andere Details
- Sie können davon ausgehen, dass dies
s
höchstens derw*h
Fall ist, damit ein Pfad immer möglich ist. (Obwohl längere Wege aufgrund von Kreuzungen möglich sind.) w
undh
wird immer positiv sein.- Alle zufälligen Entscheidungen müssen einheitlich zufällig sein. Sie sollten zB nicht vermeiden, Schnittpunkte zu erstellen, wenn dies möglich ist, auch wenn dies das Problem erleichtert. Pseudozufallszahlengeneratoren sind zulässig.
- Anstelle von Schwarz, Blau und Beige können drei beliebige visuell unterschiedliche Farben verwendet werden.
- Ihre Ausgabebilder können so vergrößert werden, dass sie wirklich
5*w*k
aus5*h*k
Pixeln bestehen, bei denenk
es sich um eine positive Ganzzahl handelt. (Es wird empfohlen, die von Ihnen veröffentlichten Beispiele zu vergrößern, auch wenn Siek
1 sind.) - Es kann jedes gängige verlustfreie Bilddateiformat verwendet werden, und das Bild kann in einer Datei gespeichert, angezeigt oder als Standarddatei ausgegeben werden.
Der kürzeste Code in Bytes gewinnt.
Beispiele
(Alle um 500% vergrößert.)
Wenn die Eingabe ist, w=2, h=1, s=0
ist die Ausgabe immer:
Wenn es sich bei der Eingabe w=2, h=1, s=1
um eine Eingabe handelt, handelt es sich bei der Ausgabe um eines der folgenden Bilder mit gleicher Wahrscheinlichkeit:
Wenn der Eingang ist, w=2, h=1, s=2
ist der Ausgang
oder möglicherweise
wenn das Netz PBC haben soll.
(Beachten Sie, dass das Starten des Pfades einen zweiten Schritt unmöglich machen würde.)
Hier sind einige mögliche Ausgaben für w=3, h=2, s=6
PBC:
Hier ist eine mögliche Ausgabe w=3, h=3, s=9
unter der Annahme von PBC:
Beachten Sie, dass der Pfad nicht alle Zellen abdecken musste, da der Schnittpunkt als zwei Schritte gezählt wurde. Wir können auch schließen, dass der Eckendpunkt die Startzelle war, da die Kreuzungsüberführung danach gezeichnet worden sein muss. So können wir die Reihenfolge der zufälligen Entscheidungen ableiten, die getroffen wurden:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
Abschließend einige Beispiele für w=4, h=5, s=20
und w=4, h=5, s=16
:
You will be drawing a non-self-intersecting random walk
... schneidet es sich selbst oder nicht?