Votre défi reçoit une entrée d'une configuration de prison pour déterminer si l'un des prisonniers peut s'échapper.
Contribution
L'entrée peut être dans n'importe quel format raisonnable tel qu'une chaîne, un tableau, un tableau de tableaux, etc. L'entrée comprendra trois caractères, dans ce cas #
, P
et un espace. L'entrée ne contiendra pas nécessairement les trois caractères.
#
: Un murP
: Un prisonnier- space: Un espace vide
Un exemple d'entrée ressemblera à ceci:
#####
# #
# P #
# #
#####
Sortie
Une valeur vérité / vérité pour déterminer si la prison est sécurisée ou non. La prison n'est sécurisée que si elle peut contenir tous les prisonniers. Si un prisonnier peut s'échapper, il n'est pas en sécurité.
Un prisonnier peut s'échapper s'il n'est pas complètement enfermé par un mur. Une jonction diagonale est entièrement fermée.
Cas de test
############# Truthy
# P # P# #
# # # P #
#############
############# Truthy
# P P #
# # # P #
#############
############# Falsey
# P # P# #
# # # P #
########## ##
#### Truthy
# #
# #
# P ####
####
P Falsey
### Falsey
# #
# #
### P
la source
Réponses:
Escargots , 13 octets
Essayez-le en ligne!
Imprime
0
pour les prisons non sécurisées et la taille de la boîte de sélection des entrées pour les prisons sécurisées.L'idée est de s'assurer que nous ne pouvons pas trouver un chemin allant d'un a
P
à une cellule hors-limite (~
) se déplaçant uniquement orthogonalement (o
) dans des espaces. Let
est un téléport de sorte que peu importe où nous essayons le match, il essaie toutes les positions de départ possibles pour trouver unP
.la source
C # (.NET Core) ,
485 480 474 470 421408 octetsL'outil et l'approche absolument faux, mais néanmoins ...
' '
par32
dans les comparaisons.Essayez-le en ligne!
En gros, j'agrandis les positions des P chaque fois qu'il y a un espace blanc jusqu'à ce qu'il atteigne (ou non) la bordure de la mise en page.
Quelques licences:
char[][]
comme entrée pour la mise en page.0
comme non sécurisé et1
sécurisé.la source
1>0
et1<0
sont plus courts quetrue
etfalse
.==0
devenir<1
? Vous avez au moins 1 octet d'espaces non pertinents. Pouvez-vous enlever lenew[]
s? (Cela ne fonctionne pas toujours mais parfois comme dansint[] n = {1,2,3};
).{m[x][y]= p; c.Push(new[]
->{m[x][y]=p;c.Push(new[]
char
s àint
s, alors je pense que vous pouvez remplacer==' '
to==32
pour économiser des octets. Vous devriez pouvoir le faire sur des comparaisons similaires.Perl 5 , 69 octets
-10 octets grâce à @Grimy .
-2 octets grâce à @Neil .
77 octets de code +
-p0
drapeaux.Essayez-le en ligne!
Quelques brèves explications:
L’idée est de mettre un
P
endroit où les prisonniers peuvent aller. S'il y en a uneP
sur la première / dernière ligne, ou la première / dernière colonne, les prisonniers peuvent y aller et s'échapper, ce qui signifie que la prison n'est pas sécurisée.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
remplace un espace à droite ou au-dessous de aP
par unP
, ou un espace à gauche ou au-dessus de aP
.Enfin,
/\A.*P|P.*\Z|^P|P$/m
vérifie si une ligne commence ou se termine par unP
ou s'il y en a unP
sur la première ou la dernière ligne.la source
*
ou+
la correspondance la plus longue qu'il peut faire est la taille d'une ligne ... Maintenant, bien sûr, si vous comparez avec une approche plus manuelle, basée sur des tableaux par exemple alors oui c'est assez inefficace!s/P(.{@{-}})? | (.{@{-}})?P/P$1$2P/s
.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
.JavaScript (ES6),
134133 octetsPrend les entrées comme un tableau de tableaux de caractères. Retourne
0
(non sécurisé) ou1
(sécurisé).Cas de test
Afficher l'extrait de code
la source
&&
s peut juste être&
?|
. Merci!JavaScript (ES6), 121 octets
Prend l'entrée en tant que chaîne rectangulaire délimitée par des lignes. Renvoie 0 pour non sécurisé et 1 pour sécurisé. D'après ma réponse à Détecter les châteaux fugitifs , bien qu'il soit plus efficace de rechercher un prisonnier évadé à chaque étape, plutôt qu'une fois qu'ils ont fini d'explorer la prison.
la source
Octave,
6455 octetsEssayez-le en ligne!
ou
Vérifiez tous les cas de test!
Explication:
la source
APL (Dyalog Classic) , 40 octets
Essayez-le en ligne!
'# '⍳⍵
coder'#'
,' '
,'P'
comme 0 1 2(⌽1,⍉)⍣4
entourer de 1(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡
Remplissage maximum de voisins de cellules non nulles⊃2≠
N'avons-nous pas un 2 en haut à gauche?la source
Stax , 35 octets CP437
Essayez-le en ligne!
Sûrement, une langue de golf sans interne pour gérer la recherche de parcours peut le faire aussi!
Explication
Utilise le format décompressé pour expliquer.
la source
SmileBASIC,
154146 octetsJ'espérais qu'une réponse utilisant le remplissage par inondation serait plus courte que cela.
Remplacez-le
31
par le caractère ASCII correspondant.la source