Bana havai fişek göster!


16

Herhangi bir şekilde ve sırada,

  • boyutları (hangi sırada isterseniz)

  • bir olasılık (istediğiniz formatta)

  • yineleme sayısı (başlangıç ​​durumunun sayılıp sayılmayacağını seçebilirsiniz)

do birini aşağıdakilerden:

  • canlandır veya

  • , veya

  • eyaletlerinin listesini döndürmek

bu boyutların boşluklarla dolu bir gökyüzü.

Her yineleme için:

  • her gökyüzü karakterine verilen *

  • herhangi çevreleyen sekiz karakter *haline
    \ | /
    -      -
    / | \onlar ancak yıldız haline yoksa,

  • bir karakter iki *s aralığındaysa,X

Misal

7 × 22 gökyüzü (yalnızca netlik için çerçeve - çerçevenin çıktısını almayın)

┌──────────────────────┐
│                      │
│                      │
│                      │
│                      │
│                      │
│                      │
│                      │
└──────────────────────┘

% 1 olasılıkla

┌──────────────────────┐
│  *                   │
│                      │
│                      │
│                      │
│                      │
│           *          │
│                      │
└──────────────────────┘

ve sonraki adım

┌──────────────────────┐
│ - - *                │
│ /|\                  │
│          *           │
│                      │
│          \|/         │
│          - -         │
│          /|\         │
└──────────────────────┘

ve sonra

┌──────────────────────┐
│    - -               │
│    /|\  \|/          │
│         - -          │
│         /|\          │
│                      │
│      * *             │
│                      │
└──────────────────────┘

ve

┌──────────────────────┐
│                      │
│                      │
│                      │
│                      │
│     \|X|/            │
│     - X -            │
│     /|X|\          * │
└──────────────────────┘

ve bunun gibi

┌──────────────────────┐
│                      │
│                      │
│                      │
│                   *  │
│                      │
│                   \|/│
│                   - -│
└──────────────────────┘

5
Bunu görüntüleyen biri ABD kültürü hakkında hiç tanıdık gelmiyorsa, 4 Temmuz'da neden havai fişek fırlattığınıza şaşırabilirsiniz.
Okx

@Okx tabii ki karşı çıkan herkesi yok edecek!
Sihirli Ahtapot Urn

Yanıtlar:


5

ES6, 520 496 bayt

Kırpma ve diğer her şey şimdi çalışmalıdır.

(w,h,p,i,r=0,s=($=>{while(++r<i)for(j=0,_=$[r]=[],z=$[r-1]||[];j<w*h;){k=j+1,l='*',c=0
n=(j%w&&z[j-1]==l&&++c)|(k%w&&z[k]==l&&++c)?'-':' '
n=(z[j-w]==l&&++c)|(z[j+w]==l&&++c)?'|':n
n=(j%w&&z[j-w-1]==l&&++c)|(k%w&&z[k+w]==l&&++c)?'\\':n
n=(k%w&&z[k-w]==l&&++c)|(j%w&&z[j+w-1]==l&&++c)?'/':n
_[j++]=Math.random()<p?l:c>1?'X':n}})(x=[])||x)=>{c=document.body.children[0],r=0;while(++r<i)setTimeout((k=0)=>{for(r++,c.innerHTML='';k<h;)c.innerHTML+=s[r].slice(k*w,++k*w).join('')+'\n'},90*r);r=0}

Animasyonu görüntüle!

Zacharý'nın ipucu sayesinde 24 bayt tasarruf edildi.

Eski çözüm, 478 bayt (kırpma hatasıyla)

Tüm kuralları doğru bulduğumu düşünüyorum, ancak çözümün sağ / soldan çıkan her şeyin karşı tarafta bir satır alt / üst etrafına sarıldığı bir kırpma sorunu var.

(w,h,p,i,r=0,s=($=>{while(++r<i)for(j=0,_=$[r]=[],z=$[r-1]||[];j<w*h;){c=0
n=(z[j-1]=='*'&&++c)|(z[j+1]=='*'&&++c)?'-':' '
n=(z[j-w]=='*'&&++c)|(z[j+w]=='*'&&++c)?'|':n
n=(z[j-w-1]=='*'&&++c)|(z[j+w+1]=='*'&&++c)?'\\':n
n=(z[j-w+1]=='*'&&++c)|(z[j+w-1]=='*'&&++c)?'/':n
_[j++]=Math.random()<p?'*':c>1?'X':n}})(x=[])||x)=>{c=document.body.children[0],r=0;while(++r<i)setTimeout((k=0)=>{for(r++,c.innerHTML='';k<h;)c.innerHTML+=s[r].slice(k*w,++k*w).join('')+'\n'},90*r);r=0}

Eski görünümü.


Güzel yapılmış. Kırpmaları kenarlara boş sütunlar ekleyerek, canlandırarak ve sonra keserek düzeltemez misiniz?
Adám

Çok '*'sık kullandığınız için bir değişkeni tanımlayamadınız mı?
Zacharý

@ Zacharý İyi bir ipucu, '*'diğer yaygın olarak kullanılan şeyler için değişkenler tanımlayacağım .
2ndAttmt

Keşke JS'nin makroları olsaydı.
Zacharý

2

APL (Dyalog) , 65 karakter veya 71 bayt *

Daha sonra tekrarlamalar için (ilk durum hariç) boyutları (satır, sütun) için, İstemler ardından olasılık (olarak n de ¹/ ).

⎕{1=?⍺⍺:'*'2≤+/b←'*'=1↓4⌽,⍵:'X'⋄⊃b/'-/|\\|/-'}⌺3 3{⍺⍺⎕←⍵}⍣⎕⊢⎕⍴''

Çevrimiçi deneyin!

⎕⍴'' bu giriş ve kullanım istemi r gerektiğinde boşluklar ile doldurma, boş bir dize eshape

 ver şunu

⍣⎕ Yukarıdakine ( ) birçok kez giriş yapmak ve aşağıdaki fonksiyonu uygulamak :

 ... {... } işlenen (aşağıda işlevini kullanarak bir işlev türetmek ⍺⍺ olarak takip):

  ⎕←⍵ tartışmayı yazdır

  ⍺⍺ aşağıdaki işlevi uygulayın:

   … ⌺3 3 Her bir elemanın 3 × 3 Moore komşularına aşağıdaki fonksiyonu uygulayın:

    ⎕{} Girdi alın ve yeni bir işlev türetmek için işlenen ( ⍺⍺ ) olarak kullanın

     ?⍺⍺ ilk gers tamsayılar arasında rastgele tam sayı

     1= Bire eşitse Boole

     : Eğer doğruysa:

      '*' bir yıldız döndür

      Başka:

      ,⍵ tartışmayı ravel (düzleştir) (Moore mahallesi)

      4⌽ sola doğru dört adım döndürün

      1↓ bir öğe bırakın (orijinal merkez)

      '*'= Bir yıldıza eşit olan Boole listesi

      b←b  olarak sakla

      +/ Özetle

      2≤ İki veya daha yüksekse Boole

      : Eğer doğruysa:

       'X' bir X döndür

       Başka:

       b/'-/|\\|/-' kullanmak b dizesini filtrelemek için

        ilkini seç, eğer yoksa, prototipi seç (bir boşluk)


* Dyalog Classic'te çalıştırmak için ile değiştirin⎕U233A .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.