Considere uma sequência unidimensional de números dentro de um intervalo fixo, ou seja,
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
O gráfico sempre crescente * ** é uma linha que conecta todos os pontos nessa sequência da esquerda para a direita e sempre sobe ou permanece nivelada. Se necessário, a linha passa de cima para baixo e continua subindo de lá para encontrar o próximo ponto.
O objetivo desse desafio é dividir a sequência em diferentes subseqüências que não diminuem, de modo que, quando plotadas em conjunto com um eixo vertical limitado, elas formem um gráfico sempre crescente. Isso é feito adicionando um ponto a ao final de uma subsequência e ao início da próxima, para que o ângulo da linha que cruza o limite superior se alinhe com a linha que cruza o limite inferior e os dois pontos de cruzamento. tem a mesma coordenada horizontal. O exemplo acima daria a seguinte saída:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
E o gráfico correspondente terá a seguinte aparência: E com o eixo estendido para uma melhor visualização: A saída necessária é uma lista de subsequências que formam as partes do Gráfico cada vez maior. Não é necessário fazer um enredo, mas você ganhará pontos de bônus;). A saída deve separar claramente as subsequências de alguma forma.
Notas
- O intervalo sempre terá zero como o limite esquerdo (inclusive), e o limite direito será algum número inteiro N.
- A sequência nunca conterá valores que não estão dentro do intervalo.
- A primeira subsequência não possui um ponto adicional no início.
- A última subsequência não possui um ponto adicional no final.
- Não é necessário fornecer os índices iniciais que seriam necessários para plotar as subsequências.
Casos de teste
Input: [0, 2, 4, 6, 1, 3, 5, 0], 7
Output: [0, 2, 4, 6, 8], [-1, 1, 3, 5, 7], [-2, 0]
Input: [1, 1, 2, 3, 5, 8, 3, 1], 10
Output: [1, 1, 2, 3, 5, 8, 13],[-2, 3, 11],[-7, 1]
Input: [5, 4, 3, 2, 1], 10
Output: [5, 14],[-5, 4, 13],[-6, 3, 12],[-7, 2, 11],[-8, 1]
Input: [0, 1, 4, 9, 16, 15, 0], 17
Output: [0, 1, 4, 9, 16, 32], [-1, 15, 17], [-2, 0]
Pontuação
Isso é código-golfe, o código mais curto em bytes vence.
* Não é um jargão real ** Na verdade, deve ser chamado de Gráfico sempre não decrescente, como o @ngm apontou, mas isso parece menos impressionante.
Respostas:
Gelatina , 20 bytes
Experimente online!
As subseqüências são divididas por
0.5
.fonte
R ,
179158151 bytesExperimente online!
Editar: o código agora é uma função e recebe entrada. (Agradecimentos a Giuseppe, user202729 e JayCe por apontar isso com calma)
Editar: -21 bytes sugeridos por Giuseppe.
Edite: -7 bytes removendo
d=NULL;
.fonte
s[p+1]-((m+s[p+1])-s[p])
simplificas[p]-m
, e você temd=c(c(...))
onde apenasd=c(...)
é necessário. Eu suspeito fortemente que exista uma maneira de jogar golfe, mas essa ainda é uma boa resposta.d
precisa mesmo ser inicializado?Python 2 , 60 bytes
A entrada é N, seguida por todos os pontos como argumentos individuais. Subseqüências na saída são separadas por
0.5
.Experimente online!
Python 2 ,
927768 bytesAs subseqüências são separadas por
[...]
.Experimente online!
fonte
Limpos ,
279269258 bytesExperimente online!
fonte
JavaScript (Node.js) ,
10482 bytesExperimente online! Resposta Python do porto da @ ovs.
fonte
Haskell,
828180 bytesEsta é uma porta da minha resposta limpa .
Experimente online!
-1, -1 graças a Laikoni
fonte
f
localmente sem parênteses ao redor do:
padrão, como emlet x<r@(a:_):s|...
.Limpo , 92 bytes
Experimente online!
O argumento do operador para
foldr
é um lambda com guarda; é analisado como:Eu enviei isso para Haskell .
fonte
Limpo ,
11010910410097 bytesExperimente online!
-1 byte graças a Keelan
fonte
Haskell , 82 bytes
Experimente online! Porto da minha resposta limpa .
Alternativa, também 82 bytes
Experimente online!
fonte
JavaScript (Node.js) , 98 bytes
Experimente online! Isso é um pouco mais longo que a outra resposta JS, mas usa uma abordagem diferente.
Explicação não-gasta e simplificada
fonte
JavaScript (Node.js) , 48 bytes, matrizes separadas por
,,
Experimente online!
JavaScript (Node.js) , 50 bytes, matrizes separadas por
|
Experimente online!
fonte