W grze Terraria jedna z mechaniki gry polega na budowaniu domów, aby mógł się do nich wprowadzić NPC. Istnieje ścisły zestaw zasad określających, czy dom jest ważny, czy nie. Oto lista zasad:
Całkowita powierzchnia domu musi wynosić co najmniej 60 kwadratowych płytek, ale mniej niż 750. Ponadto rozmiar domu, w tym zewnętrzna rama, musi wynosić co najmniej jeden z tych:
5x12 6x10 7x9 8x8 9x7 10x6 12x5 15x4
dla uproszczenia można bezpiecznie założyć, że: a) Wszystkie domy wejściowe będą prostokątami, i b) żadna solidna płytka
#
nie będzie w domu. Oto nasza rama 12x6 (narysowana w pięknym ASCII):############ # # # # # # # # ############
Dom musi być przykryty ścianami w tle. To nie są solidne płytki, ale raczej ściana za domem w trzecim wymiarze. Otwory są dozwolone, ale żadne otwory nie mogą być większe niż 4x4. Jeśli rząd lub kolumna zawiera 5 lub więcej znaków spacji w rzędzie, jest to otwór większy niż 4x4, a dom jest nieprawidłowy. Dozwolone są również liczne otwory, ale musi być co najmniej jedna ściana od siebie.
############ #**********# #**********# #**********# #**********# ############ ############ #* * # #* * # #* * # #****** # ############ (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.)
Musi być wejście. Mogą to być drzwi
|
po bokach lub platforma-
na podłodze lub suficie. Jeśli jedyne wejście znajduje się na rogu, NPC nie może wejść. Ponadto, jeśli masz platformę jako podłogę, musisz mieć co najmniej jeden solidny blok, na którym NPC może stać. Ten solidny blok nie może przylegać bezpośrednio do bocznych ścian po lewej lub prawej stronie. Wszystkie są ważne domy z wejściami:############ #**********# |**********# #**********# #**********| ############ (Multiple doors, or doors up high are okay) ############ #**********# #**********# #**********# #**********# #######----# #----####### #**********# #**********# #**********# #**********# ############
Musi być co najmniej jedno źródło światła
$
, stółT
i krzesłoC
, chociaż dozwolone jest więcej. Źródło światła może znajdować się w powietrzu lub na ziemi, ale stół i krzesło muszą znajdować się na ziemi, np. W najniższym rzędzie.############ #**********# #**********# #***$******| #****TC****| ############
Możesz również założyć, że za meblami znajduje się ściana, więc pochodnia, krzesło lub stół mogą być liczone jako separator między dwoma otworami.
############ #* * # #* * # #* $ # #**TC******| ############
Wyzwanie
Musisz napisać najkrótszą funkcję, która przyjmuje dom jako ciąg ASCII i zwraca true / false, niezależnie od tego, czy jest to poprawna obudowa. Możesz traktować to jako ciąg rozdzielany znakiem nowej linii, listę ciągów lub w dowolny inny sposób, o ile jest to uzasadnione. Ze względu na mnie proszę dołączyć krótki program, dzięki czemu mogę przetestować, czy działa poprawnie, czy nie.
Dla odniesienia są to wszystkie nieprawidłowe dane wejściowe:
############
-**********#
-****$*****#
-**********#
-******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. Jak zapytał Martin, co dokładnie oznacza „ żadne dziury nie mogą być większe niż 4x4 ”? (Zauważ też, że dopiero po trzecim czytaniu byłem pewien, że zrozumiałem, co to jest dziura. Powinieneś napisać specyfikację dla osób, które nie grały w grę).*
, że tak, ale wykluczałoby to podane przykłady prawidłowych drzwi. 4. Czy „ na ziemi ” oznacza „w przedostatnim rzędzie” czy „nad a#
”? 5. „ Nie dotyczy to stołu i krzeseł. ” Czy to oznacza, że otwór 4x4 zT
lubC
bezpośrednio pod nim jest zbyt duży? 6. „ NPC nie może wejść, ponieważ jedyne wejścia znajdują się na rogu ”. Nie sądzę, żeby specyfikacja mówiła coś o rogach. Czy mogą być,-
czy|
są inne drzwi?*
musi być dostępne od wejścia? Czy też są izolowane*
w środku otworów, otwory, które przecinają cały pokój na pół z dozwoloną tylko jedną stroną, a wejścia, które prowadzą bezpośrednio do otworu są dozwolone?Odpowiedzi:
Python 2,
503439 bajtówNiezbyt krótki, ale to rozwiązanie. Daj mi znać, jeśli zobaczysz coś do gry w golfa. Polecam też przyjrzeć się mojej wersji bez golfa, ponieważ jest ona rzeczywiście czytelna.
Edycja: Wszystkie
if
s poza pętlą zostały połączone na dole.Wypróbuj online
Nie golfowany:
Podaje również przyczynę tego wyniku
False
do celów debugowania.Wersja bez golfa online
źródło