Учитывая, любым способом и в порядке,
размеры (в любом порядке)
вероятность (в любом формате, который вы хотите)
количество итераций (вы можете выбрать, считать ли начальное состояние или нет)
выполните одно из следующих действий:
одушевленный или
выводить каждый шаг или
вернуть список состояний
заполненное пространствами небо этих измерений.
Для каждой итерации:
у каждого персонажа неба есть определенная вероятность стать
*
восемь персонажей, которые окружают любого,
*
становятся
\
|
/
-
-
/
|
\
, если они не становятся звездами, однако,- если персонаж находится в диапазоне двух
*
с, сделайте егоX
пример
Небо 7 × 22 (кадр только для ясности - не выводить кадр)
┌──────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└──────────────────────┘
может с 1% вероятностью стать
┌──────────────────────┐
│ * │
│ │
│ │
│ │
│ │
│ * │
│ │
└──────────────────────┘
и следующий шаг
┌──────────────────────┐
│ - - * │
│ /|\ │
│ * │
│ │
│ \|/ │
│ - - │
│ /|\ │
└──────────────────────┘
а потом
┌──────────────────────┐
│ - - │
│ /|\ \|/ │
│ - - │
│ /|\ │
│ │
│ * * │
│ │
└──────────────────────┘
и
┌──────────────────────┐
│ │
│ │
│ │
│ │
│ \|X|/ │
│ - X - │
│ /|X|\ * │
└──────────────────────┘
и так далее
┌──────────────────────┐
│ │
│ │
│ │
│ * │
│ │
│ \|/│
│ - -│
└──────────────────────┘
Ответы:
ES6,
520496 байтОтсечение и все остальное должно работать сейчас.
Посмотреть анимацию!
Сохранено 24 байта благодаря подсказке Захари.
Старое решение, 478 байт (с ошибкой отсечения)
Я думаю, что все правила были правильными, однако в решении есть проблема с отсечкой, когда все выходящие вправо / влево оборачиваются на одну строку ниже / выше на противоположной стороне.
Просмотр старого.
источник
'*'
так как вы используете ее так часто?'*'
и другие часто используемые вещи.APL (Дьялог) , 65 символов или 71 байт *
Запрашивает измерения (строки, столбцы), затем итерации (не считая начальное состояние), затем вероятность (как n в ¹⁄ ₙ ).
Попробуйте онлайн!
⎕⍴''
приглашение для ввода и использования , что г eshape пустой строки, дополняя с пробелами в случае необходимости⊢
дать что… Запросить
⍣⎕
ввод и применить следующую функцию к описанному выше ( ⍵ ) много раз:...
{
...}
получить функцию , используя приведенную ниже функцию в качестве операнда ( ⍺⍺ ), следующим образом :⎕←⍵
распечатать аргумент⍺⍺
примените следующую функцию:…
⌺3 3
Примените следующую функцию к каждому элементу 3 × 3 Мура:⎕{
…}
Получить ввод и использовать его как операнд ( ⍺⍺ ) для получения новой функции?⍺⍺
случайное целое число среди первых ⍺⍺ целых1=
Логический, если равен единице:
если правда:'*'
вернуть звезду⋄
еще:,⍵
Равель (сплющить) аргумент (окрестности Мура)4⌽
поверните его циклически на четыре шага влево1↓
отбросить один элемент (оригинальный центр)'*'=
Булевый список, где равно звездеb←
сохранить это как б+/
сумма, что2≤
Логическое значение, если два или выше:
если правда:'X'
вернуть X⋄
еще:b/'-/|\\|/-'
используйте b для фильтрации строки⊃
выберите первый, если его нет, выберите прототип (пробел)* Чтобы запустить в Dyalog Classic, просто замените
⌺
на⎕U233A
.источник