Debería escribir un programa o función que tome un número entero no negativo k
y una lista entera ordenada L
como entrada y salida o devuelva una lista suavizada M
.
M
se crea a partir de la lista ascendente L
insertando en la mayoría de los k
elementos enteros mientras se mantiene la lista ordenada. Los enteros insertados deben elegirse de manera que la diferencia máxima hacia adelante M
sea lo más pequeña posible. Llamaremos a este valor más pequeño "suavidad".
Las diferencias de avance de la lista -1 3 8 11 15
son 4 5 3 4
y la diferencia de avance máxima es 5
.
Con las 2
inserciones, la suavidad de 2 10 15
es 4
y una salida posible es 2 6 10 11 15
con diferencias hacia adelante 4 4 1 4
.
Entrada
- Un entero no negativo
k
. - Una lista entera ascendente
L
con al menos 2 elementos.
Salida
- La lista entera ascendente
M
. - Si existen múltiples respuestas correctas, salga exactamente una de ellas (cualquiera es suficiente).
- Su solución tiene que resolver cualquier caso de prueba de ejemplo en menos de un minuto en mi computadora (solo probaré casos cercanos. Tengo una PC por debajo del promedio).
Ejemplos
Entrada ( k
, L
) => Una salida posible y la diferencia máxima hacia adelante (que no es parte de la salida) entre paréntesis
0, 10 20 => 10 20 (10)
2, 1 10 => 1 4 7 10 (3)
2, 2 10 15 => 2 6 10 11 15 (4)
3, 2 10 15 => 2 5 8 10 12 15 (3)
5, 1 21 46 => 1 8 15 21 27 33 39 46 (7)
5, 10 20 25 33 => 10 14 18 20 24 25 29 33 (4)
3, 4 4 6 9 11 11 15 16 25 28 36 37 51 61 => 4 4 6 9 11 11 15 16 22 25 28 36 37 45 51 59 61 (8)
15, 156 888 2015 => 156 269 382 495 608 721 834 888 1001 1114 1227 1340 1453 1566 1679 1792 1905 2015 (113)
8, -399 -35 -13 56 157 => -399 -347 -295 -243 -191 -139 -87 -35 -13 39 56 108 157 (52)
5, 3 3 3 => 3 3 3 3 (0)
Este es el código de golf, por lo que gana la entrada más corta.
rF<seq>
para desempaquetar tuplas de dos elementos.u
trabajaba de manera diferente ye
no existía,urGHd
era más corto querhd@d1
. Lo pondré en la página de trucos de Pyth.U
.yvz
falla cuandovz = 0
, perohvz
hace el truco.Pitón 2, 104
Intenta diferentes incrementos máximos
d
, comenzando desde 1 y contando hacia arriba. Rellena los huecos de cada par(p,x)
de elementos sucesivos al tomar cadad
número en el hueco. SiM
es más largo de lo que permite la cuota, recurre para probar una más altad
. De lo contrario, devuelve una lista de los elementos agregados y originales, ordenados.Esto hace todos los casos de prueba sin demora en mi máquina.
fuente