Randomized Pumpkin Patch

12

Pewnego dnia szedłem przez placek z dyni na przyjęcie urodzinowe i zauważyłem, że dyniowe pnącza tworzą fajny wzór z wirami, pętlami i odgałęzieniami. Zamierzamy to zasymulować tutaj przy pomocy grafiki ASCII.

          (())
            \
   p--q      p-----q
  /    \    /       \
(())    b--d       (())

Zasady budowy winorośli

  • Jest tylko jedna główna winorośl, złożona wyłącznie z \ / - p q b dpostaci.
  • Winorośl porusza się po ekranie tylko od lewej do prawej. Innymi słowy, przypuśćmy, że byłeś mrówką, zaczynając od najbardziej lewej postaci winorośli. Przechodząc do następnej sąsiedniej postaci na głównej winorośli, musisz przesunąć jedną kolumnę w prawo - nigdy w lewo.
  • Kiedy krzew zmienia kierunek, jeden z p q b dbohaterów musi symulować pętlę. pDołącza winorośl podróżujących na wschód Wschodzie, qna południowym wschodzie do The bod południowego wschodu na wschód i dze wschodu na północny-wschód. Zauważ, że „pętla” litery łączy się z poziomym pnączem, a „trzon” litery łączy się z przekątną.
  • Początkiem winorośli musi być jeden plub b(twój wybór, nie musi być przypadkowy) i zaczyna się w poziomie. Koniec winorośli musi być jednym z qlub d(twój wybór, nie musi być przypadkowy) i musi kończyć się poziomo.
  • Zauważ, że pętle można umieszczać bezpośrednio przy innych pętlach (np. pdJest prawidłowym podłożem winorośli), ale może to utrudnić późniejsze umieszczenie dyń. Możesz chcieć zawsze mieć jedną z - / \pętli natychmiast po pętli (tak jak w moich przykładach), ale nie jest to wymagane.

Zasady dyniowe

  • Dynie składają się wyłącznie z (())(dokładnie tego ciągu).
  • Z głównego winorośli dynie są przyczepione przez odgałęzienia. Te odgałęzienia mogą być przymocowane tylko do p q b dpętli, mają dokładnie jeden \lub /długość i przyczepiają do dyni, tak aby „koniec” odgałęzienia znajdował się na środku.
  • Mogą łączyć się powyżej lub poniżej głównej winorośli.
  • Odgałęzienia mogą łączyć się z „lewym”.
  • Tylko jedna dynia może przyczepić się do jednego odgałęzienia i tylko jeden odgałęzienie na pętlę.

Losowość

  • Podczas podróży w poziomie winorośl ma 50% szansy na kontynuację w poziomie, 25% szansy na obrót na północny wschód i 25% szansy na zwrot na południowy wschód.
  • Podczas podróży po przekątnej winorośl ma 90% szans na obrót w poziomie i 10% szansę na kontynuację po przekątnej.
  • Musi być wystarczająca liczba zwojów, aby obsłużyć wejściową liczbę dyń, chociaż dozwolone są kolejne zwoje.
  • Po zbudowaniu winorośli dynie mogą być losowo umieszczane w dowolnym rogu, który nie jest jeszcze zajęty przez dynię.
  • Dynie nie mogą nakładać się na winorośl lub inne dynie.

Wyzwanie

Biorąc pod uwagę liczbę wejściową, wyślij losową łatkę dyni zgodnie z powyższymi zasadami. Wielokrotne wykonanie kodu z tym samym wejściem powinno dać różne wyniki. Wszystkie możliwe łatki dyniowe dla danego numeru wejściowego powinny mieć pewną (niekoniecznie równą) niezerową szansę wystąpienia.

Wejście

Pojedyncza liczba całkowita nreprezentująca liczbę dyń w łatce, w dowolnym dogodnym formacie . Dla zwięzłości kodu możesz założyć, że dane wejściowe to 0 < n < 256.

Wynik

Powstała łatka z dyni, drukowana / wyświetlana na ekranie lub zwracana jako ciąg / tablica ciągów / itd.

Zasady

  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
  • Skorzystaj z naszej standardowej definicji „Losowo”.
  • Dopuszczalny jest pełny program lub funkcja.
  • Standardowe luki są zabronione.
  • Wiodące i końcowe białe znaki / znaki nowej linii są całkowicie opcjonalne.

Przykłady

Do wprowadzenia n = 3, oto kilka WAŻNYCH przykładów łaty dyni zgodnie z powyższymi zasadami (oddzielone pustymi znakami nowej linii).

          (())
            \
   p--q      p-----q
  /    \    /       \
(())    b--d       (())

(()) (())
  \   /
   b-q (())
      \ /
       b-q

p-----------------------q (())
                       / \ /
                     (()) b-q
                           /
                         (())

Oto kilka NIEPRAWIDŁOWYCH przykładów wprowadzania n = 3wraz z objaśnieniami #.

    (()) (())
     /    /
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.
AdmBorkBork
źródło
7
A teraz zaprojektuj język 2D, używając go jako składni. :)
Martin Ender

Odpowiedzi:

1

Python 2, 819 bajtów

Pobiera njako dane wejściowe

Zawsze umieszcza kołki na „zewnętrznych” rogach (losowo w lewo / w prawo)

Podczas konstruowania winorośli dodaje się dynie, a gdy jest ich wystarczająco dużo, winorośl zatrzymuje się.

r=lambda:__import__('random').random()
s=1
v=[s]*4
U=[-9]
D=[-9]
i=input()
while len(U)+len(D)<i+2:s=[[0,1][r()<.9],[[0,2][r()<.5],1][r()<.5],[2,1][r()<.9]][s];exec['',[['','U+=[len(v)]'][U[-1]<len(v)-7],'',['','D+=[len(v)]'][D[-1]<len(v)-7]][v[-1]-s+1]][r()<.8];v+=[s]*[1,2][v[-1]!=s]
v+=[1]*5
m=M=s=0
for i in v:s+=i-1;m=[m,s][m>s];M=[M,s][M<s]
R=[[' ']*(M-m+5)for x in v]
m=-m+2
R[2][m]='p'
for x in range(3,len(v)-3):X=v[x-1];R[x][m]='/d p-b q\\'[v[x]*3+X];m+=v[x]-1
R[-3][m]='q'
M=[len(a)-len(a.lstrip())for a in map(''.join,R)]
R=map(list,zip(*R))
B,L,a='-/U'
K="\\"*4
W="""exec("for p in "+a+"[1:]:x=M[p];b=r()<.5;exec('R[x"+B+"1][p'+['+1]=\\""+L+"\\"','-1]=\\""+K+"\\"'][b]);i=p-[0,3][b];l='(';exec('R[x"+B+"2][i]=l;i+=1;'*2+'l=\\")\\";')*2")"""
exec W+";B,a='+D';L,K=K,L;"+W
for x in R:print''.join(map(str,x))

Przykłady:

n=4

                (())   
                 /     
                p---q  
 (())          /       
   \       p--d        
  p-q     /    \       
     \   /    (())     
      b-d              
       \               
      (())             

n=20

                            (())                                                                                             
                              \                                                                                              
                            p--q                                                                                             
                           /    \                                                                                            
                          /      b--q                                                                                        
           (())     p----d      /    \                                                                                       
  (())       \     /          (())    b-q (())                                                                               
    \         p---d                      \  \                                                                                
  p--q       /     \                      b--q                                                                               
      \     /     (())                   /    \                        (())                                           (())   
       b---d                           (())    b-q                       \                                             /     
        \                                         \          (())         p-q                                         p---q  
       (())                                        \           \         /   \                                       /       
                                                    b-----------q     p-d     b-q                            (())p--d        
                                                                 \   /       /   \                            / /    \       
                                                                  b-d      (())   b-q   (())  (())   p-q     p-d    (())     
                                                                   /                 \   /      \   /   \   /                
                                                                 (())                 b-q        p-d     b-d                 
                                                                                       \ \      /         \                  
                                                                                      (())b----d         (())                
                                                                                              /                              
                                                                                            (())                             
TFeld
źródło
Gratulacje, domyślnie wygrywasz! : D
AdmBorkBork