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 d
Zeichen 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 d
Zeichen eine Schleife simulieren. Diep
Reben verbinden sich von Nordosten nach Osten,q
von Osten nach Südosten,b
von Südosten nach Osten undd
von 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
p
oder seinb
(Ihre Wahl muss nicht zufällig sein) und beginnt horizontal. Das Ende der Rebe muss eines vonq
oder 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.
pd
ist 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 d
Schlaufen 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, n
die 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 = 3
sind 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 = 3
mit 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.
Antworten:
Python 2, 819 Bytes
Nimmt
n
als EingabePlatziert Pumkpins immer an der Außenseite der Ecken (nach dem Zufallsprinzip links / rechts)
Während die Rebe gebaut wird, werden Kürbisse hinzugefügt, und wenn genug Kürbisse da sind, hört die Rebe auf.
Beispiele:
n=4
n=20
quelle