Dada una lista de enteros, se produce una diferencia directa en un orden / profundidad especificada.
Para la lista de enteros:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Las diferencias de avance en los distintos órdenes / profundidades son:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Entonces con la entrada de
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Devolverías la lista
(-142, 55, 27, 41, -269, 397)
Entrada
La entrada puede ser a través de STDIN o parámetros de función.
Un entero que especifica la profundidad a devolver. Esto será 0 a la longitud de la lista menos 1
Una lista de enteros para calcular la diferencia de avance para
Salida
La salida puede ser a través de STDOUT o devuelta por la función.
Las diferencias de avance para la profundidad especificada como una lista de enteros
Reglas
Las funciones integradas y de terceros que hacen esto directamente no están permitidas.
Se aplican restricciones de escapatoria estándar .
El código más corto gana
-
es el único verbo en esta función.Python,
6159 bytesAquí realizamos la resta comprimiendo todos menos el último de la lista con todos menos el primero de la lista.
zip(L[1:],L)
es equivalente azip(L[1:],L[:-1])
, debido azip
la naturaleza de tomar la longitud mínima de las dos listas:Una alternativa que es igual de larga (solo Python 2):
Lamentablemente, Python 2 no corta el final de la lista, por lo que no puedo hacerlo
map(int.__sub__,L,L[1:])
. Molesto, Python 3 lo hace , peromap
ya no devuelve una lista, por lo que esto termina siendo un byte más (60 bytes):Sin embargo, si permitimos que la entrada sea la profundidad seguida por la lista como
f(3, 2, 5, 6, 7, 5, 10, 25)
(es decir, profundidad 3 y lista[2, 5, 6, 7, 5, 10, 25]
), entonces esto es 56 bytes :Aquí hay otra alternativa que realmente molestaría a cualquiera que haya visto esto en el código de producción (este destruye la lista original):
fuente
L[1]-L.pop(0)
lugar.Mathematica
23 5723 bytesLa sugerencia de Martin Büttner, explotando la listabilidad de la resta.
p.ej
Rest@#-Most@#
realiza la resta que produce diferencias.Nest realiza dicha operación el número especificado de veces, operando siempre en la lista más reciente.
fuente
Haskell,
4034 bytesEjemplo de uso:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
que salidas[-142,55,27,41,-269,397]
.Cómo funciona: calcule repetidamente la diferencia entre elementos vecinos y almacene los resultados intermedios en una lista. Tome el
n
elemento th de esta lista.Editar: @Zgarb encontró 6 bytes para guardar. ¡Increíble!
fuente
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 bytesFunción recursiva simple, que se usa
map
para escanear la matriz yslice
soltar el primer elemento en cada llamada recursiva.Editar 3 bytes guardados, gracias @DocMax, sugerencia realmente inteligente
Prueba en la consola Firefox / FireBug
fuente
p
y guardar 3 caracteres:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 bytes
Toma la entrada como una matriz de estilo CJam y luego la profundidad:
e imprime el resultado como una matriz de estilo CJam.
Pruébalo aquí.
Explicación
fuente
Java,
122119 bytesEjemplo de uso: http://ideone.com/ALgYez
3 bytes gracias a Geobits: v)>
fuente
int
y simplemente asignarloi=e
con los demás.> <>
5350 bytesUso: rellene previamente la pila (-v en el intérprete de python) con profundidad primero, seguida de los enteros.
Por ejemplo:
Devoluciones
Gracias a Sp3000 por la ayuda.
fuente
?!
y mover algunos componentes en lugar de hacerlo0=?
?Preludio ,
95927978 bytesEl formato de entrada es
donde
N
es la profundidad de las diferencias yM
es el número de enteros en la entrada.M
Fue necesario agregar , porque Prelude no tiene forma de distinguir a0
desde el final de la entrada. La salida también es como una lista de enteros separada por una nueva línea. Tuve que asumir la especificación de Preludio ligeramente ajustada que diseñamos para este desafío , porque el Preludio estándar lee enteros como valores de bytes, lo que hace que sea imposible ingresar números negativos. Esencialmente, este es el intérprete de Python con unaNUMERIC_INPUT
bandera adicional .Como referencia, solo hay
483837 caracteres que no son espacios; el resto simplemente se necesitaba para alinear el código correctamente.Explicación
En Prelude, cada línea es una "voz" separada que opera en su propia pila. El programa se ejecuta columna por columna, donde se toman las voces separadas para operar "en paralelo". Todos los comandos son caracteres individuales y los paréntesis son bucles tipo Brainfuck (que se ingresan y repiten cada vez que la parte superior de la pila no es cero). Tenga en cuenta que la posición vertical del paréntesis de cierre es irrelevante: ponerlo en una voz diferente todavía cuenta como coincidencia con el paréntesis de apertura más reciente, y la pila que se verifica para la condición del bucle es siempre la voz donde
(
apareció. Ahora a este programa ...El programa básicamente se puede separar en dos partes. Las dos líneas inferiores se usan simplemente para la mayoría de los bucles del programa (excepto el bucle principal
N
), pasando1
s de un lado a otro. Las dos líneas superiores contienen el bucle principal y la diferencia real. La siguiente anotación tiene el código transpuesto, por lo que puedo anotar las columnas individuales:fuente
Python,
70686759 bytesVersión sin golf antes de que fuera recursiva:
fuente
R,
48 39 4644 bytesRecursión!
x
es el número de iteraciones a realizar yy
es un vector de enteros.if(x)
es cierto siempre y cuandox>0
.Recall
llama a la función actual pero con nuevos argumentos.Diff
genera las diferencias entre elementos consecutivos de lista / vector.Versión anterior:
fuente
Recall()
.Python,
928786 bytesEste es mi primer golf de Python. Cualquier sugerencia será apreciada :)
56 bytes gracias a Sp3000: Dfuente
append
end+=f-e,
. En general, para code-golf nunca necesitará usarL.append
debido a esto.c,
6855 bytesEsto podría estar tomando libertades con la especificación de entrada un poco. Una matriz int se construye de tal manera que el elemento 0 es la profundidad y los elementos 1 a (n + 1) son los elementos de la lista de entrada 0 a n. Luego, la dirección del elemento 1 se pasa a la función.
La matriz debe estar terminada en cero. La matriz se edita en su lugar.
P.ej:
http://ideone.com/m5PDgF
fuente
int *l
?Powershell
115111 bytesEjecutar como tal:
Salida:
Mover una llave rizada a un lugar diferente permite que esto muestre cada paso de la respuesta.
fuente
STATA, 126 bytes
Espera la entrada como un entero que representa la profundidad, seguido de una lista de enteros separados por espacios, ambos dados a través del indicador estándar. La salida es una lista de enteros separada por una nueva línea.
Primero convierte la lista de enteros (que ve como 1 cadena larga) en una lista de variables locales cuyos nombres son 1,2,3, ... Luego calcula las diferencias hacia adelante al establecer el valor de la variable local enésima como el valor de la variable local y + 1ª menos el valor de la variable local y (18-10 = 8), que sobrescribe los valores existentes solo después de su uso. Hace esto $ a (valor de la variable global a) veces. Luego muestra el valor de cada variable local, 1 a la vez.
fuente
T-SQL, demasiados :)
Cuando vi este problema por primera vez, me preguntaba si había una manera de hacer esto en una consulta. Si bien es trivial para la mayoría de los idiomas, no es tanto para la consulta SQL.
La entrada entra en las variables @ (para profundidad) y @L para la lista de enteros. @L es un tipo de tabla definida por el usuario
Configuración de entrada
La consulta con algunos comentarios.
Resultado
fuente
Japt
-h
,175 bytes12 bytes guardados gracias a @Shaggy
Pruébalo en línea!
fuente
äÏ-X
conän
ambos para ahorrar 2 bytes más.SmileBASIC, 76 bytes
Finalmente una razón para usar
ARYOP
!fuente
Clojure, 47 bytes
Una simple recursión en la función anónima. Guarda 1 byte si el orden de los argumentos se intercambia como ahora
%2
ocurre con más frecuencia que%
.fuente
Jalea , 2 bytes
Pruébalo en línea!
Explicación
Respuesta muy directa: P
fuente
Japt , 7 bytes
Un par de alternativas que había puesto a disposición de Luis para su solución .
Intentalo
10 bytes
Intentalo
fuente