Эта задача является призом NinjaBearMonkey за победу в моих блоках Block Building Bot! вызов с представлением Черного рыцаря . Поздравляем NinjaBearMonkey!
Задача здесь довольно проста, но имеет множество возможных подходов. История гласит, что в мире Изометрических иллюзий существует 6 различных типов существ:
- Ниндзя, сокращенно
N
- Медведи, сокращенно
B
- Обезьяны, сокращенно
M
- NinjaBears, сокращенно
NB
- BearMonkeys, сокращенно
BM
- NinjaBearMonkeys, сокращенно
NBM
( NinjaBearMonkey , конечно, последний, самый мощный тип.)
Ваша задача - провести перепись этих существ, когда они выстроены в ряд, то есть, когда их строки сокращений объединены. Предостережение заключается в том, что вам нужно следить за тем, чтобы части некоторых существ не были переоценены как отдельные существа, которые выглядят одинаково. Существа будут выстроены так, что:
- Любой экземпляр
NBM
- 1 NinjaBearMonkey и 0 других существ. - Любой случай, за которым
NB
не следует,M
это 1 NinjaBear и 0 других существ. - Любому экземпляру,
BM
которому не предшествует,N
является 1 BearMonkey и 0 других существ. - В противном случае, экземпляры
N
,B
иM
одиночные Ninjas, медведи и обезьяны соответственно.
Строка читается слева направо.
Так, например, в линейке существ NBMMBNBNBM
есть 0 ниндзя, 1 медведь, 1 обезьяна, 1 ниндзя-медведь, 0 медведей-обезьян и 2 ниндзя-медведей-обезьян.
Вызов
Напишите программу или функцию, которая принимает строку символов N
, B
и M
, и печатает или возвращает, сколько из каждого из 6 типов существ присутствует в ней.
Вывод должен иметь форму
#N #B #M #NB #BM #NBM
с соответствующим количеством существ, заменяющим каждый #
знак. Все 6 отсчетов должны быть показаны через пробел, даже если они равны 0. Однако они могут быть в любом порядке (например, могут стоять #NBM
первыми).
Также:
- Строка ввода будет содержать только символы
N
,B
иM
. - Если вводится пустая строка, то все счетчики равны 0.
- Выходные данные могут дополнительно содержать один начальный и / или завершающий пробел и / или один завершающий символ новой строки.
Самая короткая подача в байтах побеждает.
Примеры
Вход: NB
Выход:0N 0B 0M 1NB 0BM 0NBM
Вход: NBM
Выход:0N 0B 0M 0NB 0BM 1NBM
Вход: NBMMBNBNBM
(пример сверху)
Выход:0N 1B 1M 1NB 0BM 2NBM
Вход: MBNNBBMNBM
Выход:1N 1B 1M 1NB 1BM 1NBM
Вход: NNNMNBMMBMMBMMMNBMNNMNNNBNNNBNBBNBNMMNBBNBMMBBMBMBBBNNMBMBMMNNNNNMMBMMBM
Выход:17N 6B 14M 5NB 8BM 3NBM
NBMNBM
Будет вполне корректным вводом. Читая это слева направо, ясно, что есть 2 NinjaBearMonkeys.