Você deve escrever um programa ou função que receba uma sequência representando uma arte ASCII como entrada e saída ou retorne o número de terminais na entrada.
A entrada será composta pelos caracteres space - | +
(com 0, 2, 2 e 4 pontos de extremidade, respectivamente) e quebras de linha. Por exemplo:
-|++-
+
Dois caracteres adjacentes estão conectados e, portanto, perdem 1 ponto de extremidade cada um nos seguintes casos:
-- -+ +- | | + + ++
| + | +
O primeiro exemplo tem
2+2+2+2+1+
3 = 12
pontos finais.
Entrada
- Entrada será uma string que consiste no espaço caracteres,
-
,|
,+
e de nova linha. - O comprimento da entrada pode ser 0 e qualquer entrada correspondente à descrição acima é válida (na entrada regex é
[ -+|\n]*
). - A nova linha à direita é opcional.
Resultado
- Um único inteiro não negativo, o número de terminais.
Exemplos
As saídas estão após a última linha de suas entradas.
+
4
-|++-
+
12
+--+
| |
+--+
8
| |
+--+-- |||
12
--++
|||--
10
<empty input>
0
|
|
2
--
++--
++
--+
+++ ||
----
30
Este é o código de golfe, portanto a entrada mais curta vence.
["",...s.split("\n"),""]
isso por mais tempo @ETHproductionsPython 2, 123
Um método de uma passagem. Toma como entrada uma string com quebras de linha.
Para as horizontais, a ideia é contar o número de segmentos horizontais, cada um com dois pontos de extremidade. Um segmento começa sempre que um caractere é um
+-
(booleanoh
), mas o anterior não (booleanop
).Para as verticais, gostaríamos de fazer o mesmo na entrada transposta, observando as execuções de
+|
. Infelizmente, a transposição do Python é realmente desajeitada. Requer algo comomap(None,*s.split('\n'))
preencher os espaços em branco com osNone
quais eles próprios devem lidar.Em vez disso, fazemos a contagem vertical enquanto iteramos horizontalmente. Mantemos uma lista
l
de quais índices de colunas ainda estão "em execução", ou seja, onde o caractere anterior nessa coluna se conecta. Então, fazemos o mesmo que com a horizontal, contando os segmentos verticais recém-iniciados. Quando atingimos uma nova linha, cortamos a lista exatamente onde estamos, pois todos os segmentos à direita foram quebrados e redefinimos o índice atual para0
.fonte
CJam,
666261 bytesExperimente on-line no intérprete CJam .
Idéia
Podemos calcular os pontos de extremidade da seguinte maneira:
-
s,|
s e+
s na entrada.--
s,-+
s,+-
s e++
s nas linhas.||
s.|+
s, se+|
es++
nas colunas.Código
fonte