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!


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!


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.


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())


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




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.


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!


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.


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

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!


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


Verwenden Sie rseqanstelle von reverse.
MattPutnam


3

PowerShell , 26 Byte

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

Probieren Sie es online!

Übernimmt Eingaben als Befehlszeilenargumente.


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;}

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


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

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

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

2

Neim , 2 Bytes

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

𝕓𝔻

Probieren Sie es online!


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

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])


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);

Gute Antwort! :)
Noah Cristino
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.