Покажіть мені якийсь феєрверк!


16

З огляду на будь-який спосіб і порядок,

  • розміри (у якому б порядку ви не хотіли)

  • ймовірність (у будь-якому форматі ви хочете)

  • кількість ітерацій (ви можете вибрати, рахувати початковий стан чи ні)

виконайте одну з наступних дій:

  • анімувати, або

  • вивести кожен крок, або

  • повернути список держав

небо, заповнене просторами цих вимірів.

Для кожної ітерації:

  • кожен небесний персонаж має задану ймовірність стати а *

  • вісім персонажів, які оточують будь-кого, *стають
    \ | /
    -      -
    / | \, якщо вони не стають зірками,

  • якщо символ знаходиться в межах двох * с, зробіть його anX

Приклад

Небо 7 × 22 (кадр тільки для наочності - не виводить кадр)

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

могли з 1% ймовірністю стати

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

і наступний крок

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

і потім

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

і

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

і так далі

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

5
Якщо хтось, хто переглядає це, зовсім не знайомий з культурою США, він може заплутатися в тому, чому ви ведете феєрверки 4 липня.
Okx

@ Okx, щоб знищити всіх, хто проти, звичайно!
Чарівна восьминога урна

Відповіді:


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}

Перегляд анімації!

Збережено 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{⍺⍺⎕←⍵}⍣⎕⊢⎕⍴''

Спробуйте в Інтернеті!

⎕⍴'' запрошення для введення і використання , що для г eshape порожнього рядка, доповнюючи з пробілами в разі необхідності

 урожай, що

Запит⍣⎕  на введення та застосуйте наступну функцію вищезазначеного ( ), що багато разів:

 ... {... } отримати функцію , використовуючи наведену нижче функцію в якості операнда ( ⍺⍺ ), наступним чином :

  ⎕←⍵ роздрукувати аргумент

  ⍺⍺ застосувати таку функцію:

   … ⌺3 3 Застосуйте таку функцію до сусідства кожного елемента 3 × 3 Мура:

    ⎕{} Отримати вхід і використовувати його як операнд ( ⍺⍺ ) для отримання нової функції

     ?⍺⍺ випадкове ціле число серед перших ⍺⍺ цілих чисел

     1= Булева, якщо дорівнює одиниці

     : якщо правда:

      '*' повернути зірку

      ще:

      ,⍵ згорнути (згладити) аргумент (сусідство Мура)

      4⌽ обертайте його циклічно чотири кроки вліво

      1↓ опустити один елемент (оригінальний центр)

      '*'= Булевий список, де дорівнює зірці

      b← зберігати це як b

      +/ суму, що

      2≤ Булевий, якщо два або вище

      : якщо правда:

       'X' повернути X

       ще:

       b/'-/|\\|/-' використовуйте b, щоб відфільтрувати рядок

        виберіть перший, якщо його немає, виберіть прототип (пробіл)


* Для запуску в Dyalog Classic просто замініть на⎕U233A .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.