花火を見せて!


16

与えられた、任意の方法と順序で、

  • 寸法(任意の順序)

  • 確率(任意の形式)

  • 反復回数(初期状態をカウントするかどうかを選択できます)

やる1以下のを:

  • アニメート、または

  • 各ステップを出力する、または

  • の状態のリストを返します

それらの次元の空間で満たされた空。

反復ごとに:

  • すべての空のキャラクターは、 *

  • ただし、星にならない場合は、周囲の8文字がに*なり
    \ | /
    -      -
    / | \ますが、

  • 文字が2 *の範囲内にある場合、それをX

7×22の空(わかりやすくするためにフレームを表示-フレームを出力しない)

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

1%の確率で

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

そして次のステップ

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

その後

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

そして

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

等々

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

5
これを見ている人が米国の文化についてまったく知らない場合、7月4日に花火を打ち上げる理由に戸惑うかもしれません。
Okx

もちろん、反対者をすべて破壊するために@Okx!
魔法のタコUr

回答:


5

ES6、520の 496バイト

クリッピングと他のすべてが動作するはずです。

(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}

アニメーションを見る!

Zacharýのヒントのおかげで24バイト節約されました。

古いソリューション、478バイト(クリッピングバグあり)

私はすべてのルールを正しかったと思いますが、解決策にはクリッピングの問題があり、右/左を出るすべてのものが反対側で1行下/上に回ります。

(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}

古いビュー。


よくできました。側面に空白の列を追加し、アニメーション化してから切り刻んでクリッピングを修正することはできませんか?
アダム

'*'頻繁に使用するため、変数を定義できませんでしたか?
ザカリー

@Zacharý良いヒント'*'です。変数やその他の一般的に使用されるものを定義します。
2ndAttmt

JSのみにマクロがある場合。
ザカリー

2

APL(Dyalog)、65文字または71バイト*

次いで、反復のために(初期状態をカウントしない)寸法(行、列)の入力を要求し、確率の(としてNで¹/ )。

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

オンラインでお試しください!

⎕⍴'' 入力と使用するためのプロンプトR必要に応じてスペースを空の文字列、パディングをeshape

 それをもたらす

⍣⎕ 入力を促し、上記()で次の機能を何度も適用します。

 ... {... } (オペランドとしての機能の下に使用して関数を導出⍺⍺次のように、):

  ⎕←⍵ 引数を出力します

  ⍺⍺ 次の機能を適用します。

   … ⌺3 3 各要素の3×3ムーア近傍に次の関数を適用します。

    ⎕{} 入力を取得し、それをオペランド(⍺⍺)として使用して新しい関数を導出します

     ?⍺⍺ 最初の間のランダムな整数⍺⍺整数

     1= 1に等しい場合はブール

     : 真であれば:

      '*' 星を返す

      そうしないと:

      ,⍵ 引数を解く(平坦化)(ムーア周辺)

      4⌽ 左に4ステップ周期的に回転させます

      1↓ 1つの要素をドロップ(元の中心)

      '*'= 星に等しいブールリスト

      b←b  として保存する

      +/ それを合計する

      2≤ 2つ以上の場合はブール

      : 真であれば:

       'X' Xを返します

       そうしないと:

       b/'-/|\\|/-'bを 使用して文字列をフィルタリングします

        最初のものを選択し、ない場合はプロトタイプ(スペース)を選択します


* Dyalogクラシックで実行するには、単純に置き換える⎕U233A

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.