Im Spiel Terraria besteht eine der Spielmechanismen darin, Häuser zu bauen, damit ein NPC einziehen kann. Es gibt strenge Regeln, was als gültiges Haus gilt oder nicht. Hier ist die Liste der Regeln:
Die Gesamtfläche im Haus muss mindestens 60 Quadratmeter, jedoch weniger als 750 Quadratmeter betragen. Außerdem muss die Größe des Hauses einschließlich des äußeren Rahmens mindestens einer der folgenden Werte sein:
5x12 6x10 7x9 8x8 9x7 10x6 12x5 15x4
Der Einfachheit halber können Sie davon ausgehen, dass: a) alle Eingabehäuser Rechtecke sind und b) sich keine festen Kacheln
#
im Inneren des Hauses befinden. Hier ist unser 12x6-Frame (gezeichnet in wunderschönem ASCII):############ # # # # # # # # ############
Das Haus muss mit Hintergrundwänden bedeckt sein. Dies sind keine massiven Fliesen, sondern eine Wand hinter dem Haus in der dritten Dimension. Löcher sind erlaubt, aber keine Löcher dürfen größer als 4x4 sein. Wenn eine Zeile oder Spalte aus 5 oder mehr Leerzeichen besteht, ist dies ein Loch, das größer als 4x4 ist, und das Haus ist ungültig. Mehrfachbohrungen sind ebenfalls zulässig, es muss jedoch mindestens ein Wandabstand eingehalten werden.
############ #**********# #**********# #**********# #**********# ############ ############ #* * # #* * # #* * # #****** # ############ (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.)
Es muss einen Eingang geben. Dies kann eine Tür
|
an den Seiten oder eine Plattform-
am Boden oder an der Decke sein. Wenn sich der einzige Eingang an einer Ecke befindet, kann der NPC nicht eintreten. Wenn Sie eine Plattform als Boden haben, müssen Sie mindestens einen einzigen festen Block haben, auf dem der NPC stehen kann. Dieser massive Block kann nicht direkt an die Seitenwände links oder rechts angrenzen . Dies sind alles gültige Häuser mit Eingängen:############ #**********# |**********# #**********# #**********| ############ (Multiple doors, or doors up high are okay) ############ #**********# #**********# #**********# #**********# #######----# #----####### #**********# #**********# #**********# #**********# ############
Es muss mindestens eine Lichtquelle
$
, ein TischT
und ein Stuhl vorhanden seinC
, obwohl mehr zulässig sind. Die Lichtquelle kann sich in der Luft oder auf dem Boden befinden, aber der Tisch und der Stuhl müssen sich beide auf dem Boden befinden, z. B. in der untersten Reihe.############ #**********# #**********# #***$******| #****TC****| ############
Sie können auch davon ausgehen, dass sich hinter jedem Möbel eine Wand befindet, sodass eine Taschenlampe, ein Stuhl oder ein Tisch als Trennelement zwischen zwei Löchern gelten kann.
############ #* * # #* * # #* $ # #**TC******| ############
Die Herausforderung
Sie müssen die kürzeste Funktion schreiben, die ein Haus als ASCII-Zeichenfolge annimmt und true / false zurückgibt, unabhängig davon, ob es sich um ein gültiges Gehäuse handelt. Sie können diese Zeichenfolge als durch Zeilenumbrüche getrennte Zeichenfolge, als Liste von Zeichenfolgen oder auf andere Weise verwenden, sofern dies sinnvoll ist. Bitte fügen Sie mir ein kurzes Programm bei, damit ich testen kann, ob es richtig funktioniert oder nicht.
Als Referenz sind dies alles ungültige Eingaben:
############
-**********#
-****$*****#
-**********#
-******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. Wie Martin gefragt hat, was genau bedeutet " keine Löcher können größer als 4x4 sein "? (Beachten Sie auch, dass ich erst bei meinem dritten Durchlesen sicher war, was das Loch war. Sie sollten die Spezifikation für Leute schreiben, die das Spiel nicht gespielt haben.)*
, aber das würde die angegebenen Beispiele für gültige Türen ausschließen. 4. Bedeutet " am Boden " "in der vorletzten Reihe" oder "über a#
"? 5. " Dies gilt nicht für Tisch und Stühle. " Bedeutet das also, dass ein 4x4-Loch mit einemT
oderC
direkt darunter zu groß ist? 6. " NPC kann nicht eintreten, weil die einzigen Eingänge an der Ecke sind " Ich glaube nicht, dass die Spezifikation etwas über die Ecken gesagt hat. Darf es sein-
oder|
wenn es andere Türen gibt?*
von einem Eingang aus erreichbar sein muss? Oder sind einzelne*
Löcher in der Mitte erlaubt, Löcher, die den gesamten Raum in zwei Hälften schneiden, wobei nur eine Seite einen Zugang hat, und Eingänge, die direkt in ein Loch führen, erlaubt?Antworten:
Python 2,
503439 BytesNicht sehr kurz, aber es ist eine Lösung. Lass es mich wissen, wenn du etwas zum Golfen siehst. Ich würde empfehlen, auch meine ungolfed-Version anzuschauen, da sie tatsächlich lesbar ist.
Bearbeiten: Alle
if
s außerhalb einer Schleife wurden unten kombiniert.Probieren Sie es online aus
Ungolfed:
Gibt auch den Grund für das Ergebnis
False
zum Debuggen aus.Ungolfed Version online
quelle