Reverse Array Sum

34

Ihr Programm sollte ein Array als Eingabe nehmen.

Das Array:

  1. Wird immer 1 dimensional sein
  2. Enthält nur ganze Zahlen
  3. Kann leer sein

Das Programm sollte das Array umkehren und dann die Elemente zum Original addieren, zum Beispiel:

Eingang: [1, 2, 3]

Original: [1, 2, 3]

Rückgängig gemacht: [3, 2, 1]

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

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

Ausgabe: [4, 4, 4]


Testfälle:

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

Das ist , der kürzeste Code (in Bytes) gewinnt!

Noah Cristino
quelle
J 3 Bytes. Programm ist t. t =: + |.
Richard Donovan
@ RichardDonovan Schöne Antwort! Können Sie bitte als Antwort anstelle eines Kommentars einreichen :)
Noah Cristino

Antworten:

13

Haskell , 20 Bytes

5 Bytes sparen, indem Sie zu einem von nimi vorgeschlagenen freien Punkt wechseln

zipWith(+)=<<reverse

Probieren Sie es online!

Weizen-Assistent
quelle
4
gehen pointfree: zipWith(+)=<<reverse.
nimi
@nimi Wow, ich dachte nicht daran, aber das ist ziemlich schlau.
Weizen-Assistent
Wo stelle ich das Array auf? Ich habe versucht, Argumente und Eingabe auf TIO
Noah Cristino
@NoahCristino Ich habe das TIO repariert. Dies ist eine punktfreie Funktion. Sie müssen die Eingabe also nur hinter die Funktion stellen, Haskell benötigt jedoch eine mainzum Kompilieren.
Weizen-Assistent
3
@maple_shaft: Wir nutzen =<<aus der Funktion Monade , die definiert ist als: (=<<) f g x = f (g x) x. Hier im Infix geschrieben: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
nimi
11

Gelee , 2 Bytes

+U

Probieren Sie es online!

oder

+Ṛ

Probieren Sie es online! (danke @Mr. Xcoder für das zweite Programm)

Erklärung, obwohl es ziemlich selbsterklärend ist

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

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

Bei einem leeren Array []wird nichts ausgegeben. Das ist richtig. Jellys Darstellung einer leeren Liste ist einfach nichts. Beachten Sie, dass Jellys Darstellung einer Liste mit einem einzelnen Element nur das Element selbst ist. Hängen Sie ŒṘden Code an, um die Python-interne Darstellung der Ausgabe zu sehen.

HyperNeutrino
quelle
Ich habe 2 Probleme gefunden. 1) Wenn es getestet wird [9], gibt es 18 statt [18]und 2) wenn es getestet wird [], gibt es nichts aus.
Noah Cristino
@NoahCristino Es ist kein vollständiges Programm, und die Antwort enthält bereits eine Erklärung dafür.
Erik der Outgolfer
Also ich denke, das ist in Ordnung, es ist nur, wie Jelly es ausgibt
Noah Cristino
@NoahCristino Ja. Ich habe dem Ende meiner Antwort einen Teil hinzugefügt, damit Sie dieses Atom an das Ende des Codes setzen können, um zu sehen, wie Python es drucken würde.
HyperNeutrino
+Ṛfunktioniert auch.
Mr. Xcoder
11

JavaScript (ES6), 27 Byte

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

Neil
quelle
Oh Mann, ich war fast da, aber ich dachte nicht daran, den Ausbreitungsoperator für den Klon zu verwenden.
Rick Hitchcock
Kannst du das eingebettete ausprobieren für Javascript hinzufügen?
Noah Cristino
9

05AB1E , 2 Bytes

Â+

Probieren Sie es online!

Erik der Outgolfer
quelle
Hat alle meine Tests bestanden!
Noah Cristino
R+funktioniert auch für 2 Bytes.
Riley
9

Python 2, 32 Bytes

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

Alternative Lösung ohne zip(35 Bytes):

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

Probieren Sie es online!

Vaultah
quelle
7

Python 2 , 40 Bytes

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

Probieren Sie es online!

Die andere, kürzere Python-Antwort ersetzt ein Listenverständnis durch map. Ich wünschte, ich hätte gedacht, das schneller zu machen. ; -;

total menschlich
quelle
1
Besteht alle meine Tests!
Noah Cristino
7

Japt , 7 Bytes

mÈ+Ug~Y

Probieren Sie es online! mit dem -QFlag, um das Ausgabearray zu formatieren.

Erläuterung

Implizit: U= Eingabearray

Ordnen Sie die Eingabe mit der folgenden Funktion zu ...

+Ug

Der Wert plus der Wert im Eingabearray am Index ...

~Y

-(index+1), das Elemente vom Ende des Arrays erhält.

Justin Mariner
quelle
1
Gut gemacht! Ich mag das Multiple-Input-Ding!
Noah Cristino
1
Ich mag den Japt-Interpreter mit mehreren Eingängen sehr. Gute Arbeit!
Oliver
Das ist wirklich cool :-) Ich würde dieses Feature dem "offiziellen" Interpreter hinzufügen, aber mit dem aktuellen Design ist es irgendwie nicht erweiterbar ...
ETHproductions
6

Python 2 , 33 32 Bytes

-1 Byte dank @xnor

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

Probieren Sie es online!

ovs
quelle
Hat alle meine Tests gut bestanden :)
Noah Cristino
Was für eine ungewöhnliche Methode. l*1Speichert ein Byte.
Xnor
Ich habe Schwierigkeiten, das l*1
Gleiche zu
@dhssa erstellt l*1eine Kopie der Liste l. Wenn wir keine Kopie pop()erstellen würden , würden wir Elemente aus der Liste löschen, bevor auf sie in der for-Schleife zugegriffen wurde.
Ovs
Danke für die Erklärung, ich habe es jetzt verstanden. guter Trick zum Codieren.
Dhssa
5

C # (.NET Core) , 61 - 60 Byte

-1 Byte dank TheLethalCoder

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

Probieren Sie es online!

Die Byteanzahl umfasst auch:

using System.Linq;

Zur Erklärung - Die Zip-Funktion in LINQ verwendet zwei Sammlungen und führt die angegebene Funktion für alle entsprechenden Elemente aus, d. H. beide ersten Elemente zusammen, beide zweiten Elemente usw.

Grzegorz Puławski
quelle
1
Gute Antwort. Danke für den Kommentar zu der Eingabe.
Noah Cristino
1
Hallo und willkommen bei PPCG! Das nachgestellte Semikolon wird in der Byteanzahl nicht benötigt. Ich glaube, Sie können die Sammlung direkt vom ZipAnruf zurückgeben, so dass Sie das nicht benötigen ToArray(). Gute Arbeit!
TheLethalCoder
@TheLethalCoder Danke, und ich habe ToArray () hinzugefügt, da es bei der Herausforderung um Arrays geht. Daher wollte ich, dass das in sich geschlossene Lambda array -> array ist.
Grzegorz Puławski
4

CJam , 7 Bytes

{_W%.+}

Probieren Sie es online!

Erik der Outgolfer
quelle
Es gibt ""für [], das ist komisch. Nicht deine Schuld, nur die Sprache.
Noah Cristino
@NoahCristino Das ist CJams Darstellung von [].
Erik der Outgolfer
Ja, es ist schwierig, eine Standardausgabe für meine Herausforderung zu haben, da Arrays in vielen Sprachen anders angezeigt werden [], und [4]daher ist das in Ordnung.
Noah Cristino
4

APL (Dyalog) , 3 Bytes

⌽+⊢

Probieren Sie es online!

Erläuterung

          The argument reversed
+           Plus
          The argument
Kritixi Lithos
quelle
1
Ninja'd. Ich muss auf eine APL-Tastatur umsteigen ... xD
Uriel
@Uriel Ich bin immer auf meiner APL-Tastatur: D
Kritixi Lithos
Liebe die Einfachheit. Es gibt ⌽+⊢ohne Eingabe
Noah Cristino
@NoahCristino Eine leere Eingabe wird mit dem leeren Vektor angegeben. Ohne Argument druckt es den Zug von selbst
Kritixi Lithos
4

R , 17 16 Bytes

-1 byte dank djhurio

rev(l<-scan())+l

Liest von stdin; gibt den Vektor zurück; numeric(0)ist der numerische Vektor mit der Länge Null für die leere Liste.

Probieren Sie es online!

Giuseppe
quelle
Für ein leeres "Array" gibt es zurücknumeric(0)
Noah Cristino
1
@NoahCristino ein leerer Vektor ist wie numeric(0)in R. dargestellt
Leaky Nun
Das ist gut. @LeakyNun
Noah Cristino
1
rev(l<-scan())+l16 Bytes?
Djhurio
Für die Aufzeichnung ist eine R + pryr Funktionsalternative gerade ein Byte länger:pryr::f(rev(x)+x)
JayCe
4

Clojure, 20 17 Bytes

3 Bytes gespart dank @MattPutnam

#(map +(rseq %)%)

Scheint ziemlich konkurrenzfähig zu sein mit nicht-golfenden Sprachen.

Sehen Sie es online

Cliffroot
quelle
Verwenden Sie rseqanstelle von reverse.
MattPutnam
3

Pyth, 3 Bytes

+V_

Probieren Sie es hier aus.

Erik der Outgolfer
quelle
Yay besteht alle meine Tests!
Noah Cristino
Äquivalent:sV_
Mr. Xcoder
@ Mr.Xcoder nevermind
Erik der Outgolfer
3

PowerShell , 26 Byte

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

Probieren Sie es online!

Übernimmt Eingaben als Befehlszeilenargumente.

Joey
quelle
Können Sie einen TIO hinzufügen? und ein Link unter dem Namen wie diesem: codegolf.stackexchange.com/a/135427/61877
Noah Cristino
@NoahCristino: Gefällt dir das? Ich habe das Ding bisher noch nicht benutzt, also keine Ahnung, was ich falsch gemacht haben könnte. Übrigens, wenn Sie erwarten, dass Personen in ihren Antworten einen bestimmten Dienst nutzen, geben Sie dies bitte in der Aufgabenbeschreibung an.
Joey
Das ist gut. Es ist nicht erforderlich, es macht die Antworten nur qualitativ hochwertiger und für zukünftige Zuschauer einfacher zu testen.
Noah Cristino
3

C 49 Bytes

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}
orlp
quelle
Sollte nicht a,n,bsein a,b,noder so?
Erik der Outgolfer
@EriktheOutgolfer Nein, es bhandelt sich nicht um einen Parameter für die Funktion, sondern nur um eine zusätzliche Definition, die aus Golfgründen eingefügt wurde. amuss ein Zeiger auf Ganzzahlen sein und nmuss die Anzahl der Ganzzahlen im Array angeben.
Orlp
Könnten Sie bitte einen TIO-Link hinzufügen?
Noah Cristino
3

PowerShell , 40 32 Bytes

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

Probieren Sie es online!

Nimmt Eingaben als einzelne Befehlszeilenargumente an, was als eines der systemeigenen Listenformate für PowerShell zulässig ist. Durchlaufen Sie dann jedes Element (dh eine kürzere Methode zum Durchlaufen der Indizes) und addieren Sie die Anzahl der Elemente von hinten ( -1indexiert) zum aktuellen Element ( 0indexiert, daher die Dekrementierung -1). Diese verbleiben in der Pipeline und die Ausgabe ist implizit.

8 Bytes dank @briantist eingespart

AdmBorkBork
quelle
Es wird kein Array ausgegeben.
Noah Cristino
1
@NoahCristino PowerShell-Ein- / Ausgabe ist im Allgemeinen seltsam. Es wird als Array ausgegeben, es gibt nur nichts, was das Array erfasst, und wenn das implizite Write-Outputpassiert, werden die Dinge auf stdout ein Element pro Zeile gesetzt. Sie können hier beispielsweise sehen, dass das Objekt beim Erfassen tatsächlich ein arrayTyp ist.
AdmBorkBork
Gut genug, dann :) atleast es versucht
Noah Cristino
Ich bin auf dem Handy und kann nicht so einfach testen, aber ist es nicht 1 Byte kürzer die zu entfernen paramund ersetzen Sie dann 1..$nmit 1..($n=$args)?
Briantist
@briantist Nicht ganz, aber Sie haben mir eine andere Denkweise gegeben und ein paar Bytes gespart. Vielen Dank!
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 und Bugfix dank @Nevay .
-3 Bytes dank @ OliverGrégoire .

(Es war ein Port von @jkelm 's C # -Antwort (und wurde mit 4 bis 8 Bytes belegt) , aber jetzt ist es dank @ OliverGrégoire eine andere, kürzere Lösung .)

Erläuterung:

Probieren Sie es hier aus.

Die Methode ändert das Eingabearray, um Bytes zu speichern, sodass kein Rückgabetyp erforderlich ist.

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
quelle
1
Sie können 1 Byte mit speichern a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay
1
Abgesehen davon, dass der Code für Arrays mit einer ungeraden Länge 1,2,3(return 4,2,4statt 4,4,4) fehlschlägt , muss die Schleife so lange laufen 2*i<l, nicht i<l/2.
Nevay
@Nevay Danke. Ich wusste, dass es möglich sein sollte, Golf zu spielen l-i-1, konnte mir aber nichts einfallen lassen.
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 Danke. Und Ihr lund rmacht Sinn für Ihre Implementierung, also habe ich auch diese verwendet (und eine Erklärung hinzugefügt).
Kevin Cruijssen
2

Ohm , 3 Bytes

DR+

Probieren Sie es online!

total menschlich
quelle
Es gibt Floats aus, aber ich habe nie gesagt, dass dies nicht möglich ist. Das ist in Ordnung, und []es gibt nichts aus, aber das ist nur die Sprache.
Noah Cristino
2

Eigentlich 4 Bytes

;R♀+

Probieren Sie es online!

Erik der Outgolfer
quelle
Perfekt, tolle Arbeit.
Noah Cristino
Erik, mein Problem in wie 7 Sprachen zu lösen xD
Noah Cristino
@NoahCristino Ja, ich versuche es unter 15 zu halten ...;)
Erik the Outgolfer
Ich werde anfangen müssen, eine -1 für jede Einreichung zu addieren xD
Noah Cristino
2

Anyfix , 3 Bytes

"U+

Die Version auf TryItOnline! ist eine veraltete Version von anyfix, die einige schwerwiegende Fehler enthält, z. B. das Hinzufügen von Listen aufgrund von Tippfehlern im Quellcode. Verwenden Sie stattdessen den Code auf GitHub.

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

Neim , 2 Bytes

Dies ist eine Funktion, die Eingaben oben im Stapel und Ausgaben oben im Stapel akzeptiert.

𝕓𝔻

Probieren Sie es online!

Okx
quelle
Darf der Eingabestapel über den tatsächlichen Neim-Code anstelle der normalen Eingabemethoden geändert werden?
LiefdeWen
@LiefdeWen Ja, das ist in den Standardeinstellungen für E / A-Metapost zulässig.
Okx
2

Röda , 22 Bytes

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

Probieren Sie es online!

Dies ist eine anonyme Funktion, die ein Array aufnimmt und einen Strom von Werten zurückgibt, die der TIO-Link getrennt über Zeilenumbrüche ausgibt.

Erläuterung

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
quelle
Besteht meine Tests! Gute Antwort.
Noah Cristino
2

JavaScript (ES6), 34 33 Bytes

Dank @ETHproductions ein Byte gespeichert.

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

Rick Hitchcock
quelle
Ich liebe, wie Sie in den Testfällen setzen, +2
Noah Cristino
Ich denke , dass Sie ein Byte speichern kann , indem -i-1an +~i.
ETHproductions
@ETHproductions, ja, danke!
Rick Hitchcock
2

PHP, 59 Bytes

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

Nimmt Eingaben von Befehlszeilenargumenten entgegen. leere Ausgabe für leere Eingabe

Gibt eine Warnung in PHP> 7.0 aus. Diese Version enthält nicht (60 Bytes):

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);
Titus
quelle
Gute Antwort! :)
Noah Cristino