불꽃 놀이 좀 보여줘!


16

어떤 식 으로든 순서대로

  • 치수 (원하는 순서대로)

  • 확률 (원하는 형식으로)

  • 반복 횟수 (초기 상태를 계산할지 여부를 선택할 수 있음)

다음 중 하나 를 수행하십시오.

  • 애니메이션 또는

  • 의 각 단계를 출력하거나

  • 상태 목록을 반환

그 차원의 공간 가득한 하늘.

각 반복에 대해 :

  • 모든 하늘 캐릭터는 주어진 확률이 *

  • 어떤 둘러싸고있는 8 자 *이 될
    \ | /
    -      -
    / | \그들이하지만, 별이되지 않는 경우,

  • 문자가 2 *초 범위 내에 있으면X

7 × 22 스카이 (명확성을 위해 프레임 만 – 프레임을 출력하지 않음)

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

1 %의 확률로

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

그리고 다음 단계

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

그리고

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

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

등등

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

5
이것을 보는 사람이 미국 문화에 대해 전혀 익숙하지 않다면 7 월 4 일에 불꽃 놀이를 시작하는 이유와 혼동 될 수 있습니다.
Okx

물론 반대하는 모든 사람을 파괴하기 위해 @Okx!
매직 문어 Urn

답변:


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 바이트 (클리핑 버그 포함)

나는 모든 규칙이 정확하다고 생각하지만 솔루션은 오른쪽 / 왼쪽으로 나가는 모든 것이 반대쪽에서 한 줄 아래 / 높이를 감싸는 클리핑 문제가 있습니다.

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

오래된보기.


잘 했어요 측면에 빈 열을 추가하고 애니메이션을 적용한 다음 잘라내어 클리핑을 수정할 수 없습니까?
Adám

'*'너무 자주 사용하기 때문에 변수를 정의 할 수 없습니까?
Zacharý

@ Zacharý 팁, 변수 '*'와 자주 사용되는 다른 것들을 정의하겠습니다 .
2ndAttmt

JS에만 매크로가있는 경우
Zacharý

2

APL (Dyalog) , 65 자 또는 71 바이트 *

차원 (행, 열), 반복 (초기 상태를 계산하지 않음), 확률 ( ¹⁄ ₙ의 n) 을 묻습니다 .

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

온라인으로 사용해보십시오!

⎕⍴'' 해당 입력 및 사용에 대한 프롬프트 R 필요에 따라 공백 패딩, 빈 문자열을 eshape

 양보하다

⍣⎕ 입력을 요청하고 위의 기능 ( on )에 여러 번 다음 기능을 적용하십시오 .

 ... {... } 오퍼랜드 (아래로 함수를 사용하여 함수를 도출 ⍺⍺ 로서 이하) :

  ⎕←⍵ 논쟁을 인쇄하다

  ⍺⍺ 다음 기능을 적용하십시오.

   … ⌺3 3 각 요소의 3 × 3 Moore 이웃에 다음 기능을 적용하십시오.

    ⎕{… 새로운 함수를 도출하기 } 위해 입력을 받아서 피연산자 ( ⍺⍺ )로 사용

     ?⍺⍺ 첫 번째 ⍺⍺ 정수 중 임의의 정수

     1= 1과 같으면 부울

     : 사실이라면:

      '*' 별을 돌려 주다

      그밖에:

      ,⍵ 논쟁 (무어)

      4⌽ 왼쪽으로 주기적으로 4 단계 회전

      1↓ 하나의 요소 (원본 중심)를 떨어 뜨립니다.

      '*'= 별과 같은 부울 목록

      b← 그것을 b 로 저장

      +/ 요약

      2≤ 둘 이상인 경우 부울

      : 사실이라면:

       'X' X를 돌려 주다

       그밖에:

       b/'-/|\\|/-'b 를  사용하여 문자열을 필터링하십시오.

        첫 번째 항목을 선택하십시오.없는 경우 프로토 타입 (공백)을 선택하십시오.


* Dyalog 클래식에서 실행하려면 교체 와 함께⎕U233A .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.