Imagine que temos uma fatia de alguma região montanhosa, isso resultaria em uma forma semelhante a esta:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
Como podemos ver, podemos representar isso (até certo ponto) com uma sequência de números inteiros.
Para o propósito deste desafio, definimos um vale como uma subsequência contígua em que os valores inicialmente estão diminuindo e, a partir de algum momento, estão aumentando. Mais formalmente para uma sequência um vale terá índices para os quais o seguinte é válido:
- o início e o ponto final do vale são os mesmos:
- o vale começa e termina quando a região fica mais baixa:
- o vale não é plano:
- o vale inicialmente diminui:
- em algum momento o vale aumentará:
Agora, definimos a largura de um vale como o tamanho dos índices , ie. .
Desafio
Dado um perfil de altura (sequência de números inteiros não negativos), sua tarefa é determinar a largura do vale mais largo.
Exemplo
Dado o perfil de altura [1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2]
, podemos visualizá-lo como antes:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
aaaaaa ccccc
bbbbbbbbb
Observe como o segundo vale [3,2,1,0,0,1,2,2,3]
não se estende mais para a direita porque o ponto mais à esquerda é e não . Além disso, não adicionamos os dois s restantes porque exigimos que o terminal seja mais alto que o segundo último ponto.
Portanto, a largura do vale mais largo é .
Regras
- A entrada será uma sequência de números inteiros não negativos (desculpe povo holandês)
- você pode assumir que sempre há pelo menos um vale
- A saída será do tamanho do vale mais largo, conforme definido acima
Casos de teste
[4,0,4] -> 3
[1,0,1,0,1] -> 3
[1,0,2,0,1,2] -> 4
[13,13,13,2,2,1,0,1,14,2,13,14] -> 4
[1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2] -> 9
[3,2,0,1,0,0,1,3] -> 4
[3,2,0,1,0,0,1,3]
. Todas as respostas corrente de retorno 8, por sua definição eu acredito que deve ser 4.[3,1,2,3]
)[4,0,4]
seria esse caso.Respostas:
Gelatina , 15 bytes
Experimente online!
Ou veja uma suíte de testes (foram adicionados mais dois casos de teste que anteriormente não cumpri).
Quão?
fonte
JavaScript (ES6),
1111089997 bytesExperimente online!
Comentado
fonte
Python 2 ,
120115898786152149 bytesExperimente online!
fonte
Retina 0.8.2 , 77 bytes
Experimente online! O link inclui casos de teste. Explicação:
Converta para unário.
Listar, em vez de contar, correspondências sobrepostas.
O início do vale é capturado
\1
. Isso não deve corresponder novamente até o final. Como não capturamos a vírgula, isso também impede a correspondência de valores mais altos.Combine os valores decrescentes. O
(?!1+\2)
impede a qualquer passagem através do loop de ser maior do que a anterior. (A primeira vez que o processo\2
não está definido, ela falha em corresponder trivialmente.) A captura inclui a vírgula à direita, pois é mais golfista.Combine os valores crescentes. Esse tempo
((?3)\3|\2)
significa que cada correspondência deve ter pelo menos o valor anterior ou a última captura decrescente pela primeira vez no loop.Finalmente, o fim do vale deve ter a mesma altura do início.
Exclua as alturas, deixando as vírgulas. (Isso é um pouco mais fácil do que contar as alturas, pois algumas podem ser zero.)
Classifique na ordem inversa, isto é, a maioria das vírgulas primeiro.
Conte o número de vírgulas na primeira linha, mais uma.
fonte
Casca , 13 bytes
Experimente online!
Explicação
Eu uso um algoritmo semelhante ao Jonathan Allan .
fonte
Japonês , 31 bytes
Experimente online!
Economizou 10 bytes inspirando-se na resposta de Zgarb Husk. Ainda acho que isso pode ser melhorado, mas ainda não o encontrei.
Explicação:
fonte