Существует прямоугольный двумерный массив, содержащий вирусы, обозначенные «v», антидот1, обозначенный «а», и антидот2, обозначенный «b» (нет значений, отличных от «v», «a» и «b»).
Антидот1 может убивать соседние вирусы только в горизонтальном и вертикальном направлениях, но антидот2 может убивать соседние (если есть) вирусы в горизонтальном, вертикальном и диагональном направлениях.
Как только антидоты активируются, сколько вирусов останется в конце?
Примеры:
Входные данные:
vv
vv
Выход: 4
Входные данные:
av
vv
Выход: 1
Входные данные:
vvv
vbv
vvv
Выход: 0
Входные данные:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Выход: 3
Ответы:
Python 3 , 135 байт
Попробуйте онлайн!
-2 байта благодаря Кевину Круйссену
объяснение
Заменяет все «v» на «b», если находится рядом с «b». Далее, заменяет все «v» на «c», если находится рядом с «a». Вторая итерация с транспонированной версией массива очищает все вертикальные и диагональные вирусы. Наконец, он вернет оставшееся количество символов «v».
Как более читаемая рекурсивная функция (155 байт)
источник
y>1else
. Хороший подход, хотя. Сначала я не был уверен, как это соотносится с диагональюb
, но, похоже, это работает очень хорошо из-за ваших замен. :) +1 от меня.j=''.join
в вашей фиксированной версииJavaScript (ES7), 108 байт
Вводит в виде матрицы символов.
Попробуйте онлайн!
Аналогично моему первоначальному ответу, но на
V>'a'>(x-X)**2+y*y-2
самом деле выполнение на 1 байт короче, чем использование шестнадцатеричного трюка, описанного ниже. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 байт
Вводит в виде матрицы символов.
Попробуйте онлайн!
Как?
Учитывая целочисленные координаты, это выглядит следующим образом:
Следовательно:
комментарии
источник
05AB1E ,
333029 байтПопробуйте онлайн или проверьте еще несколько тестов .
Порт @Jitse 's Python 3 ответа , так что обязательно проголосуйте за него!
-1 байт благодаря @Jitse .
Объяснение:
Унаследованная версия обладает тем преимуществом, что может выполнять сжатие / транспонирование списка строк, когда новой версии потребуется явное
S
иJ
, поскольку она работает только со списками символов. Но новая версия по-прежнему на 3 байта короче благодаря использованию€Â
в сочетании с более короткой сжатой строкой. В прежней версии€
будет хранить только последнее значение в стеке внутри карты, но в новой версии он будет хранить все значения в стеке внутри карты.Посмотрите эту подсказку 05AB1E (раздел Как сжимать строки, не являющуюся частью словаря? ), Чтобы понять, почему
.•s¯}˜?•
это так"vbvabbca"
.источник
bc
=>,ba
если вы подаете заявлениеbv
=>ba
раньшеav
=>ac
. Таким образом.•6øнãI•
(сжатой формы `" bvavbaac ") достаточно, экономя 2 байта..:
(заменить все один раз) вместо:
(продолжайте заменять все, пока ее больше не будет). Тем не менее, -1. :) Спасибо, что дали мне знать.Java 10,
211209 байтМодификация моего ответа на вызов All the single eights .
-2 байта благодаря @ceilingcat .
Попробуйте онлайн.
Объяснение:
источник
Древесный уголь , 39 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Соедините входные строки с
\r
символами и выведите результат на холст.Очистить количество живых вирий.
Цикл по символам на входе.
Если текущий символ является вирусом и нет соседних
b
s в каком-либо направлении илиa
s ортогонально, то увеличивайте число живых virii.Повторите со следующим персонажем.
Очистите холст и распечатайте общее количество живых вирий.
источник
Perl (
-00lp
), 82 байтаИспользование регулярных выражений для замены
v
пробела, а затем сосчитатьv
секTIO
источник