Ihre Herausforderung wird durch Eingabe eines Gefängnislayouts beantwortet, um herauszufinden, ob einer der Gefangenen fliehen kann.
Eingang
Eingabe kann in jedem angemessenen Format sein , wie beispielsweise eine Kette, ein Array Array von Arrays usw. Die Eingabe wird von drei Zeichen bestehen, in diesem Fall #
, P
und Raum. Die Eingabe muss nicht alle drei Zeichen enthalten.
#
: Eine MauerP
: Ein Gefangener- Raum: Ein leerer Raum
Eine Beispieleingabe sieht folgendermaßen aus:
#####
# #
# P #
# #
#####
Ausgabe
Ein wahrer / falscher Wert, der angibt, ob das Gefängnis sicher ist oder nicht. Das Gefängnis ist nur dann sicher, wenn es alle Gefangenen aufnehmen kann. Wenn ein Gefangener entkommen kann, ist dies nicht sicher.
Ein Gefangener kann fliehen, wenn er nicht vollständig von einer Mauer umschlossen ist. Eine diagonale Verbindung ist vollständig gekapselt.
Testfälle
############# Truthy
# P # P# #
# # # P #
#############
############# Truthy
# P P #
# # # P #
#############
############# Falsey
# P # P# #
# # # P #
########## ##
#### Truthy
# #
# #
# P ####
####
P Falsey
### Falsey
# #
# #
### P
quelle
Antworten:
Schnecken , 13 Bytes
Probieren Sie es online!
Druckt
0
für unsichere Gefängnisse und die Größe des Begrenzungsrahmens der Eingabe für sichere Gefängnisse.Damit soll sichergestellt werden, dass wir keinen Pfad von einer
P
Zelle zu einer Zelle außerhalb der Grenzen finden (~
), der sich nur orthogonal (o
) durch Räume bewegt . Dast
ist ein Teleport, so dass egal wo wir das Match versuchen es versucht alle möglichen Startpositionen zu findenP
.quelle
C # (.NET Core) ,
485 480 474 470 421408 BytesDas absolut falsche Werkzeug und Ansatz, aber trotzdem ...
' '
mit32
in dem Vergleichen.Probieren Sie es online!
Grundsätzlich erweitere ich die Positionen der Ps, wenn ein weißer Bereich vorhanden ist, bis er den Rand des Layouts erreicht (oder nicht).
Einige Lizenzen:
char[][]
als Eingabe für das Layout.0
als unsicher und1
als sicher zurück.quelle
1>0
und1<0
sind kürzer alstrue
undfalse
.==0
werden<1
? Sie haben mindestens 1 Byte irrelevantes Leerzeichen. Können Sie dasnew[]
s entfernen ? (Funktioniert nicht immer, gefällt aber manchmalint[] n = {1,2,3};
).{m[x][y]= p; c.Push(new[]
->{m[x][y]=p;c.Push(new[]
char
s mitint
s vergleichen , also glaube ich, dass Sie das==' '
to ersetzen können==32
, um Bytes zu sparen. Dies sollte auch bei ähnlichen Vergleichen möglich sein.Perl 5 , 69 Bytes
-10 Bytes dank @Grimy .
-2 Bytes dank @Neil .
77 Byte Code +
-p0
Flags.Probieren Sie es online!
Einige kurze Erklärungen:
Die Idee ist, einen
P
überall dort zu platzieren, wo die Gefangenen hinkommen können. Befindet sich einerP
in der ersten / letzten Zeile oder in der ersten / letzten Spalte, können die Gefangenen dorthin und dorthin fliehen, was bedeutet, dass das Gefängnis nicht sicher ist.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
Ersetzt ein Leerzeichen rechts von oder unter aP
durch aP
oder ein Leerzeichen links oder über aP
.Prüft
/\A.*P|P.*\Z|^P|P$/m
abschließend, ob eine Zeile mit einem beginnt oder endetP
oder ob sichP
in der ersten oder letzten Zeile ein befindet.quelle
*
oder+
die längste Übereinstimmung, die es kann, ist die Größe einer Zeile ... Nun, natürlich, wenn Sie mit einem Ansatz vergleichen, der manueller ist, der beispielsweise auf Arrays basiert , dann ist es ja ziemlich ineffizient!s/P(.{@{-}})? | (.{@{-}})?P/P$1$2P/s
.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
.JavaScript (ES6),
134133 ByteNimmt die Eingabe als Array von Arrays von Zeichen. Gibt
0
(unsicher) oder1
(sicher) zurück.Testfälle
Code-Snippet anzeigen
quelle
&&
nur sein&
?|
. Vielen Dank!JavaScript (ES6), 121 Byte
Übernimmt die Eingabe als durch Zeilenumbrüche getrennte rechteckige Zeichenfolge. Gibt 0 für unsicher und 1 für sicher zurück. Basierend auf meiner Antwort auf Detect Failing Castles , obwohl es effizienter wäre, bei jedem Schritt nach einem entkommenen Gefangenen zu suchen, als wenn sie die Erkundung des Gefängnisses beendet hätten.
quelle
Oktave,
64-55BytesProbieren Sie es online!
oder
Überprüfen Sie alle Testfälle!
Erläuterung:
quelle
APL (Dyalog Classic) , 40 Byte
Probieren Sie es online!
'# '⍳⍵
kodieren'#'
,' '
,'P'
wie 0 1 2(⌽1,⍉)⍣4
umgeben mit 1s(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡
max-of-neighbours füllen sich mit Zellen ungleich null⊃2≠
Haben wir oben links keine 2?quelle
Stax , 35 Bytes CP437
Probieren Sie es online!
Sicherlich kann dies auch eine Golfsprache sein, die nicht über eine interne Wegfindung verfügt!
Erläuterung
Verwendet das entpackte Format zur Erklärung.
quelle
SmileBASIC,
154146 BytesIch hatte gehofft, eine Antwort mit Flood Fill würde kürzer sein.
Ersetzen Sie
31
durch das entsprechende ASCII-Zeichen.quelle