Um dos aspectos interessantes da gravidade é que, até onde eu sei, você não pode simplesmente ter coisas flutuando no ar.
No entanto, parece que nem todos na Associação de Construtores Aleatórios de Castelos estão cientes desse fato, levando a castelos como este:
#
#
# # # # ###
#### #### # #
#### # # #### ###
############## ###
###### ###### ###
##### ##### ###
###
``````````````````````````````
e este:
# # # # # #
##############
### #### ###
# # # # # # # # ### #### ### # # # # # # # #
#### #### #### #### ############## #### #### #### ####
#### # # #### # # #### # # #### ## ######## ## #### # # #### # # #### # # ####
####################################################################################
###### ######## ######## ######## ######## ######## ######## ######## ######
################################### ###### ###################################
################################### ###### ###################################
##
##
##
##
##
````````````````````````````````````````````````````````````````````````````````````````````
e até este:
##########
#### # ###
#######################
#
#
#
#
# # # #
# # ###
# # ###
# # # # ##
# # ## ###
# # #####
# #####
# # #####
#####
## ##
#####
#####
## ##
## ##
````````````````````````````````````````````
Desafio
Para um castelo válido, todos os blocos serão conectados ao chão, direta ou indiretamente. Seu programa ou função receberá um castelo como os acima como entrada e seu programa deve retornar um valor verdadeiro ou falso, refletindo se o castelo é válido ou não.
Regras
- A entrada é fornecida como uma sequência.
- Todos os castelos válidos repousam sobre uma superfície
````````
,. (Se a sequência de entrada não contiver uma superfície, o castelo é inválido.) - Você pode assumir que todas as entradas satisfarão estes critérios:
- A superfície sempre será plana.
- A superfície sempre será pelo menos tão larga quanto o castelo, portanto não haverá blocos à esquerda ou à direita do solo.
- A entrada nunca terá
#
abaixo da superfície. - A entrada conterá apenas caracteres dados neste desafio. (
#
,`
espaço ou nova linha.) - Você pode assumir que a entrada sempre conterá pelo menos um caractere.
- Os blocos são conectados se estiverem adjacentes na horizontal ou na vertical. Diagonal não conta!
- Conectado:
# or ##
# - Não conectado:
# or # # or #
#
#
- Conectado:
- Castelos devem existir para serem válidos. (Em outras palavras, entradas sem nenhuma
#
devem fornecer um valor falso.) - A entrada conterá apenas caracteres dados neste desafio. (
#
,`
espaço ou nova linha.) - Você pode assumir que a entrada sempre conterá pelo menos um caractere.
- Aplicam-se regras de E / S padrão e brecha .
Casos de teste
Falsy
- Todos os exemplos dados acima.
# # # #
(Sem chão.)
#### ####
#### # # ####
##############
###### ######
## ### ######
(O bloco superior não está conectado na horizontal ou na vertical.)
### ####
#### # # ####
############## ##############
######
##### # ####
`` `` `` `` `` `` ``
`` ``
(A torre central não está conectada ao resto do castelo porque não há blocos adjacentes na horizontal ou na vertical que o conectam.)
# # # # # #
##########################
#
# # # # # # # # #### # # #### # # # # # # # # #
#### #### #### #### ## #### ## #### #### ## #### #### #### ####
## ## # # #### # # #### # # #### # # #### # ##### # # #### # # #### # # #### # # ####
########################################################### #################################################
########## ###### ######## ######## ######## ######### ######## ######## #### ##
################################################ ############################
################################### ###### ######### #########################
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ` `` `` `` `` `` `` `
(Nenhum castelo, apenas um único caractere de nova linha.)# #
(O bloco mais à direita não está conectado horizontal ou verticalmente.)
#
`` `` `` `
`` ``
Truthy
#
`# # # #
#### ####
#### # # ####
##############
###### ######
## ### #####
`` `` `` `` `` `` ``#
#
# # # # ###
#### #### # #
#### # # #### ###
############### ###
# ###### ### #####
##### ##### ###
##### ##### ###
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `# # # # # #
#######################
#
# # # # # # # # ### #### ### # # # # # # # # #
#### #### #### #### ############## #### #### #### ## ##
#### # # #### # # #### # # #### ## ######## ## ####### ## #### # # ##### # ### ## # # ####
################################################## ##########################################
###### ## ###### ######## ######## ######## ######### ######## ######## #### #### ######
################################################# # ###################################
################################### ###### ######### #########################
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ` `` `` `` `` `` `` `` `` `#### ###
# #### ###
# ###
# ##
#
###
##### #########
#######
#########
### ## #####
##### #####
###### ######
##################
# ### ########## #
#############
#############
##############
###### ######
###### ######
#############
#############
#############
#############
###### ##### #
###### ######
#############
#############
########### ##
#############
###### ######
###### ######
########### ##
#############
#############
#############
######### ####
##### #####
########## #####
#####
`` `` `` `` `` `` `` `` `` ` `` `` `
####
#####
######
####
####
#####
########
##########
#### ######
###########
############
###################
## ##############
########### #################
###########################################
####### #################################
########################## ####################
############################## ####
############################
############################ #
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ` `
Boa sorte!
code-golf
ascii-art
decision-problem
user2428118
fonte
fonte
Respostas:
Caracóis ,
2118 bytes-3 bytes devido a restrições adicionais de entrada editadas no desafio.
Infelizmente, a complexidade do tempo é fatorial; portanto, a maioria das entradas não pode ser executada.
Saídas 0 para casos falsos e o número de
#
casos verdadeiros.fonte
#
estiver conectada ao chão.+
na verdade é 1 ou mais vezes, não 0. ele ficará diferente de qualquer maneira depois de permitir castelos desconectados.Oitava,
5351 bytesExperimente Online!
* Desde que o op caiu, o requisito de verificar se a resposta de entrada vazia foi revertida para minha primeira edição.
Explicação:
fonte
Grime , 29 bytes
Experimente online! A maioria dos casos de teste atinge o tempo limite no TIO. Substitua por
<0C>
com<0CoF>
para torná-lo um pouco mais rápido.Explicação
Estou verificando que, de todos os
#
modos, existe um caminho para`
ae existe pelo menos um#
. Recentemente, adicionei comandos de rotação ao Grime, o que facilita muito esse desafio.fonte
JavaScript (ES6),
197196 bytesOnde
\n
representa o caractere literal de nova linha. Tenta remover todos os#
s um de cada vez, localizando um adjacente a`
e alterando-o para a`
. Retornatrue
se havia pelo menos um#
originalmente, mas todos foram removidos. Versão que requer entrada acolchoada para118117 bytes:fonte
Perl 6 , 180 bytes
Verifica se a entrada contém pelo menos um
#
e se todos#
podem encontrar um caminho para a`
.Bastante ineficiente, porque o caminho é forçado com força bruta usando uma função recursiva que sempre visita todas as outras
#
da mesma região conectada (ou seja, não provoca curto-circuito).Usa alguma interação profana entre operadores de junção e escorregamento , para garantir que o teste de caminho seja ignorado para caracteres de espaço sem exigir uma verificação separada para fora da função de busca de caminho.
fonte
Python 3 ,
214206 bytesExperimente online!
A primeira linha aqui é dedicada a preencher todas as linhas com o mesmo comprimento: dividimos a string (
s.split('\n')
é um caractere mais curto ques.splitlines()
), encontramos o comprimento máximo de uma linha e atribuímos a C uma lista achatada de todos os caracteres depois de preencher cada linha. (As novas linhas se foram.)Em seguida, fazemos uma lista na qual cada caractere não espacial adjacente a pelo menos um backtick é substituído por um backtick e continuamos até que nenhuma mudança ocorra (quando a lista antiga
o
é igual aC
. Podemos comparar com aoC>o
invés deC!=o
substituir # # (ASCII 35 ) com `(ASCII 96) só pode aumentar a ordem lexicográfica da lista.)Se não houver #, e pelo menos um estiver presente inicialmente, o castelo é válido.
'#'in s and'#'not in C
fonte