fundo
Uma bomba atômica explodiu perto da fábrica de cercas! Como os postes da cerca são essenciais para a sobrevivência de nossa civilização, precisamos resgatar o maior número possível. Estamos enviando robôs resistentes à radiação para pesquisar na área, e é sua tarefa programar a visão artificial deles.
Entrada
Sua entrada é uma grade retangular de caracteres |-#
, representando dois tipos de peças e escombros do cercado, dados como uma sequência delimitada por nova linha. Os postes da cerca foram terrivelmente mutilados pela explosão, e alguns até foram fundidos pelo calor. Definimos um muro de vedação candidato como um padrão horizontal que inicia e termina em |
e tem um ou mais -
s entre eles (iguais |-|
ou |---|
não ||
), ou um padrão vertical que inicia e termina em -
e tem um ou mais |
s entre eles (essencialmente um poste horizontal candidato rodava 90 graus). Um muro de vedação real é um muro de vedação candidato que não compartilha nenhuma de suas partes com outro muro de vedação candidato.
Resultado
Sua saída é o número de postes reais na grade de entrada.
Exemplo
Considere a grade de entrada
|#|-|#|##
#||--|||#
###|#|--#
###-||--|
-#-|#-|#-
#---#-#-|
#-#-|#--|
Existem 5 postes de vedação candidatos nesta grade, mas apenas 2 deles são postes de vedação reais (mostrados em negrito). Assim, a saída correta é 2
.
Regras
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas.
Casos de teste adicionais
Entrada:
##--
||##
-#|-
|#|#
Saída: 0
(0 postagens de vedação do candidato)
Entrada:
-##|-##--
#|#-|#||-
--|-#|#||
##||||-##
||#|--|-|
-#|-#--|#
|####|#-#
Saída: 0
(5 postes de vedação do candidato)
Entrada:
#|--|---|-|#
####|##--||-
-|-##||#|---
-#|#-|-#-|||
#|-##--###|-
---#-||-#-##
#|---|###|-#
-|---#-#|#|#
|#--|####-|-
Saída: 4
(8 postes de vedação do candidato)
Entrada:
-|-||---##|#
---|######-#
####-##|#--|
|||##|#-||||
####-#-||-#|
---#--|#-#--
-|#-####-##-
#||-|-|-###|
|-##||-||-#-
Saída: 5
(7 postes de vedação do candidato)
Entrada:
|#-|#|#-###|#-#
----#####|#----
|#--#-##-#|##-|
|#-|#-|--##||--
||#-#---##|||##
#|#-|||-#-#--||
--#|-||#|--|#|#
-#-|###||-#--#|
-#||-|#-##||##|
|--|-|||-##|-#|
Saída: 4
(9 postes de vedação do candidato)
Entrada:
||-|-|-##-#-#-|#--#-
-##|-#|-#-##-|#|--|-
||#---###||-|#|##|-#
#||-#-#-|---|#||#|##
-#-###-##-|-#-|-#||#
##-#--#||-----||-|##
-|--#-#-#|---#-#|#-#
###|-|#-#|-|###|#-|#
#||#-#|--|-||#------
||##|-||#-|--#|#-#-#
|#-|-#-|-|--##-#|||#
-|#--#||##---##|-##-
#|-|-|-||-||#-#-|##-
|-#|##|-|#|#|--||#--
Saída: 9
(30 postes de vedação do candidato)
|--...--|
curingas padrão? Isso significa que cercas horizontais precisam ter pelo menos 5 hífens? Estou um pouco confuso com a notação.[[-,|,-],[#,#,-],[-,-,|]]
?Respostas:
Ruby, 266
268bytesPara começar isso. Utiliza o fato de que as variáveis apontam para objetos (uma string de 1 caractere para cada elemento da matriz 2D) para eliminar candidatos sobrepostos.
Por exemplo. se você executar
a="s";b=a
, ambosa
eb
aponte para a mesma sequência."test"=="test"
retorna true, mas"test".equal?("test")
retorna false, porque criamos dois objetos String diferentes.Casos de teste em ideone .
fonte
map
em vez deeach