Сегодня Пурим, по которому принято выдавать печенье в форме треугольника с начинкой, называемой hamantaschen (единственное число: hamantasch ). Другой обычай - много пить.
Я не самый лучший пекарь .... У меня так много хаманташен нестандартного размера, которые нужно раздавать, и так много друзей, которым они могут дать! Если я отправил вам фотографию моего печенья, вы можете сказать мне, сколько у меня какого размера и начинки? Но поскольку это Пурим, и я слишком пьян, чтобы читать много кода, он должен быть настолько маленьким, насколько вы можете сделать.
Определения
Размер
Хаманташ может быть любого размера . Самый маленький хаманташ имеет размер 1 и выглядит так:
/\ --
-- \/
Иногда, несколько hamantaschen могут перекрываться . Форма ниже считается двумя hamantaschen (один размер 1, один размер 2):
/\
/\ \
----
Некоторые hamantaschen имеют наполнение . Это будет указано заполнением пробела внутри символа. Обратите внимание, что размер 1 hamantaschen не может иметь начинки.
Мы будем называть hamantaschen на основе заполнения и размера. Давайте использовать формат <filling> <size>
и, если он не заполнен - <size>
(вы можете использовать пробел вместо a -
, но уценке это не нравится).
Вот . 2
, а . 4
, а - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Это a @ 3
, a . 2
и a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Вот что-то более сложное. Видите, как & 2
заполнение меньше, чем вы ожидаете из-за наклона перекрытия - 3
? Он имеет a - 1
, & 2
a - 3
и a & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
вход
Вам будет предоставлен текстовый файл или единственная строка hamantaschen (необязательный конечный перевод строки и необязательный дополненный пробел для четности).
рамки
- Вы можете ожидать, что строка будет действительной - то есть каждый непробельный символ вносит свой вклад в восхитительно сладкий хаманташ (зачем тратить тесто?).
- Можно также ожидать , что она будет правильно заполнена или нет , - то есть, каждый hamantasch будет полностью наполненным последовательным ASCII символ - ASCII 32 для незаполненного, или что - нибудь 32..127 для заполнения ( за исключение
/
,\
и-
). - Эти hamantaschen не сложены в 3-х пространствах. Все так
/
и\
будет видно. Все,-
что не заблокировано/
и\
будет видно. Заполнение идет очень последним. - У всех хаманташен будет видна как минимум половина их горизонтальной линии (округление вверх).
- Любой непрерывный блок заполнения заполняет только самый маленький хаманташ, который его окружает.
Выход
Вернуть список «имен» всех hamantaschen, которые могут быть найдены в соответствии с вышеуказанными критериями. Вывод может быть в любой форме (строка, хеш, стандартный вывод и т. Д.).
Контрольные примеры
Тестовый пример № 1
Вход № 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Выход № 1:
. 2
. 2
- 4
@ 3
* 4
Тестовый пример № 2
Вход № 2:
/\----
/\/\*\/
/ /\d\/
------
Выход № 2:
- 3
- 2
d 2
- 1
* 2
- 1
Тест № 3
Вход № 3:
----
\/\/
/\/\ /\
---- /::\
----
Выход № 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Тест № 4
Вход № 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Выход № 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Неверный контрольный пример № 5
Входные данные:
/\
\/
Выход:
Вам не нужно справляться с этим.
источник
/
и\
, и-
всегда будет начинка козырь.(1,0)
, отключены+1
. Тем не менее, я знаю, что вы имеете в виду, и я не согласен. Что указывает на то, что(2, 2)
это верхний центр a,- 2
а не только верхний правый и левый из двух верхних- 1
s? Ничего такого, что я вижу. И та же логика применима к(3, 2)
. Если только вы не хотите добавить правило, предполагающее максимально возможный хаманташен ...Ответы:
C #,
496452 байтаРедактировать: обнаружил ошибку с проверкой границ ... но также с разгрузкой байтов, которые были вынуждены понимать мой собственный код. Развертывание локальной функции помогло немного и удалило специфический код C # 7. Этот вопрос был очень веселым.
Попробуйте онлайн
Завершите программу, ожидайте, что ввод с пробелом будет стандартным, выходы - стандартным. Выходные данные - одна запись на строку с завершающим переводом строки. Файлы cookie выводятся в порядке увеличения размера, в первую очередь слева вверху. Мне потребовалось много времени, чтобы понять правила, но я думаю, что он прошел все приведенные примеры.
Он работает путем многократного поиска по всей сетке правильного Hamantaschen, увеличивая «разрешенный» размер. Для каждой ячейки она проверяет вверх и вниз, следуя
\
и/
с обеих сторон, насколько это возможно. Если он замечает, что в следующей строке много записей-
, а текущий размер равен «разрешенному», то он определяет заполнение и печатает запись.Начинка определяется путем изучения всего пространства файла cookie и поиска «неиспользуемой» ячейки. При обнаружении неиспользуемой ячейки она помечается как использованная (так как мы увеличиваем допустимый размер, мы знаем, что мы являемся самым маленьким файлом cookie, в котором она содержится), и записываем заполнение.
Отформатированный и закомментированный код:
Выходы для 4 тестовых случаев:
источник