Debería escribir un programa o función que reciba una lista de enteros distintos como entrada y salida o que devuelva el número de apariciones de los números de entrada en la siguiente pirámide numérica invertida.
A partir de la lista original en cada paso, creamos uno nuevo con los valores máximos de cada par de números adyacentes (por ejemplo, se 5 1 2 6
convierte en 5 2 6
). Nos detenemos cuando solo hay un número en la lista.
La pirámide completa para 5 1 2 6
es
5 1 2 6
5 2 6
5 6
6
El número resultante de ocurrencias son 3 1 2 4
(para 5 1 2 6
respectivamente).
Entrada
- Una lista de uno o más enteros sin repetición. (por ejemplo,
1 5 1 6
no es válido)
Salida
- Una lista de enteros positivos. El
i
elemento th de la lista es el número de ocurrencias deli
número de entrada th en la pirámide.
Ejemplos
Entrada => Salida
-5 => 1
8 4 => 2 1
5 9 7 => 1 4 1
1 2 3 9 8 6 7 => 1 2 3 16 3 1 2
6 4 2 1 3 5 => 6 4 2 1 3 5
5 2 9 1 6 0 => 2 1 12 1 4 1
120 5 -60 9 12 1 3 0 1200 => 8 2 1 3 16 1 4 1 9
68 61 92 58 19 84 75 71 46 69 25 56 78 10 89 => 2 1 39 2 1 27 6 5 1 6 1 2 14 1 12
Este es el código de golf, por lo que gana la entrada más corta.
Bonus puzzle: ¿puedes resolver el problema a O(n*log n)
tiempo?