Внутри получателя 5х5 есть вирус. Поскольку мы знаем, как он распространяет свое загрязнение, ваша миссия состоит в том, чтобы вывести последний этап заражения.
Получатель
Он будет представлен в виде двумерного массива 5x5:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Где 1
означает позицию, где вирус уже загрязнен, и 0
позицию, которая не загрязнена.
Как распространяется вирус
- Загрязненное положение не может быть чистым.
- Чистая позиция будет загрязнена на следующей стадии, только если загрязнены как минимум две соседние позиции (север, восток, юг и запад).
- Последняя стадия загрязнения происходит тогда, когда чистые клетки больше не могут быть загрязнены.
Образец
Используя в качестве этапа 1 заражения получателя, описанного выше, этап 2 будет:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
Этап 3 загрязнения будет:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Этап 4 загрязнения будет:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
И этап 5 (в этом примере, последний) будет:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Вызов
Учитывая в качестве входных данных одну стадию загрязнения, вы должны вывести последнюю стадию загрязнения.
Вам разрешено написать полную программу или функцию. Вы можете воспринимать входные данные как массив / список, как отдельные числа или даже как строку. Выбирает лучший способ, который подходит для вашего языка.
Самый короткий ответ в байтах побеждает!
Еще один тест
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
источник
1 0 1
появиться на выходе? Разве центральный ноль не соседствует с двумя1
s?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
в качестве теста?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, который остается неизменным.Ответы:
Так как это в основном говорит о клеточном автомате, я даю вам ..
Правило Golly Quicklife, 10 байтов
Введите правило, вставьте сетку в Golly, запустите шаблон. Результирующий шаблон является выходным.
Объяснение:
Или, если вы настаиваете на полном правиле RuleLoader, 89 байт:
Rulename - X, те же шаги, что и раньше.
источник
B3/S23
что угодно! ... Но он имеет строгий формат ввода (как будто вся программа включена во вход (как еще вы это сделаете?)). НО ПОЧЕМУ РАЗБИРАТЬ УДОВОЛЬСТВИЕ ??Python 2, 97 байт
Попробуйте онлайн . Ввод принимается в виде строки в кавычках, каждая строка ограничена переводом строки. Это
980
не является оптимальным и может быть заменено на меньшее кратное 35. Поскольку это не влияет на продолжительность этой программы, я оставил определение самой низкой безопасной верхней границы в качестве упражнения для читателя.источник
Javascript (ES6),
918987 байтВ качестве функции, которая принимает входные данные в виде массива чисел или строк.
-2 байта от Нейла (комбинируя назначение
y
с преобразованием строки)-2 байта (удаление переменной
j
)источник
(y=...)+''==x
вместо(y=...),y+''==x
.MATL , 22 байта
Это работает в текущей версии (15.0.0) языка.
Попробуйте онлайн !
Формат ввода: 2D-массив со строками, разделенными точками с запятой. Таким образом, четыре контрольных примера имеют следующие входные данные:
объяснение
Это повторно выполняет двумерную свертку входного массива со следующей маской, которая определяет, какие соседи считаются загрязняющими:
Чтобы получить результат того же размера, что и исходный массив, он сначала дополняется кадром нулей, а затем сохраняется только «действительная» часть свертки (то есть без краевых эффектов).
Порог 2 применяется к выходу свертки, и результат поэлементно ИЛИ с исходным вводом.
Это должно быть сделано достаточное количество раз, чтобы обеспечить достижение конечного состояния. Простой критерий, который удовлетворяет этому: итерация столько раз, сколько количество записей во входном массиве (то есть 25 раз в тестовых случаях).
источник
TI-BASIC, 151 байт
Введите как
[[1,0,0,1,1][1,0,0,0,0]...]
.источник
Repeat
петлю.Луа, 236 байт
Принимает ввод в командной строке и использует строковые манипуляции Lua, чтобы получить ответ.
Ungolfed:
источник
APL,
767270 байтТо, что это делает: расширяет матрицу до 7x7, затем центрирует наш аргумент (омега). Из этой матрицы сгенерируйте 4 «дочерние» матрицы, каждая из которых смещена в различном направлении (вверх / вниз / влево / вправо), сложите их вместе (чтобы мы получили количество соседей), опустите кадр (чтобы вернуться к Матрица 5х5). Или эта новая матрица со «старой», чтобы убедиться, что мы не уронили ни одной ячейки в процессе (т.е. на краю). Затем используйте
⍣≡
комбинацию, чтобы получить значение с фиксированной точкой.пример (учитывая, что функция была назначена
contaminate
):источник