Considere una secuencia unidimensional de números dentro de un rango fijo, es decir
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
El gráfico cada vez mayor * ** es una línea que conecta todos los puntos de esta secuencia de izquierda a derecha, y siempre sube o se mantiene nivelado. Si es necesario, la línea se envuelve de arriba a abajo y continúa subiendo desde allí para encontrar el siguiente punto.
El objetivo de este desafío es dividir la secuencia en diferentes subsecuencias que no son decrecientes, de modo que cuando se trazan junto con un eje vertical limitado, se formará un gráfico cada vez mayor. Esto se realiza agregando un punto al final de una subsecuencia y al comienzo de la siguiente subsecuencia, de modo que el ángulo de la línea que cruza el límite superior se alinee con la línea que cruza el límite inferior y los dos puntos de cruce tener la misma coordenada horizontal. El ejemplo anterior daría el siguiente resultado:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
Y el gráfico correspondiente se verá de la siguiente manera: Y con el eje extendido para una mejor vista: La salida requerida es una lista de subsecuencias que forman las partes del Gráfico en constante aumento. No es necesario hacer una trama, pero te dará puntos de bonificación;). La salida debe separar claramente las subsecuencias de alguna manera.
Notas
- El rango siempre tendrá cero como límite izquierdo (inclusive), y el límite derecho será algún número entero N.
- La secuencia nunca contendrá valores que no estén dentro del rango.
- La primera subsecuencia no tiene un punto adicional al principio.
- La última subsecuencia no tiene un punto adicional al final.
- No es necesario proporcionar los índices iniciales que serían necesarios para trazar las subsecuencias.
Casos de prueba
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]
Tanteo
Este es el código de golf, gana el código más corto en bytes.
* No es una jerga real ** En realidad debería llamarse Gráfico nunca decreciente, como señaló @ngm, pero eso suena menos impresionante.
Respuestas:
Jalea , 20 bytes
Pruébalo en línea!
Las subsecciones se dividen por
0.5
.fuente
R ,
179158151 bytesPruébalo en línea!
Editar: El código ahora es una función y toma entrada. (Gracias a Giuseppe, user202729 y JayCe por señalarlo con calma)
Editar: -21 bytes sugeridos por Giuseppe.
Editar: -7 bytes eliminando
d=NULL;
.fuente
s[p+1]-((m+s[p+1])-s[p])
simplificas[p]-m
, y tienesd=c(c(...))
donde solod=c(...)
se requiere. Sospecho firmemente que hay una forma más golfista, pero esta sigue siendo una buena respuesta.d
incluso necesita ser inicializado?Python 2 , 60 bytes
La entrada es N, seguida de todos los puntos como argumentos individuales. Las subsecuencias en la salida están separadas por
0.5
.Pruébalo en línea!
Python 2 ,
927768 bytesLas subsecuencias están separadas por
[...]
.Pruébalo en línea!
fuente
Limpio ,
279269258 bytesPruébalo en línea!
fuente
JavaScript (Node.js) ,
10482 bytesPruébalo en línea! Puerto de la respuesta Python de @ ovs.
fuente
Haskell,
828180 bytesEste es un puerto de mi respuesta limpia .
Pruébalo en línea!
-1, -1 gracias a Laikoni
fuente
f
localmente sin paréntesis alrededor del:
patrón, como enlet x<r@(a:_):s|...
.Limpio , 92 bytes
Pruébalo en línea!
El argumento del operador
foldr
es una lambda con guardia; se analiza como:Lo porté a Haskell .
fuente
Limpias ,
11010910410097 bytesPruébalo en línea!
-1 byte gracias a Keelan
fuente
Haskell , 82 bytes
Pruébalo en línea! Puerto de mi respuesta limpia .
Alternativa, también 82 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 98 bytes
Pruébalo en línea! Esto es bastante más largo que la otra respuesta JS, pero utiliza un enfoque diferente.
Explicación sin golf y simplificada
fuente
JavaScript (Node.js) , 48 bytes, matrices separadas por
,,
Pruébalo en línea!
JavaScript (Node.js) , 50 bytes, matrices separadas por
|
Pruébalo en línea!
fuente