Hier ist ein Diagramm eines Gefängnisses mit ASCII-Zeichen:
+------------------------------+
| |
| X X |
| |
| D
D |
| |
| |
| X X X |
| |
+------------------------------+
Wände bestehen aus Pipe-Zeichen |
, Strichen -
und Pfeilern +
für Ecken und Kreuzungen. Es gibt auch zwei mit gekennzeichnete Türen D
(die sich immer an der linken und rechten Wand befinden). Das Gefängnis ist mit unheimlichen Menschen gefüllt, die mit gekennzeichnet sind X
.
Das Ziel ist es, Mauern zu bauen, um die folgenden Anforderungen zu erfüllen:
- Jede Person ist in Einzelhaft;
- Zwischen den beiden Türen verläuft ein Korridor.
- Jede Zelle enthält genau eine Tür, die direkt mit dem Hauptkorridor verbunden ist;
- Der gesamte Raum im Gefängnis wird von den Zellen und dem Korridor genutzt.
- Jede Zelle enthält eine Person (dh es gibt keine leeren Zellen).
Der Korridor ist ein einzelner Pfad, zweigt nicht ab und ist immer ein Zeichen breit. Hier ist eine Lösung für das Gefängnis oben:
+---------+--------------------+
| | |
| X | X |
| | +--------+
+------D--+-----D-----+ D
D +---D--+
+----D--------+---D-----+ |
| | | |
| X | X |X |
| | | |
+-------------+---------+------+
Sie können davon ausgehen, dass jedes Eingangsgefängnis immer einen gültigen Ausgang hat. Hier sind einige weitere Input-Gefängnisse zusammen mit möglichen Outputs:
+------------------------------+
|X X X X X X X X X X X X X X X |
| |
D D
| |
| X |
+------------------------------+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X |
+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D-+
D D
+----------------------D-------+
| X |
+------------------------------+
+-----------+
|X |
| |
| |
|X X|
| |
| X|
| |
D D
+-----------+
+-+-------+-+
|X| D |
| D +---+ | |
+-+ | | |
|X| | +---+X|
| | | | +-+
| D | | X|
+-+ | +-D---+
D | D
+---+-------+
+----------------+
|X X X X|
| |
D |
| |
|X X X |
| |
| |
| |
| X X D
| |
| |
+----------------+
+---+---+----+---+
|X | X | X | X|
+--D+--D+---D+--D+
D |
+---+---+------+ |
|X | X | X | |
+--D+--D+---D--+ |
| |
| +-----+------+-+
| | X | X | D
| +----D+---D--+ |
| |
+----------------+
Antworten:
Python 2 ,
2986288129492135207520711996 BytesProbieren Sie es online!
Es wurde deutlich abgespielt; Dennoch besteht möglicherweise noch Verbesserungsbedarf. Dieser Code löst jedoch alle Testfälle. Läuft nicht sehr effizient; Bei großen Gefängnissen kann der Architekt sich die Zeit nehmen, dies herauszufinden.
Verwendet einen einfachen Pfadfindungsalgorithmus, um beide Türen und die Gefangenen mit dem Korridor zu verbinden. Dann kapselt es alle Gefangenen und ihre Wände ein und schiebt sie in den leeren Raum, bis alles gefüllt ist. Als letzter Schritt wird das ASCII-Art-Erscheinungsbild implementiert.
Ich habe sicher mehrere Stunden gebraucht, um zu schreiben. Ich hoffe, es funktioniert auch in anderen Gefängnissen als den Testfällen. (Sie können nicht alle testen, oder?)
quelle
P
) entgegen. Dies ist kein zulässiges E / A-Format. Sie sollten entwederinput()
eine Funktion verwenden oder eine Funktion definieren.C
37323642 BytesIch könnte definitiv etwas weiter Golf spielen, aber es ist ein ziemlich guter Start. Ich wusste anfangs nicht, dass mein Ansatz einen Namen hat, den ich @TehPers geben musste, weil ich einen Namen für die Forschung hatte. Ich habe die Herausforderung, die diese Frage bot, auf jeden Fall genossen. :)
-63 Bytes aus @ Jonathans Vorschlägen. Auch ich ersetzt
char
mittypedef char R
allen Zeichenliterale und ersetzt, die kleiner als 100 mit ihren ASCII - Werten für insgesamt 90 BytesEine kurze Erklärung meines Codes.
Um dieses Programm zu verwenden, übergeben Sie die Map entweder als Zeichenfolge mit Zeilenumbruchzeichen oder mit jeder durch ein Leerzeichen getrennten Ebene, wie im folgenden Beispiel dargestellt.
Code
quelle
free(t);free(u);
am Ende Ihres Programms entfernen . Ist auch'\0'
gleich0
und spart weitere 3 Bytes.typedef int Q;
und alle Vorkommen ersetzenint
mitQ
, können Sie weitere 44 Bytes speichern.