Einer der interessanten Aspekte der Schwerkraft ist, dass man, soweit ich weiß, nicht einfach Sachen in der Luft schweben lassen kann.
Es scheint jedoch, dass nicht alle Mitglieder der Association of Random Castle Builders sich dieser Tatsache bewusst sind, was zu Burgen wie dieser führt:
#
#
# # # # ###
#### #### # #
#### # # #### ###
############## ###
###### ###### ###
##### ##### ###
###
``````````````````````````````
und das hier:
# # # # # #
##############
### #### ###
# # # # # # # # ### #### ### # # # # # # # #
#### #### #### #### ############## #### #### #### ####
#### # # #### # # #### # # #### ## ######## ## #### # # #### # # #### # # ####
####################################################################################
###### ######## ######## ######## ######## ######## ######## ######## ######
################################### ###### ###################################
################################### ###### ###################################
##
##
##
##
##
````````````````````````````````````````````````````````````````````````````````````````````
und sogar dieses:
##########
#### # ###
#######################
#
#
#
#
# # # #
# # ###
# # ###
# # # # ##
# # ## ###
# # #####
# #####
# # #####
#####
## ##
#####
#####
## ##
## ##
````````````````````````````````````````````
Herausforderung
Für eine gültige Burg werden alle Blöcke entweder direkt oder indirekt mit dem Boden verbunden. Ihr Programm oder Ihre Funktion erhält ein Schloss wie das oben genannte als Eingabe, und Ihr Programm muss einen wahren oder falschen Wert zurückgeben , der angibt, ob das Schloss gültig ist oder nicht.
Regeln
- Die Eingabe erfolgt als String.
- Alle gültigen Burgen ruhen auf einer Fläche
````````
. (Wenn die Eingabezeichenfolge ist nicht eine Oberfläche enthält, ist das Schloss ungültig.) - Sie können davon ausgehen, dass alle Eingaben diese Kriterien erfüllen:
- Die Oberfläche wird immer flach sein.
- Die Oberfläche wird immer mindestens so breit wie die Burg sein, so dass links oder rechts vom Boden keine Blöcke sind.
- Der Eingang wird niemals
#
unter der Oberfläche liegen. - Die Eingabe enthält nur Zeichen, die in dieser Abfrage angegeben wurden. (
#
,`
Leerzeichen oder Zeilenvorschub.) - Sie können davon ausgehen, dass die Eingabe immer mindestens ein Zeichen enthält.
- Blöcke werden verbunden, wenn sie horizontal oder vertikal benachbart sind. Diagonale zählt nicht!
- In Verbindung gebracht:
# or ##
# - Nicht verbunden:
# or # # or #
#
#
- In Verbindung gebracht:
- Burgen müssen existieren, um gültig zu sein. (Mit anderen Worten, Eingaben ohne
#
Eingabe müssen einen falschen Wert ergeben.) - Die Eingabe enthält nur Zeichen, die in dieser Abfrage angegeben wurden. (
#
,`
Leerzeichen oder Zeilenvorschub.) - Sie können davon ausgehen, dass die Eingabe immer mindestens ein Zeichen enthält.
- Standard I / O und Schlupfloch Regeln gelten.
Testfälle
Falsch
- Alle oben angegebenen Beispiele.
# # # #
(Kein Boden.)
#### ####
#### # # ####
##############
###### ######
## ### ######
(Der oberste Block ist weder horizontal noch vertikal angeschlossen.)
### ####
#### # # ####
##############
###### ######
##### # ####
`` `` `` `` `` `` `
`` `
(Der zentrale Turm ist nicht mit dem Rest der Burg verbunden, da keine horizontal oder vertikal angrenzenden Blöcke ihn verbinden.)
# # # # # #
##############
#####
######## # # # # # # #### # # #### # # # # # # # #
#### #### #### #### ## #### ## #### #### #### ####
## ## # # #### # # #### # # #### # #### # #### # # #### # #### #### # ####
################################################## ##################################
###### ######## ## ###### ############################ ############ ##
################################### ###### ####### ############################
################################################ #########################
`` `` `` `` `` `` `` `` `` `` `` ` "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" `` `` `` `` `` ``
(Keine Burg, nur ein einziger Newline-Charakter.)# #
(Der Block ganz rechts ist weder horizontal noch vertikal angeschlossen.)
#
`` `` ``
`` `
Wahrheit
#
`# # # #
#### ####
#### # # ####
##############
###### ######
## ### #####
`` `` `` `` `` `` `#
#
# # # # ###
#### #### # #
#### # # #### ###
############## ###
# ##### ###### ######
##### ###
##### ##### ###
`` `` `` `` `` `` `` `` `` `` `` `` `` `# # # # # #
##############
### #### ###
# # # # # # # # ### #### ### # # # # # # # #
#### #### #### #### ############## #### #### #### ## ##
#### # # #### # # # # #### #### ## ######## ## #### # # #### # # ## ## # # ####
########################################## ##########################################
###### ## ###### ############################ ############ ###### ####
################################### ##### # ###################################
################################################ #########################
`` `` `` `` `` `` `` `` `` `` `` ` "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" `` `` `` `` `` `` `` ``#### ###
# #### ###
# ###
# ##
#
###
#####
#######
#########
##### #####
##### #####
###### ######
#################
# ############# #
#############
#############
#############
###### ######
###### ######
#############
#############
#############
#############
###### ######
###### ######
#############
#############
#############
#############
###### ######
###### ######
#############
#############
#############
#############
#############
##### #####
##### #####
##### #####
`````````````````````
####
#####
######
####
####
#####
########
##########
#### ######
###########
############
##############
##### ## ##############
########### #################
###########################################
####### #################################
################# ####################
############################## ####
############################
################## #
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `
Viel Glück!
code-golf
ascii-art
decision-problem
user2428118
quelle
quelle
Antworten:
Schnecken ,
2118 Bytes-3 Bytes aufgrund zusätzlicher Eingabebeschränkungen, die in challenge bearbeitet wurden.
Leider ist die zeitliche Komplexität faktoriell, sodass die meisten Eingaben nicht ausgeführt werden können.
Gibt 0 für falsche Fälle und die Anzahl
#
für wahrheitsgemäße Fälle aus.quelle
#
mit dem Boden verbunden ist.+
ist tatsächlich 1 oder mehr Mal, nicht 0. Es wird sowieso anders aussehen, nachdem nicht verbundene Burgen zugelassen wurden.Oktave,
5351 BytesProbieren Sie es online!
* Da op nicht mehr benötigt wird, um nach leeren Eingaben zu suchen, wurde die Antwort auf meine erste Bearbeitung zurückgesetzt.
Erläuterung:
quelle
Schmutz , 29 Bytes
Probieren Sie es online! Bei den meisten Testfällen tritt bei TIO eine Zeitüberschreitung auf. Ersetzen Sie das
<0C>
durch<0CoF>
, um es etwas schneller zu machen.Erläuterung
Ich überprüfe, dass von jedem
#
ein Pfad zu einem`
existiert und dass es mindestens einen gibt#
. Kürzlich habe ich Grime Rotationsbefehle hinzugefügt, die diese Herausforderung erheblich vereinfachen.quelle
JavaScript (ES6),
197 bis196 ByteWobei
\n
das wörtliche Zeilenumbruchzeichen darstellt. Versucht, alle#
s nacheinander zu entfernen, indem man eins neben a findet`
und es in a ändert`
. Gibt zurück,true
wenn#
ursprünglich mindestens eine vorhanden war, aber alle entfernt wurden. Version, die eine gepolsterte Eingabe für118 bis117 Bytes erfordert :quelle
Perl 6 , 180 Bytes
Überprüft, ob die Eingabe mindestens eine enthält
#
und ob jeder#
einen Pfad zu a finden kann`
.Eher ineffizient, da die Pfadfindung mithilfe einer rekursiven Funktion, die immer alle anderen
#
Bereiche derselben verbundenen Region aufruft (dh nicht kurzschließt), brachial erzwungen wird .Verwendet eine unheilvolle Interaktion zwischen den Verknüpfungsoperatoren und dem Verrutschen , um sicherzustellen, dass der Pfadtest für Leerzeichen übersprungen wird, ohne dass eine separate Überprüfung außerhalb der Pfadfindungsfunktion erforderlich ist.
quelle
Python 3 ,
214206 BytesProbieren Sie es online!
Die erste Zeile hier ist dem Auffüllen aller Zeilen auf dieselbe Länge gewidmet: Wir teilen die Zeichenfolge (
s.split('\n')
ist ein Zeichen kürzer alss.splitlines()
), ermitteln die maximale Länge einer Zeile und weisen C eine abgeflachte Liste aller Zeichen zu, nachdem jedes Zeichen aufgefüllt wurde Linie. (Die Zeilenumbrüche sind weg.)Dann erstellen wir eine Liste, in der jedes Nicht-Leerzeichen neben mindestens einem Backtick durch ein Backtick ersetzt wird, und fahren fort, bis keine Änderung mehr erfolgt ist (wenn die alte Liste
o
gleich istC
. Wir können mit vergleichen,C>o
anstattC!=o
# (ASCII 35) zu ersetzen ) mit `(ASCII 96) kann nur die lexikografische Reihenfolge der Liste erhöhen.)Wenn kein # mehr vorhanden ist und anfangs mindestens eines vorhanden war, ist die Burg gültig.
'#'in s and'#'not in C
quelle