В игре Terraria , одна из игровых механик включает в себя строительство домов, чтобы NPC мог двигаться. Существует строгий набор правил для того, что считается действительным домом или нет. Вот список правил:
Общая площадь дома должна быть не менее 60 квадратных плиток, но не более 750. Кроме того, размер дома, включая внешний каркас, должен быть как минимум одним из следующих:
5x12 6x10 7x9 8x8 9x7 10x6 12x5 15x4
для простоты вы можете смело предположить, что: а) все входные дома будут прямоугольниками, и б) никакой твердой плитки
#
не будет внутри дома. Вот наш кадр 12x6 (нарисован в красивой ASCII):############ # # # # # # # # ############
Дом должен быть покрыт фоновыми стенами. Это не сплошная плитка, а стена за домом в третьем измерении. Отверстия разрешены, но отверстия не могут быть больше 4х4. Если в строке есть строка или столбец из 5 или более пробелов, это отверстие больше 4х4, и дом недействителен. Допускается также несколько отверстий, но между ними должна быть хотя бы одна стена.
############ #**********# #**********# #**********# #**********# ############ ############ #* * # #* * # #* * # #****** # ############ (Still acceptable since neither hole is larger than 4x4 and there is a separator) ############ # ******# #*** ***# # ******# #*** ***# ############ (Also still valid. No row or column of blank spaces is longer or taller than 4.)
Там должен быть вход. Это может быть дверь
|
по бокам или платформа-
на полу или потолке. Если единственный вход находится на углу, NPC не может войти. Кроме того, если у вас есть платформа в качестве пола, у вас должен быть хотя бы один сплошной блок, чтобы NPC мог стоять на нем. Этот сплошной блок не может быть непосредственно примыкающим к боковым стенкам слева или справа. Это все действующие дома с входами:############ #**********# |**********# #**********# #**********| ############ (Multiple doors, or doors up high are okay) ############ #**********# #**********# #**********# #**********# #######----# #----####### #**********# #**********# #**********# #**********# ############
Должен быть хотя бы один источник света
$
, столT
и стулC
, хотя допускается больше. Источник света может находиться в воздухе или на земле, но стол и стул должны быть на земле, например, в самом нижнем ряду.############ #**********# #**********# #***$******| #****TC****| ############
Также можно предположить, что за любой мебелью есть стена, поэтому факел, стул или стол могут считаться разделителем между двумя отверстиями.
############ #* * # #* * # #* $ # #**TC******| ############
Соревнование
Вы должны написать самую короткую функцию, которая принимает дом в виде строки ASCII и возвращает истину / ложь, независимо от того, действительно ли это жилье. Вы можете принять это как строку с разделителями новой строки, список строк или любым другим способом, если это разумно. Ради меня, пожалуйста, включите короткую программу, чтобы я мог проверить, работает ли она правильно или нет.
Для справки, это все неверные данные:
############
-**********#
-****$*****#
-**********#
-******TC**#
############ (You can't have platforms on the sidewalls)
###########-
#**********#
#**********#
#****$*****#
#**T***C***#
###########| (NPC can't enter because the only entrances are on the corner)
############
#**********#
#******$***#
#**********#
#T****C****#
##--------## (NPC has nowhere to stand)
############
#**********#
#**********#
#**********#
#**$**TC***#
##########|# (Door cannot be in the floor or ceiling)
############
#**********#
#**********#
#**********#
|** T C #
############ (Since table and chair do not count as a background wall, the hole in background is too wide)
####### ####
#**********#
#**********#
#****$*****#
#**T***C***|
############ (There's a hole in the frame.)
###########################################################################
# #
# #
# #
# #
# #
# #
# #
# #
# #
########################################################################### (House is 75x11, which is too big.)
#
. 2. Как спросил Мартин, что именно означает « ни одна дыра не может быть больше 4х4 »? (Обратите внимание, что только после третьего прочтения я понял, что это за дыра. Вы должны написать спецификацию для людей, которые не играли в игру).*
, но это исключило бы приведенные примеры действительных дверей. 4. Означает ли « на земле » «в предпоследнем ряду» или «над a#
»? 5. « Это не относится к столу и стульям». Значит ли это, что отверстие 4х4 сT
илиC
прямо под ним слишком большое? 6. « NPC не может войти, потому что единственные входы находятся на углу ». Я не думаю, что спецификация что-то говорила о поворотах. Могут ли они быть-
или|
есть другие двери?*
должен быть доступным от входа? Или изолированы*
в середине разрешенных отверстий, отверстий, которые разрезают всю комнату на две части только с одной стороны, имеющей вход, и входов, которые выходят непосредственно в отверстие?Ответы:
Python 2,
503439 байтНе супер короткий, но это решение. Дай мне знать, если увидишь что-нибудь в гольфе. Я бы порекомендовал взглянуть и на мою версию без гольфа, так как она действительно читаема.
Изменить: все
if
s вне цикла были объединены в нижней части.Попробуйте онлайн
Ungolfed:
Также выводит причину результата
False
для целей отладки.Беззвучная версия онлайн
источник