Entrada:
Uma matriz contendo números inteiros no intervalo [0 - 9] .
Desafio:
Determine se todos os elementos diferentes de zero estão conectados um ao outro verticalmente e / ou horizontalmente.
Resultado:
Um valor verdadeiro, se todos estiverem conectados, e um valor falso, se houver elementos / grupos diferentes de zero que não estão conectados a outros elementos / grupos.
Casos de teste:
Os casos de teste são separados por linha. Os casos de teste podem ser encontrados em formatos mais convenientes aqui (de Kudos para Dada ).
Todos os itens a seguir estão conectados e devem retornar um valor verdadeiro:
0
---
0 0
---
1 1 1
0 0 0
---
1 0 0
1 1 1
0 0 1
---
0 0 0 0 0 0
0 0 3 5 1 0
0 1 0 2 0 1
1 1 0 3 1 6
7 2 0 0 3 0
0 8 2 6 2 9
0 0 0 0 0 5
Todos os itens a seguir não estão conectados e devem retornar um valor falso:
0 1
1 0
---
1 1 1 0
0 0 0 2
0 0 0 5
---
0 0 5 2
1 2 0 0
5 3 2 1
5 7 3 2
---
1 2 3 0 0 5
1 5 3 0 1 1
9 0 0 4 2 1
9 9 9 0 1 4
0 1 0 1 0 0
Isso é código-golfe , então a submissão mais curta em cada idioma vence. As explicações são incentivadas!
Inspirado por este desafio .
fonte
Respostas:
Retina 0.8.2 ,
8077 bytesExperimente online! Edit: Salvo 1 byte graças a @FryAmTheEggman. Explicação:
Simplifique para uma matriz de
@
s e1
s.Mude um
1
para a_
.Preenchimento de inundação do
_
para1
s adjacente .Teste se ainda há
1
s.fonte
JavaScript (ES6),
136135 bytesRetorna um booleano.
Casos de teste
Mostrar snippet de código
Comentado
A função recursiva g () primeiro procura por uma célula diferente de zero (desde que o sinalizador z definido globalmente seja definido como 0 ) e, em seguida, começa a preencher a partir daí (assim que z! = 0 ).
fonte
MATL , 7 bytes
Isso fornece uma matriz contendo todos os como saída de verdade , ou uma matriz contendo pelo menos um zero como falso . Experimente online!
Você também pode verificar truthiness / falsiness adicionando um
if
-else
ramo no rodapé; tente também!Ou verifique todos os casos de teste .
Explicação
fonte
Wolfram Language (Mathematica) , 54 bytes
Economizou 2 bytes graças a user202729.
Experimente online!
fonte
C, 163 bytes
Obrigado a @ user202729 por salvar dois bytes!
Faz um loop na matriz até encontrar o primeiro elemento diferente de zero. Em seguida, para de executar um loop por um tempo e define recursivamente todos os elementos diferentes de zero conectados ao elemento encontrado como zero. Em seguida, percorre o resto da matriz, verificando se todos os elementos agora são zero.
Experimente online!
Desenrolado:
fonte
Perl,
8079787370 bytesInclui
+2
para0a
Forneça a matriz de entrada sem espaços no STDIN (ou de fato como linhas separadas por qualquer tipo de espaço em branco)
Mais fácil de ler se colocado em um arquivo:
fonte
Java 8, 226 bytes
Demorou um pouco, então estou feliz que esteja funcionando agora ..
Explicação:
Experimente online.
fonte
APL (Dyalog Unicode) , SBCS de 36 bytes
Experimente online!
fonte
Gelatina , 23 bytes
Experimente online!
Explicação.
O programa rotula cada componente morfológico com um número diferente e verifica se há menos de 3 números. (Incluindo
0
).Considere uma linha na matriz.
Aplique repetidamente esta função a todas as linhas e colunas da matriz, em todas as ordens, eventualmente todos os componentes morfológicos terão o mesmo rótulo.
E finalmente...
fonte
¦
tira O (n).Haskell , 132 bytes
extraído de Solve Hitori Puzzles
indices m
lista os(line,cell)
locais da grade de entrada.filter((/=0).(m!))
filtra todos os locais com valores diferentes de zero.splitAt 1
particiona o primeiro membro em uma lista de singleton ao lado de uma lista de descanso.any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f]
diz se(b,p)
toca na fronteiraf
.\(f,e)->partition(\(b,p)->touches(b,p)f)e
separa os touchers dos que ainda não estão.until(null.fst)advanceFrontier
repete isso até que a fronteira não possa avançar mais.null.snd
analisa o resultado se todos os locais a serem alcançados foram realmente alcançados.Experimente online!
fonte
Grime , 37 bytes
Imprime
1
para correspondência e0
sem correspondência. Experimente online!Explicação
O não terminal
C
corresponde a qualquer caractere diferente de zero que esteja conectado ao primeiro caractere diferente de zero da matriz na ordem de leitura em inglês.Alguma explicação:
e
corresponde a um retângulo de largura ou altura zero que faz parte da borda da matriz de entrada e$
é um "curinga" que corresponde a qualquer coisa. A expressãoe/\0{/e\0*0$e
pode ser visualizada da seguinte maneira:A expressão
CoX^0oX
é realmente analisada como((CoF)0)oX
; os operadoresoF
eoX
são pós-fixos e concatenação de tokens significa concatenação horizontal. Como a^
justaposição fornece uma precedência mais altaoX
, a rotação é aplicada a toda a subexpressão. OoF
corrige a orientaçãoC
após a rotaçãooX
; caso contrário, poderia corresponder à primeira coordenada diferente de zero em uma ordem de leitura em inglês rotacionada.Isso significa que todos os caracteres diferentes de zero devem estar conectados ao primeiro. O especificador de grade
:
é tecnicamente um operador postfix, masC|:\0
é um açúcar sintático para(C|\0):
.fonte
Perl 5 ,
131129 + 2 (-ap
) = 133 bytesExperimente online!
fonte
Python 2 ,
211163150 bytesExperimente online!
A saída é via código de saída. A entrada é como uma lista 1d e a largura da matriz.
fonte