Ich ging neulich für eine Geburtstagsfeier durch ein Kürbisbeet und bemerkte, dass die Kürbisreben ein hübsches Muster bildeten, mit Wirbeln, Schleifen und Ablegern. Wir werden das hier mit etwas ASCII-Kunst simulieren.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
Regeln für den Rebbau
- Es gibt nur eine Hauptrebe, die ausschließlich aus
\ / - p q b dZeichen besteht. - Die Rebe bewegt sich nur von links nach rechts über den Bildschirm. Mit anderen Worten, nehmen Sie an, Sie wären eine Ameise, die mit dem Rebzeichen ganz links beginnt. Wenn Sie zum nächsten benachbarten Zeichen auf der Hauptrebe voranschreiten, müssen Sie eine Spalte nach rechts verschieben - niemals nach links.
- Wenn die Rebe die Richtung ändert, muss eines der
p q b dZeichen eine Schleife simulieren. DiepReben verbinden sich von Nordosten nach Osten,qvon Osten nach Südosten,bvon Südosten nach Osten unddvon Osten nach Nordosten. Beachten Sie, dass die "Schleife" des Buchstabens mit der horizontalen Rebe und der "Stiel" des Buchstabens mit der Diagonale verbunden ist. - Der Beginn der Rebe muss eines von
poder seinb(Ihre Wahl muss nicht zufällig sein) und beginnt horizontal. Das Ende der Rebe muss eines vonqoder seind(Ihre Wahl muss nicht zufällig sein) und muss horizontal enden. - Beachten Sie, dass Schleifen unmittelbar neben anderen Schleifen platziert werden können (z. B.
pdist dies eine gültige Teilzeichenfolge der Rebe), was es jedoch schwieriger machen kann, die Kürbisse später zu platzieren. Möglicherweise möchten Sie immer eine von- / \unmittelbar nach einer Schleife haben (wie ich es in meinen Beispielen getan habe), aber es ist nicht erforderlich.
Kürbis-Regeln
- Die Kürbisse bestehen ausschließlich aus
(())(genau dieser Schnur). - Von der Hauptrebe sind die Kürbisse durch Ableger befestigt. Diese Ableger können nur an den
p q b dSchlaufen befestigt werden, sind genau eins\oder/lang und werden so am Kürbis befestigt, dass das "Ende" des Ablegers in der Mitte liegt. - Sie können sich über oder unter der Hauptrebe verbinden.
- Die Ableger können sich nach links verbinden.
- Pro Ableger kann sich nur ein Kürbis und pro Schleife nur ein Ableger festsetzen.
Zufälligkeit
- Bei horizontaler Fortbewegung hat die Rebe eine Chance von 50%, horizontal fortzufahren, eine Chance von 25%, sich nach Nordosten zu drehen, und eine Chance von 25%, sich nach Südosten zu drehen.
- Bei einer diagonalen Bewegung hat die Rebe eine Chance von 90%, sich horizontal zu drehen, und eine Chance von 10%, sich diagonal fortzusetzen.
- Es müssen genügend Windungen vorhanden sein, um die eingegebene Anzahl von Kürbissen zu unterstützen, obwohl mehr Windungen zulässig sind.
- Sobald die Rebe gebaut ist, können Kürbisse zufällig an jeder Ecke platziert werden, die noch nicht von einem Kürbis besetzt ist.
- Kürbisse dürfen die Rebe oder andere Kürbisse nicht überlappen.
Die Herausforderung
Geben Sie anhand der oben angegebenen Regeln ein zufälliges Kürbisfeld aus. Das mehrfache Ausführen des Codes mit derselben Eingabe sollte zu unterschiedlichen Ergebnissen führen. Alle möglichen Kürbisfelder für eine bestimmte Eingabenummer sollten eine (nicht unbedingt gleiche) Wahrscheinlichkeit aufweisen, dass sie nicht Null sind.
Eingang
Eine einzelne Ganzzahl, ndie die Anzahl der Kürbisse im Patch in einem beliebigen Format angibt . Aus Gründen der Kürze des Codes können Sie davon ausgehen, dass die Eingabe wie folgt lautet 0 < n < 256.
Ausgabe
Das resultierende Kürbisfeld wird entweder gedruckt / auf dem Bildschirm angezeigt oder als String / String-Array / etc. Zurückgegeben.
Regeln
- Dies ist Code-Golf, so dass alle üblichen Regeln für das Golfen gelten und der kürzeste Code (in Bytes) gewinnt.
- Verwenden Sie unsere Standarddefinition von "Zufall".
- Ein vollständiges Programm oder eine vollständige Funktion sind akzeptabel.
- Standardlücken sind verboten.
- Führende und nachfolgende Leerzeichen / Zeilenumbrüche sind vollständig optional.
Beispiele
Zur Eingabe n = 3sind hier einige GÜLTIGE Beispiele für einen Kürbisbeet nach den oben genannten Regeln (durch leere Zeilenumbrüche getrennt).
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
Hier sind einige UNGÜLTIGE Beispiele zur Eingabe n = 3mit Erläuterungen #.
(()) (())
/ /
p---q----q
\
(())
# The vine continued horizontally after a loop was placed.
(()(())
\ /
p---q
\
(())
# The pumpkins are both overlapping and sprouting from the same loop.
p----------------q
\ \ \
(()) (()) (())
# The pumpkin is attached to the middle of the vine, not at a loop.