Türklinken sind großartig, aber wenn Sie eine Tür öffnen, werden die Wände rundherum eingedrückt. Sie müssen die ASCII-Kunst eines Raums wie folgt eingeben:
+---------+--X --X --+-----+
| \ \ |\ | \ |
| \ \ | \ | \|
| X | \ | X
| / | | \ X
| / | \ /
| / | \ / |
+---X --+-------X------+-----+
Und geben Sie den Raum mit Türstopps wie folgt aus:
+---------+--X --X --+-----+
| \ . \ |\ | \.|
| \ \ | \ .| \|
| X | \ | X
| / | |. \ X
| / .| \ /
|. / | .\ / |
+---X --+-------X------+-----+
Spezifikation:
- Der ASCII - Raum (Eingang) wird aus
+
,-
und|
. Diese Zeichen sind rein kosmetisch; sie könnten alle+
s sein, aber das würde schrecklich aussehen. Es wird auch Scharniere (X
) und Türen (/
oder\
) enthalten. - Türen bestehen aus
/
oder\
. Ausgehend vom "Scharnier" -ZeichenX
werden sie direkt diagonal (Änderung von 1 inx
und 1 iny
) für 2 oder mehr Einheiten (Zeichen) verschoben. Um herauszufinden, wo sich der Türstopper für eine Tür befindet (es gibt immer nur einen Türstopper pro Tür), suchen Sie die Türöffnung für die Tür. Die Türöffnung beginnt immer an einem Scharnier und geht von dort aus um die gleiche Anzahl von Abständen wie die Türlänge nach oben, unten, links oder rechts. Der nächste Raum danach wird immer eine Mauer sein. In dieser Tür ist die Türöffnung beispielsweise mit
D
s gekennzeichnet:\ \ ---DDX-----
Wenn die Türöffnung gefunden ist, finden Sie heraus, ob Sie im oder gegen den Uhrzeigersinn gehen müssen, um zur Tür zu gelangen. In der obigen Beispieltür müssen Sie beispielsweise im Uhrzeigersinn und in dieser Tür gegen den Uhrzeigersinn gehen:
\ <- \ ) -----X ---
Wenn Sie wissen, in welche Richtung Sie gehen sollen, gehen Sie so weiter (ohne die Tür zu beachten), bis Sie eine Wand erreichen.
Hier ist eine Visualisierung davon für die Beispieltür oben:
Das Blau ist die Türöffnung, das Orange stellt fest, dass Sie im Uhrzeigersinn gehen müssen, und das Rot fährt im Uhrzeigersinn fort, bis eine Wand erreicht ist.
Wenn Sie an einer Wand angelangt sind, gehen Sie vom Scharnier (
X
) an dieser Wand um (die Türlänge ) Lücken, bewegen Sie sich einen Abstand von der Wand zur Tür (damit Sie den Türstopper nicht direkt an der Wand anbringen), und setzen Sie ein.
Dort. Das folgende Beispiel zeigt, wie der Türstopper platziert wird:\ \ . ---DDX12---
Wiederholen Sie dies für jede Tür und geben Sie das Ergebnis aus! Verwenden Sie die Beispieleingabe oben in diesem Beitrag als Testfall, um zu überprüfen, ob Ihr Programm gültig ist.
Beachten Sie, dass Sie keine Türen handhaben müssen, die nicht an die Wände passen, wie zum Beispiel:
| / | / | / | / +-X --
Oder:
/ / / +-X -- | |
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
Scala, 860 Bytes
Golf gespielt :
Nicht golfen :
Die Verwendung von OOP war hier im Nachhinein definitiv der falsche Ansatz. Wenn ich es noch einmal machen könnte, würde ich definitiv ein paar hartcodierte Wahrheitstabellen nehmen.
quelle