La adición de la pirámide invertida es el proceso de tomar una lista de números y sumarlos consecutivamente hasta llegar a un número.
Cuando se le dan los números 2, 1, 1
, ocurre el siguiente proceso:
2 1 1
3 2
5
Esto termina en el número 5
.
TU TAREA
Dado el lado derecho de una pirámide invertida (ascendente), escriba un programa o función que devolverá la lista original.
Nuevo desafío adicional : intente hacer esto en menos de O (n ^ 2)
EJEMPLO
f([5, 2, 1]) => [2, 1, 1]
f([84,42,21,10,2]) => [4,7,3,8,2]
NOTA: La Pirámide invertida nunca estará vacía y siempre consistirá en enteros positivos SOLAMENTE.
code-golf
math
fastest-algorithm
algorithm
Gemidos
fuente
fuente
Try doing this in less than O(n)
¿seguramente es imposible asignar una matriz de tamaño n o cambiar elementos O (n) en ella más rápido que la complejidad O (n)?Respuestas:
JavaScript (ES6),
62 58 4946 bytesGuardado 3 bytes gracias a @Oliver
Devuelve la lista como una cadena separada por comas.
Pruébalo en línea!
Comentado
fuente
Haskell , 22 bytes
Pruébalo en línea!
fuente
Haskell, 42 bytes
Pruébalo en línea!
fuente
TI-BASIC, 54 bytes
La entrada es la lista del lado derecho del triángulo
Ans
, como se describe en el desafío.La salida es la fila superior de dicho triángulo.
Ejemplos:
Explicación:
Esta solución abusa del hecho de que el triángulo formado usando el lado derecho del triángulo como el inicio termina siendo el cambio en cada elemento.
En otras palabras,
se convierte en:
Por lo tanto, la lista resultante es el lado derecho de este nuevo triángulo, que puede formarse estableciendo el último elemento en el índice de la longitud de su lista principal en la lista resultante.
Nota: TI-BASIC es un lenguaje tokenizado. El recuento de caracteres no es igual al recuento de bytes.
fuente
Jalea , 6 bytes
Un enlace monádico que acepta una lista de enteros que produce una lista de enteros.
Pruébalo en línea!
¿Cómo?
Construye todo el triángulo y luego extrae los elementos requeridos.
fuente
U
s en lugar deṚ
!IƬUZḢA
trabajaría con la pregunta dada también; Me pregunto si hay un byte guardado en alguna parte ...ạƝƬZṪ€
funciona también pero nuevamente es un seis.MathGolf ,
1411 bytesPruébalo en línea!
Explicación
fuente
Python 2 , 56 bytes
Una función recursiva que acepta una lista de enteros positivos que devuelve una lista de enteros no negativos.
Pruébalo en línea!
fuente
Jalea , 5 bytes
Pruébalo en línea!
Podemos suponer que toda la pirámide es positiva, por lo que podemos usar una operación && en lugar de una operación "correcta".
fuente
Pari / GP , 36 bytes
Basado en el comentario de @Lynn :
Pari / GP tiene una matriz incorporada para Pascal, y su inverso es exactamente la matriz que necesitamos:
Pruébalo en línea!
fuente
R ,
6967 bytesPruébalo en línea!
Devuelve un vector de columna.
-2 bytes gracias a Kirill L.
También basado en el comentario de Lynn :
Es más largo que la otra respuesta R, pero fue un enfoque interesante para tomar y tratar de jugar al golf.
fuente
Javascript (ES6), 127 bytes
Código original
Oh, perdí como ... mucho ... a la respuesta anterior ...
fuente
Wolfram Language (Mathematica) , 57 bytes
Pruébalo en línea!
fuente
05AB1E ,
1211 bytesPuerto de @JonathanAllan jalea respuesta 's , aunque estoy jalea sobre órdenes internas más convenientes de jalea en este caso. ;)
-1 byte gracias a @Emigna .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
R.¥.Γ¥}¨
comenzando desde la lista cuyo delta es la entrada.R ,
55635553 bytesPruébalo en línea!
-2 bytes gracias a Giuseppe.
fuente
Perl 6 , 37 bytes
Pruébalo en línea!
Se reduce repetidamente por sustracción por elementos, y luego devuelve el último número de cada lista a la inversa.
Explicación:
fuente
Python 2 , 78 bytes
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 164 bytes
Pruébalo en línea!
fuente
Carbón de leña , 19 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Recorra una vez por cada término en la lista original.
Imprima el último término de la lista, pero mueva el cursor al comienzo de la línea anterior, de modo que los términos se muestren en orden inverso.
Calcule los deltas, insertando un valor ficticio al principio para que podamos usar una operación que no cambie la longitud de la lista.
fuente
APL + WIN, 34 o 28 bytes
Pruébalo en línea! Cortesía de Dyalog Classic.
Solicita el vector del lado derecho.
o implementando el enfoque de @ Lynn:
¡Pruébelo en línea! Cortesía de Dyalog Classic
Solicita el vector del lado derecho.
fuente
Adjunto , 29 bytes
Pruébalo en línea!
Simplemente itera la
Delta
función hasta que esté vacía. Mucho más corto que laPeriodicSteps
solución muy detallada ...fuente
C, 76 bytes
entrada :
(*a = pointer to array, n = last element's index of that array)
salida :
return int* = output
Explicación
va del lado derecho hacia arriba, ya que los últimos elementos son los mismos tanto en la entrada como en la salida, la función interior del bucle simplemente encuentra los siguientes números más altos en el triángulo que gradualmente llega a la parte superior dejando la respuesta intacta al final.
sin golf (de C ++)
fuente
Japt ,
119 bytesIntentalo
2 bytes guardados gracias a Oliver.
1211 bytesIntentalo
1 byte guardado gracias a Oliver.
fuente
y(f)
es bastante malo, ¡pero olvidar completamente la nueva línea es imperdonable! Se actualizará en breve. Gracias :)Julia 0.6 , 44 bytes
Pruébalo en línea!
El mismo principio iterativo que mi respuesta R.
Julia 0.6 , 55 bytes
Pruébalo en línea!
@ Algoritmo de Lynn (inverso de la matriz de Pascal multiplicado por la entrada).
fuente