Suma de matriz inversa

34

Su programa debe tomar una matriz como entrada.

La matriz:

  1. Siempre será 1 dimensional
  2. Solo contendrá enteros
  3. Puede estar vacío

El programa debe revertir la matriz y luego agregar los elementos al original, por ejemplo:

Entrada: [1, 2, 3]

Original: [1, 2, 3]

Invertido: [3, 2, 1]

[1, 2, 3]
 +  +  +
[3, 2, 1]

[1+3, 2+2, 3+1]

Salida: [4, 4, 4]


Casos de prueba:

#In             #Out
[8, 92],        [100, 100]
[1, 2, 3],      [4, 4, 4]
[5, 24, 85, 6], [11, 109, 109, 11]
[],             []
[999],          [1998]

Este es el , gana el código más corto (en bytes).

Noah Cristino
fuente
J 3 bytes. El programa es t. t =: + |.
Richard Donovan
@RichardDonovan ¡Buena respuesta! ¿Puedes enviar una respuesta en lugar de un comentario, por favor :)
Noah Cristino

Respuestas:

13

Haskell , 20 bytes

Ahorro de 5 bytes cambiando a un punto libre como lo sugiere nimi

zipWith(+)=<<reverse

Pruébalo en línea!

Asistente de trigo
fuente
44
ir pointfree: zipWith(+)=<<reverse.
nimi
@nimi Wow No pensé hacer eso, pero eso es bastante inteligente.
Wheat Wizard
¿Dónde pongo la matriz? Intenté argumentos y aportes sobre TIO
Noah Cristino
@NoahCristino Arreglé el TIO. Esta es una función sin puntos, por lo que solo debe poner la entrada después de la función, sin embargo, Haskell requiere una mainpara compilar.
Wheat Wizard
3
@maple_shaft: utilizamos =<<desde la mónada función que se define como: (=<<) f g x = f (g x) x. Aquí, escrito en infijo: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
nimi
11

Jalea , 2 bytes

+U

Pruébalo en línea!

o

+Ṛ

Pruébalo en línea! (Gracias @ Mr. Xcoder por el segundo programa)

explicación, aunque es bastante evidente

+U  Main link
+   Add, vectorizing, 
 U                    the input, reversed

+Ṛ  Main link
+   Add, vectorizing,
 Ṛ                    the input, reversed, without vectorizing (same thing for depth-1 lists)

Para una matriz vacía [], esto no genera nada. Eso es correcto. La representación de Jelly de una lista vacía es simplemente nada. Tenga en cuenta que la representación de Jelly de una lista con un solo elemento es solo el elemento en sí. Agregue ŒṘal código para ver la representación interna de Python de la salida.

Hiperneutrino
fuente
Encontré 2 problemas. 1) Cuando se prueba en [9]él, genera 18 en lugar de [18], y 2) cuando se prueba en []él no genera nada.
Noah Cristino
@NoahCristino No es un programa completo, y ya hay una explicación para eso en la respuesta.
Erik the Outgolfer
Así que supongo que esto está bien, así es como Jelly lo saca
Noah Cristino
@NoahCristino Sí. Agregué una parte al final de mi respuesta para que pueda poner ese átomo al final del código para ver cómo Python lo imprimiría.
HyperNeutrino
+Ṛtambién funciona
Sr. Xcoder
11

JavaScript (ES6), 27 bytes

a=>[...a].map(e=>e+a.pop())

Neil
fuente
Oh, hombre, ya casi estaba allí, pero no pensé en usar el operador de propagación para hacer el clon.
Rick Hitchcock
¿Se puede agregar el incrustado probarlo para JavaScript?
Noah Cristino
9

Python 2, 32 bytes

lambda l:map(sum,zip(l,l[::-1]))

Solución alternativa sin zip(35 bytes):

lambda l:map(int.__add__,l,l[::-1])

Pruébalo en línea!

vaultah
fuente
7

Python 2 , 40 bytes

lambda l:[i+j for i,j in zip(l,l[::-1])]

Pruébalo en línea!

La otra respuesta más corta de Python reemplaza una comprensión de lista con map. Ojalá hubiera pensado hacer eso más rápido. ; -;

totalmente humano
fuente
1
¡Pasa todas mis pruebas!
Noah Cristino
7

Japt , 7 bytes

mÈ+Ug~Y

Pruébalo en línea! con la -Qbandera para formatear la matriz de salida.

Explicación

Implícito: U= matriz de entrada

Asigne la entrada mediante la siguiente función ...

+Ug

El valor, más el valor en la matriz de entrada en el índice ...

~Y

-(index+1), que obtiene elementos desde el final de la matriz.

Justin Mariner
fuente
1
¡Buen trabajo! ¡Me gusta la entrada múltiple!
Noah Cristino
1
Realmente me gusta el intérprete Japt de entradas múltiples. ¡Buen trabajo!
Oliver
Eso es realmente genial :-) Agregaría esa característica al intérprete "oficial", pero con el diseño actual es algo inextensible ...
ETHproductions
6

Python 2 , 33 32 bytes

-1 byte gracias a @xnor

lambda l:[i+l.pop()for i in l*1]

Pruébalo en línea!

ovs
fuente
Pasé todas mis pruebas buen trabajo :)
Noah Cristino
Qué método tan inusual. l*1Guarda un byte.
xnor
Tengo dificultades para entender el par l*1, cualquier elaboración
dhssa
@dhssa l*1hace una copia de la lista l. Si no hiciéramos una copia, pop()eliminaríamos elementos de la lista antes de acceder a ellos en el bucle for.
ovs
Gracias por la explicación, lo tengo ahora. buen truco para saber para codificar.
dhssa
5

C # (.NET Core) , 61 60 bytes

-1 byte gracias a TheLethalCoder

a=>a.Reverse().Zip(a,(x,y)=>x+y).ToArray()

Pruébalo en línea!

El recuento de bytes también incluye:

using System.Linq;

Para explicación: la función Zip en LINQ toma dos colecciones y ejecuta una función dada para todos los elementos correspondientes, es decir. los dos primeros elementos juntos, los dos segundos elementos, etc.

Grzegorz Puławski
fuente
1
Buena respuesta. Gracias por el comentario sobre la entrada.
Noah Cristino
1
Hola y bienvenidos a PPCG! No necesita el punto y coma final en el recuento de bytes. Creo que puede devolver la colección directamente desde la Zipllamada para que no necesite la ToArray(). ¡Buen trabajo!
TheLethalCoder
@TheLethalCoder Gracias, y agregué ToArray () ya que el desafío es sobre matrices, por lo que quería que la lambda autónoma fuera matriz -> matriz.
Grzegorz Puławski
4

CJam , 7 bytes

{_W%.+}

Pruébalo en línea!

Erik el Outgolfer
fuente
Sale ""para [], eso es raro. No es tu culpa solo el idioma.
Noah Cristino
@NoahCristino Esa es la representación de CJam [].
Erik the Outgolfer
Sí, es difícil tener una salida estándar para mi desafío, ya que muchos idiomas muestran matrices de manera diferente especialmente [], y [4], por lo tanto, está bien.
Noah Cristino
4

APL (Dyalog) , 3 bytes

⌽+⊢

Pruébalo en línea!

Explicación

          The argument reversed
+           Plus
          The argument
Kritixi Lithos
fuente
1
ninja'd. Necesito pasar a un teclado APL ... xD
Uriel
@Uriel Siempre estoy en mi teclado APL: D
Kritixi Lithos
Amo la simplicidad. Sale ⌽+⊢sin entrada
Noah Cristino
@NoahCristino Se especifica una entrada vacía con el vector vacío. Sin argumento, imprime el tren por sí mismo
Kritixi Lithos
4

R , 17 16 bytes

-1 byte gracias a djhurio

rev(l<-scan())+l

Lee de stdin; devuelve el vector; numeric(0)es el vector numérico de longitud cero para la lista vacía.

Pruébalo en línea!

Giuseppe
fuente
Para una "matriz" vacía, regresanumeric(0)
Noah Cristino
1
@NoahCristino un vector vacío se representa como numeric(0)en R.
Leaky Nun
Esta bien. @LeakyNun
Noah Cristino
1
rev(l<-scan())+l, 16 bytes?
djhurio
Para el registro, una alternativa funcional R + pryr es solo un byte más:pryr::f(rev(x)+x)
JayCe
4

Clojure, 20 17 bytes

3 bytes guardados gracias a @MattPutnam

#(map +(rseq %)%)

Parece ser bastante competitivo con los idiomas que no son de golf.

Véalo en línea

acantilado
fuente
Usar en rseqlugar de reverse.
MattPutnam
3

Pyth, 3 bytes

+V_

Pruébalo aquí

Erik el Outgolfer
fuente
¡Yay pasa todas mis pruebas!
Noah Cristino
Equivalente:sV_
Sr. Xcoder
@ Mr.Xcoder no importa
Erik the Outgolfer
3

PowerShell , 26 bytes

($a=$args)|%{+$a[--$i]+$_}

Pruébalo en línea!

Toma datos como argumentos de línea de comandos.

Joey
fuente
¿Puedes agregar un TIO? y un enlace bajo este nombre: codegolf.stackexchange.com/a/135427/61877
Noah Cristino
@NoahCristino: ¿Te gusta esto? No he usado esa cosa hasta ahora, así que no tengo idea de lo que he hecho mal. Por cierto, si espera que las personas utilicen un determinado servicio en sus respuestas, indíquelo en la descripción de la tarea.
Joey
Esta bien. No es necesario, solo hace que las respuestas sean de mayor calidad y más fáciles de probar para futuros espectadores.
Noah Cristino
3

C, 49 bytes

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}
orlp
fuente
¿No debería a,n,bser a,b,no algo así?
Erik the Outgolfer
@EriktheOutgolfer No, bno es un parámetro para la función, solo una definición adicional incluida por razones de golf. adebe ser un puntero a enteros, yn debe ser cuántos enteros hay en la matriz.
orlp
¿Podría agregar un enlace TIO?
Noah Cristino
3

PowerShell , 40 32 bytes

($n=$args)|%{$n[-++$i]+$n[$i-1]}

Pruébalo en línea!

Toma datos como argumentos de línea de comandos individuales, lo que está permitido como uno de los formatos de lista nativos para PowerShell. Luego recorre cada elemento (es decir, una forma más corta de recorrer los índices), agregando el elemento que cuenta desde atrás ( -1indexado) al elemento actual ( 0indexado, de ahí el decremento -1). Esos quedan en la tubería y la salida es implícita.

Guardado 8 bytes gracias a @briantist

AdmBorkBork
fuente
no genera una matriz.
Noah Cristino
1
La entrada / salida de @NoahCristino PowerShell es, en general, extraña. Se está emitiendo como una matriz, es simplemente no hay nada captura de dicha matriz, y así, cuando lo implícito Write-Outputsucede, se pone las cosas en stdout un elemento por línea. Por ejemplo, puede ver aquí que, cuando se captura, el objeto es de hecho un arraytipo.
AdmBorkBork
Lo suficientemente bueno entonces :) al menos lo intentó
Noah Cristino
Estoy en móvil y no puedo probar tan fácilmente, pero ¿no es más corto de 1 byte para eliminar el paramy luego reemplazar 1..$ncon 1..($n=$args)?
briantist
@briantist No del todo, pero me diste una forma diferente de pensarlo, ahorrando un montón de bytes. ¡Gracias!
AdmBorkBork
3

Java 8, 61 57 56 53 bytes

a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}

-1 byte y corrección de errores gracias a @Nevay .
-3 bytes gracias a @ OliverGrégoire .

(Era un puerto de (y golfizado por 4 8 bytes) de la respuesta C # de @jkelm , pero ahora es una solución más corta diferente gracias a @ OliverGrégoire ).

Explicación:

Pruébalo aquí

El método modifica la matriz de entrada para guardar bytes, por lo que no es necesario un tipo de retorno.

a->{                    // Method with integer-array parameter and no return-type
  for(int l=0,          //  Left-integer (starting at 0)
          r=a.length;   //  Right-integer (starting at the length of the input-array)
      l<r;              //  Loop as long as left is smaller than right
    a[l]=               //   Change the number at the current left index to:
         a[--r]+=a[l++] //    The number at the right index + itself
                        //    (The += adds the number at the left index also to the right index)
                        //    (And the --/++ increases/decreases the indexes by 1,
                        //     until we've reached the middle of the array)
  );                    //  End of loop
}                       // End of method
Kevin Cruijssen
fuente
1
Puede guardar 1 byte usando a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay
1
Además de eso, el código falla para matrices con una longitud impar 1,2,3 (devuelve en 4,2,4lugar de 4,4,4), el bucle debe ejecutarse siempre que2*i<l no i<l/2.
Nevay
@Nevay Gracias. Sabía que debería ser posible jugar al golf l-i-1, pero no se me ocurrió.
Kevin Cruijssen
2
53 Bytes: a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}.
Olivier Grégoire
1
@ OlivierGrégoire Gracias. Y tu ly rtiene sentido para tu implementación, así que también los he usado (y he agregado una explicación).
Kevin Cruijssen
2

Ohm , 3 bytes

DR+

Pruébalo en línea!

totalmente humano
fuente
Produce flotantes, pero nunca dije que no podía hacerlo, así que está bien, y porque []no genera nada, pero ese es solo el lenguaje.
Noah Cristino
2

En realidad , 4 bytes

;R♀+

Pruébalo en línea!

Erik el Outgolfer
fuente
Perfecto, buen trabajo.
Noah Cristino
Erik, resolviendo mi problema en 7 idiomas xD
Noah Cristino
@NoahCristino Sí, estoy tratando de mantenerlo por debajo de 15 ...;)
Erik the Outgolfer
Voy a tener que comenzar a agregar un -1 por cada envío xD
Noah Cristino
2

anyfix , 3 bytes

"U+

La versión en TryItOnline! es una versión desactualizada de anyfix, que contiene algunos errores fatales, como no poder agregar listas debido a errores tipográficos en el código fuente. Use el código en GitHub en su lugar.

"U+  Program
"    Duplicate top of stack
 U   Reverse top of stack if it is a list (which it should be...)
  +  Add, vectorizing for lists
Hiperneutrino
fuente
2

Neim , 2 bytes

Esta es una función que toma la entrada en la parte superior de la pila y las salidas en la parte superior de la pila.

𝕓𝔻

Pruébalo en línea!

Okx
fuente
¿Está permitido modificar la pila de entrada a través del código Neim real en lugar de los métodos de entrada normales?
LiefdeWen
@LiefdeWen Sí, eso está permitido en los valores predeterminados para la meta publicación de E / S.
Okx
2

Röda , 22 bytes

{reverse(_)<>_1|[_+_]}

Pruébalo en línea!

Esta es una función anónima que toma una matriz y devuelve una secuencia de valores, que el enlace TIO genera en líneas separadas.

Explicación

reverse(_)          The array reversed
<>                  interleaved with
_1                  the array itself
                    Push each element to the stream
[_+_]               Pull two values and push their sum
Kritixi Lithos
fuente
¡Pasa mis pruebas! Gran respuesta.
Noah Cristino
2

JavaScript (ES6), 34 33 bytes

Guardado un byte gracias a @ETHproductions.

a=>a.map((e,i)=>e+a[a.length+~i])

Rick Hitchcock
fuente
Me encanta cómo pones los casos de prueba, +2
Noah Cristino
Creo que puede guardar un byte cambiando -i-1a +~i.
ETHproductions
@ETHproductions, sí, gracias!
Rick Hitchcock
2

MATL , 3 bytes

tP+

Pruébalo en línea!

Extremadamente sencillo. tduplica la entrada Plo voltea (lo invierte) y +agrega el elemento de dos matrices sabiamente.

DJMcMayhem
fuente
2

PHP, 59 bytes

for(;a&$c=$argv[++$i];)$a[]=$c+$argv[$argc-$i];print_r($a);

toma datos de los argumentos de la línea de comandos; salida vacía para entrada vacía

Produce una advertencia en PHP> 7.0. Esta versión no (60 bytes):

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);
Titus
fuente
¡Buena respuesta! :)
Noah Cristino