Deltas inversos de una matriz
Su tarea es, dada una matriz de enteros con signo de 32 bits, recompilarlo con sus deltas inversos. Por ejemplo, la lista
1 3 4 2 8
sostiene los deltas:
2 1 -2 6
que luego se niegan, produciendo:
-2 -1 2 -6
y recompilado, produciendo:
1 -1 -2 0 -6
como resultado final
De entrada y salida
Se le dará una lista / matriz / tabla / tupla / pila / etc. de enteros con signo como entrada a través de cualquier método de entrada estándar.
Debe generar los datos modificados una vez más en cualquier forma aceptable, siguiendo el método de inversión delta anterior.
Recibirá N entradas 0 < N < 10
donde cada número cae dentro del rango-1000 < X < 1000
Casos de prueba
5 6 7 8 -> 5 4 3 2
1 3 4 2 8 -> 1 -1 -2 0 -6
32 18 25 192 199 -> 32 46 39 -128 -135
Notas
- No está restringido al método basado en delta: si puede resolver el método más fácil (que no debería ser demasiado difícil) , puede usarlo libremente.
- Como se indicó anteriormente, siempre recibirá al menos 1 entrada y no más de 9.
- El primer número de la salida siempre debe ser el primer número de la entrada, si este no es el caso, su método es incorrecto.
- Solo se acepta la entrada de salida estándar
- Se aplican lagunas estándar
- Este es el código de golf , por lo que gana el conteo de bytes más bajo.
- ¡Que te diviertas!
Tenemos un ganador.
Dennis 's Jelly Answer at Tiny 3 Bytes se ha llevado a casa el oro, debido al hecho de que tengo la impresión de que no puede ser vencido.
Estaba un poco decepcionado porque no pude ver una respuesta basada en la especificación original, sin embargo, más tarde podría ofrecer una recompensa por eso.
Respuestas:
Jalea ,
73 bytesPruébalo en línea!
Antecedentes
Los deltas de (a, b, c, d) son b - a , c - b , y d - c . Reducción acumulativa (a, b - a, c - b, d - c) por sustracción de rendimientos a - (b - a) = 2a - b , 2a - b - (c - b) = 2a - c , y 2a - c - (d - c) = 2a - d , entonces el resultado correcto es (2a - a, 2a - b, 2a - c, 2a - d) .
Cómo funciona
fuente
Python 2, 30 bytes
Pruébalo en Ideone .
Cómo funciona
Los deltas de (a, b, c, d) son b - a , c - b , y d - c . La reducción acumulativa (a, b - a, c - b, d - c) por sustraccióng produce a - (b - a) = 2a - b , 2a - b - (c - b) = 2a - c , y 2a - c - (d - c) = 2a - d , entonces el resultado correcto es (2a - a, 2a - b, 2a - c, 2a - d) .
fuente
Mathematica, 8 bytes
Función sin nombre que toma un número indeterminado de argumentos. Esto utiliza una forma "fácil": niega la lista completa y agrega dos veces el primer elemento (original).
Llamado por ejemplo como
2#-{##}&[1,3,4,2,8]
; devuelve una lista como{1,-1,-2,0,-6}
.fuente
JavaScript (ES6), 21
Thx @Dennis
fuente
05AB1E , 4 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Python, 44 bytes
Esto utiliza el "método más fácil".
fuente
Pyth, 5 bytes
Intérprete en línea!
fuente
R,
231817 bytes¡vectorización automática e impresión predeterminada al rescate!
fuente
2*x[1]-x
lugar?Ruby, 23 bytes
No particularmente original.
fuente
Perl 6 ,
4016 bytesExpandido:
fuente
Brain-Flak , 76 Bytes
Pruébalo en línea!
Explicación:
fuente
Haskell,
2019 bytesLa misma solución que Dennis, gracias por su idea de
2a - x
.Guardado un byte gracias a Christian Severs.
fuente
f(x:r)=x:map(2*x-)r
x
al frente.Pyke,
54 bytesPruébalo aquí!
fuente
PHP, 48 bytes
Usando la técnica de Dennis. Usar como:
Versión de 55 bytes no Dennis:
fuente
a&
lugar de''<
y dos bytes con en_
lugar de' '
.APL, 8 bytes
Explicación:
Casos de prueba:
fuente
Laberinto , 34 bytes
Pruébalo en línea!
Utiliza el enfoque de @Dennis
(2a - a, 2a - b, 2a - c, 2a - d)
.Las baldosas amarillas son para controlar el flujo. En este lenguaje de programación 2D, el programa comienza en el mosaico superior izquierdo que se mueve hacia el este para comenzar. En los cruces, la dirección está determinada por el signo de la parte superior de la pila principal. Los azulejos en blanco son paredes.
Verde
Esta sección guarda 2a en la pila auxiliar.
?
Obtenga el primer número y empújelo a la parte superior de la pila principal:
Duplicar la parte superior de la pila._2
Empuja dos hacia la parte superior de la pila*
Popy
, popx
, pushx*y
}
Mueva la parte superior de la pila principal a la parte superior de la pila auxiliar._
Empuja cero a la parte superior de la pilanaranja
Esta sección resta 2a del número actual, niega el resultado, emite el resultado, obtiene el siguiente carácter (el delimitador), sale si EOF, emite una nueva línea, obtiene el siguiente número.
"
Noop Si viene desde el norte, la parte superior de la pila será cero y el programa continuará hacia el sur. Si viene desde el oeste, la parte superior de la pila será una y el programa girará a la derecha (continuando hacia el sur);
Desecha la parte superior de la pila. Como el cero o uno solo se usa para controlar el flujo, debemos descartarlos{
Mueva la parte superior de la pila auxiliar (2a) a la parte superior de la pila principal:
Duplicar la parte superior de la pila principal}
Mueva la parte superior de la pila principal a la parte superior de la pila auxiliar-
Popy
, popx
, pushx-y
\`` Negate the top of the stack. This and the previous three operations have the effect of
- (x-2a) = 2a-x`!
Haga estallar la parte superior de la pila y envíela como un número.,
Empuje el siguiente carácter (que será el delimitador) o negativo si EOF)
Incrementa la parte superior de la pila. Si el último carácter es EOF, entonces la parte superior de la pila ahora será cero y el programa continuará directamente hasta la@
salida. Si el último carácter era un delimitador, entonces la parte superior de la pila será positiva, haciendo que el programa gire a la derecha y continúe hacia el este hasta el\
\
Salida de una nueva línea?
Obtén el siguiente número_1
Empuja uno hacia la parte superior de la pila para girar a la derecha en el crucefuente
Laberinto , 24 bytes
El formato de entrada y salida son listas separadas por salto de línea (aunque el formato de entrada es en realidad mucho más flexible). El programa termina con un error.
Pruébalo en línea!
Tengo otras dos soluciones en este recuento de bytes, que funcionan básicamente igual pero usan un flujo de control algo diferente.
Explicación
El puntero de instrucciones (IP) comienza a moverse hacia el este a lo largo de la primera línea, pero todos los comandos anteriores
?
son básicamente no operacionales en el estado global, ya que no estamos usando comandos de profundidad de pila en ninguna parte. Entonces, el código realmente comienza en el?
oeste, ya que la IP se da vuelta cuando llega al callejón sin salida.Por lo tanto, el código comienza con el siguiente bit lineal de código:
Esto simplemente nos configura con una copia de
2a
para usar la[2a - a, 2a - b, 2a - c, ...]
fórmula.Ahora ingresamos al bucle principal del programa, utilizando un truco bastante estándar para recorrer una sola línea de código:
Tenga en cuenta que la pila estará vacía cada vez que toquemos,
<
por lo que sabemos que obtendremos ceros allí. La<
gira entonces toda la línea izquierda, tomando la IP con ella, por lo que tenemos esto:La IP debe moverse hacia la izquierda, donde la
>
línea vuelve a su lugar original (para prepararla para la próxima iteración). Luego, la línea simplemente se ejecuta de derecha a izquierda, por lo que una iteración de bucle simple es esta:El problema al trabajar con un bucle de este tipo es que no puede trabajar con ninguna forma de ejecución condicional, ya que Labyrinth no tiene una forma de omitir código. Por lo tanto, terminaremos el programa con una división por cero cuando lleguemos a EOF. Aquí hay un desglose de cada iteración de bucle.
fuente
C ++ 14, 36 bytes
Como lambda sin nombre modificando su entrada:
Usando la técnica de Dennis. Funciona para cualquier contenedor como
int[]
ovector<int>
.Uso:
fuente
CJam, 16 bytes
Formato de entrada:
[1 2 3 4]
. Utiliza la fórmula fácil.Explicación:
Perdón por el enlace de prueba. Supongo que a SE no le gustan los enlaces con corchetes dentro.
fuente
Pushy , 9 bytes
Dar argumentos como valores separados por comas en la línea cmd:
$ pushy invdeltas.pshy 1,3,4,2,8
. Aquí está el desglose, con ejemplo de pila:Nota: esto puede ser de 8 bytes si se permite la salida hacia atrás:
@&2*K~-_
fuente
Perl, 26 + 3 (
-pla
bandera) = 29 byteso
Utilizando:
fuente
Dyalog APL , 5 bytes
-+2×⊃
este es un tren de 5, se analiza como dos trenes de 3 trenes anidados ("horquillas"):
-+(2×⊃)
se lee como: la negación (
-
) de toda la matriz más (+
) dos veces (2×
) el primer elemento (⊃
)fuente
ised, 11 bytes
Invocación:
ised --l 'file with input.txt' '2*$1_0-$1
(editar: corregido robando el álgebra de Dennis)
fuente
Maravilla , 17 bytes
No estoy seguro de por qué no publiqué esto antes. Uso:
Más legible:
fuente