L'altro giorno stavo camminando attraverso una zolla di zucca per una festa di compleanno e ho notato che le vigne di zucca facevano un disegno elegante, con vortici, anelli e rami. Lo simuleremo qui con un po 'di arte ASCII.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
Regole di costruzione della vite
- C'è solo un vitigno principale, composto esclusivamente da
\ / - p q b d
personaggi. - La vite viaggia solo da sinistra a destra attraverso lo schermo. In altre parole, supponiamo che tu fossi una formica che inizia dal carattere più a sinistra della vite. Mentre avanzi al prossimo personaggio adiacente sulla vite principale, devi spostare una colonna a destra, mai a sinistra.
- Quando la vite cambia direzione, uno dei
p q b d
personaggi è richiesto per simulare un loop. Lep
viti si uniscono da nord-est a est,q
da est a sud-est,b
da sud-est a est ed
da est a nord-est. Si noti che il "cappio" della lettera si collega alla vite orizzontale e lo "stelo" della lettera si collega alla diagonale. - L'inizio della vite deve essere uno
p
ob
(a scelta, non deve essere casuale) e inizia in senso orizzontale. La fine della vite deve essere unaq
od
(a scelta, non deve essere casuale) e deve terminare in senso orizzontale. - Si noti che i loop possono essere posizionati immediatamente adiacenti ad altri loop (ad esempio,
pd
è una sottostringa valida della vite), ma ciò potrebbe rendere più difficile posizionare le zucche in un secondo momento. Potresti averne sempre uno- / \
immediatamente dopo un ciclo (come ho fatto nei miei esempi), ma non è necessario.
Regole della zucca
- Le zucche sono composte esclusivamente da
(())
(questa stringa esatta). - Dalla vite principale, le zucche sono attaccate da rami. Questi rami possono essere attaccati solo ai
p q b d
passanti, sono precisamente uno\
o/
in lunghezza e si attaccano alla zucca in modo che la "fine" dei rami sia nel mezzo. - Possono connettersi sopra o sotto la vite principale.
- Gli offshoot possono connettersi andando a "sinistra".
- Solo una zucca può attaccare per germoglio e solo un germoglio per ciclo.
casualità
- Quando si viaggia in orizzontale, la vite ha una probabilità del 50% di continuare in orizzontale, una probabilità del 25% di girare a nord-est e una probabilità del 25% di girare a sud-est.
- Quando si viaggia in diagonale, la vite ha una probabilità del 90% di girare in orizzontale e una probabilità del 10% di continuare in diagonale.
- Devono esserci turni sufficienti per supportare il numero di input di zucche, sebbene siano consentiti più turni.
- Una volta costruita la vite, le zucche possono essere posizionate casualmente in qualsiasi angolo non già occupato da una zucca.
- Le zucche non possono sovrapporsi alla vite o ad altre zucche.
La sfida
Dato un numero di input, genera un patch di zucca randomizzato seguendo le regole sopra. L'esecuzione del codice più volte con lo stesso input dovrebbe produrre risultati diversi. Tutte le possibili patch di zucca per un dato numero di input dovrebbero avere qualche probabilità (non necessariamente uguale) diversa da zero.
Ingresso
Un singolo numero intero che n
rappresenta il numero di zucche nella patch, in qualsiasi formato conveniente . Per brevità del codice, si può presumere che l'input sia 0 < n < 256
.
Produzione
La patch di zucca risultante, stampata / visualizzata sullo schermo o restituita come stringa / stringa-matrice / ecc.
Regole
- Questo è code-golf quindi si applicano tutte le regole abituali per il golf e vince il codice più breve (in byte).
- Usa la nostra definizione standard di "Casuale".
- È accettabile un programma o una funzione completi.
- Sono vietate le scappatoie standard .
- Gli spazi bianchi / le righe principali e finali sono completamente opzionali.
Esempi
Per l'input n = 3
, ecco alcuni esempi VALIDI di una patch di zucca che segue le regole sopra (separate da righe vuote).
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
Ecco alcuni esempi INVALID di input n = 3
, con spiegazioni #
.
(()) (())
/ /
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.