Вдохновленный этим . Никакие авокадо не пострадали при создании этого вызова.
Здравствуйте, у меня есть проблема, мне нужна помощь, чтобы приготовить авокадо, поэтому мне нужна программа, чтобы сказать мне, как долго готовить авокадо для
Обратите внимание на этот ASCII арт авокадо:
######
# #
# #### #
# # p# #
## #### #
# #
######
Этот авокадо состоит из внешней части #
s (в частности, первой и последней последовательностей #
s в каждой строке) и ямы (форма #
s в авокадо, которая не касается внешней части авокадо).
Путем тщательных экспериментов на этих авокадо ASCII art я обнаружил следующее:
avocado juice in fluid ounces = number of spaces inside avocado but outside pit (the pit is marked with a p in the example) + 2 * number of spaces inside pit
time to juice avocado in minutes = 13 * number of spaces inside pit
Например, этот авокадо потребует 26 (2 пространства внутри ямы * 13) минуты для сока и даст 23 (19 мест внутри авокадо, но снаружи ямы + 2 * 2 места внутри ямы) жидкой унции сока.
Вызов
При условии ввода ровно одного ASCII художественного авокадо, такого как приведенный выше, который состоит только из одного #
и пустого пространства , выведите количество времени в минутах, которое потребуется для приготовления сока, и количество сока, которое он произведет в любом порядке.
Вы можете предположить, что входной авокадо всегда будет иметь ровно одну яму, и и авокадо, и яма всегда будут закрыты. Яма и авокадо всегда будут связаны, и любое подмножество ямы также будет связано. Авокадо и яма всегда будут выпуклыми. Обратите внимание, что внешность авокадо может быть сколь угодно толстой.
Образцы входов и выходов
######
# #
# #### #
# # # # -> 26 23
## #### #
# #
######
#######
# #
# ### ##
# # # # -> 26 35
# ## #
# #
##########
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Ответы:
Pyth,
5951 байтПопробуй это здесь!
Выводит время, чтобы сначала приготовить сочный адвакадо (полностью правильный английский), а в следующей строке - количество соков.
объяснение
Код - Обзор
Подробные объяснения деталей расчета размеров см. Ниже.
Получение размера адвакадо
Давайте посмотрим на это:
Сначала удаляются начальные и конечные пробелы. После этого мы заключаем все в одну строку, что приводит к следующей строке:
Он содержит все пробелы в advacado, поэтому нам просто нужно их посчитать (advacado всегда будет выпуклым, поэтому это работает для всех допустимых входных данных). Это число по-прежнему содержит пробелы в яме, но для расчета количества соков нам нужны только пробелы в фрукте без пробелов. Таким образом, мы должны рассчитать их тоже.
Код для этого объяснен подробно:
Получение размера ямы
Это немного сложнее. Сначала мы удаляем линии, которые не влияют на размер ямы. Это делается путем фильтрации всех строк, которые имеют менее 4 групп хэшей (используя регулярное выражение
#+
и считая его совпадения). В приведенном выше примере только одна строка переживет этот процесс:Пробелы, которые я пометил
-
здесь, - это те, которые нам нужно сосчитать. Таким образом, мы просто удаляем пробелы, затем хэши и снова пробелы, что оставляет нас с этим:Там мы просто должны посчитать пробелы. Мы делаем все это для каждой строки, которая пережила процесс фильтрации, суммируем все, и все готово. Остальное - тривиальная математика.
Код для этого объяснен подробно:
источник
Сетчатка , 70
Попробуйте онлайн.
источник
$*
... все еще чувствует себя действительно пригодным для игры в гольф, хотя ...$*_
? Это мило. Мне удалось получить 70 байтов .f
очень умно! Жаль, что правильным «аргументом»$*
может быть только персонаж, а не знак ... может быть, другой вид замены на будущее? : 0Python,
141119 байтисточник
s
с помощьюs=str.strip
, тело цикла может статьx=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
. Кроме того, в последней строке есть нефункциональное пространство.