Somme inversée

34

Votre programme devrait prendre un tableau en entrée.

Le tableau:

  1. Sera toujours 1 dimension
  2. Ne contiendra que des entiers
  3. Peut être vide

Le programme doit inverser le tableau, puis additionner les éléments à l'original, par exemple:

Contribution: [1, 2, 3]

Original: [1, 2, 3]

Renversé: [3, 2, 1]

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

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

Sortie: [4, 4, 4]


Cas de test:

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

C'est , le code le plus court (en octets) gagne!

Noah Cristino
la source
J 3 octets. Le programme est t. t =: + |.
Richard Donovan
@ RichardDonovan Belle réponse! Pouvez-vous soumettre comme réponse au lieu d'un commentaire s'il vous plaît :)
Noah Cristino

Réponses:

13

Haskell , 20 octets

5 octets économisés en passant à un point libre comme suggéré par nimi

zipWith(+)=<<reverse

Essayez-le en ligne!

Assistant de blé
la source
4
aller Pointfree: zipWith(+)=<<reverse.
nimi
@nimi Wow, je n'avais pas pensé à faire ça, mais c'est plutôt intelligent.
Wheat Wizard
Où est-ce que je place le tableau? J'ai essayé des arguments et des commentaires sur TIO
Noah Cristino le
@ NoahCristino, j'ai corrigé le TIO. Ceci est une fonction sans point, vous ne devez donc mettre que l'entrée après la fonction, mais Haskell nécessite une maincompilation.
Wheat Wizard
3
@maple_shaft: nous utilisons =<<de la fonction monade qui est définie comme suit: (=<<) f g x = f (g x) x. Ici, écrit en infixe: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
nimi
11

Gelée , 2 octets

+U

Essayez-le en ligne!

ou

+Ṛ

Essayez-le en ligne! (merci @ M. Xcoder pour le deuxième programme)

explication, bien que ce soit assez explicite

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

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

Pour un tableau vide [], cela ne génère rien. C'est correct. La représentation par Jelly d'une liste vide n'est tout simplement rien. Notez que la représentation d'une liste avec un seul élément par Jelly n'est que l'élément lui-même. Ajoutez ŒṘau code pour voir la représentation interne de la sortie en Python.

HyperNeutrino
la source
J'ai trouvé 2 problèmes. 1) Une fois testé, [9]il génère 18 sorties au lieu de [18], et 2) une fois testé, []il ne génère rien.
Noah Cristino
@ NoahCristino Ce n'est pas un programme complet, et il y a déjà une explication à cela dans la réponse.
Erik the Outgolfer
Donc je suppose que ça va, c'est juste comment Jelly le sort
Noah Cristino
@ NoahCristino Ouais. J'ai ajouté une partie à la fin de ma réponse afin que vous puissiez mettre cet atome à la fin du code pour voir comment Python l'aurait imprimé.
HyperNeutrino
+Ṛfonctionne aussi.
M. Xcoder
11

JavaScript (ES6), 27 octets

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

Neil
la source
Oh, mec, j'y étais presque , mais je ne pensais pas utiliser l'opérateur de diffusion pour faire le clone.
Rick Hitchcock le
Pouvez-vous ajouter la version intégrée l'essayer pour javascript?
Noah Cristino
9

05AB1E , 2 octets

Â+

Essayez-le en ligne!

Erik le golfeur
la source
Passé tous mes tests!
Noah Cristino
R+fonctionne également pour 2 octets.
Riley
9

Python 2, 32 octets

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

Solution alternative sans zip(35 octets):

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

Essayez-le en ligne!

vaultah
la source
7

Python 2 , 40 octets

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

Essayez-le en ligne!

L'autre réponse, plus courte en Python, remplace une compréhension de liste par map. J'aurais aimé pouvoir faire ça plus vite. ; -;

totalement humain
la source
1
Passe tous mes tests!
Noah Cristino
7

Japt , 7 octets

mÈ+Ug~Y

Essayez-le en ligne! avec le -Qdrapeau pour formater le tableau de sortie.

Explication

Implicite: U= tableau d'entrée

Mappez l'entrée avec la fonction suivante ...

+Ug

La valeur, plus la valeur dans le tableau d'entrée à l'index ...

~Y

-(index+1), qui obtient des éléments à la fin du tableau.

Justin Mariner
la source
1
Bon travail! J'aime la chose à entrées multiples!
Noah Cristino
1
J'aime beaucoup l'interpréteur Japt à entrées multiples. Bon travail!
Oliver
C'est vraiment cool :-) J'ajouterais cette fonctionnalité à l'interprète "officiel", mais avec le design actuel, c'est un peu extensible ...
ETHproductions
6

Python 2 , 33 32 octets

-1 octet grâce à @xnor

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

Essayez-le en ligne!

ovs
la source
Passé tous mes tests bon travail :)
Noah Cristino
Quelle méthode inhabituelle. l*1enregistre un octet.
xnor
J'ai des difficultés à comprendre le par l*1, aucune élaboration
dhssa
@dhssa l*1fait une copie de la liste l. Si nous ne faisons pas de copie, pop()supprimerions des éléments de la liste avant leur accès dans la boucle for.
ovs le
Merci pour l'explication, je l'ai maintenant. bon truc à savoir pour le codage.
dhssa
5

C # (.NET Core) , 61 à 60 octets

-1 octet grâce à TheLethalCoder

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

Essayez-le en ligne!

Le nombre d'octets comprend également:

using System.Linq;

Pour explication - La fonction zip dans LINQ prend deux collections et exécute la fonction donnée pour tous les éléments correspondants, c.-à-d. les deux premiers éléments ensemble, les deux seconds éléments, etc.

Grzegorz Puławski
la source
1
Bonne réponse. Merci pour le commentaire sur l'entrée.
Noah Cristino
1
Bonjour et bienvenue sur PPCG! Vous n'avez pas besoin du point-virgule final dans le nombre d'octets. Je crois que vous pouvez renvoyer la collection directement à partir de l’ Zipappel à donc inutile ToArray(). Bon travail!
TheLethalCoder
@TheLethalCoder Merci et j'ai ajouté ToArray (), car le défi concerne les tableaux. Je voulais donc que le lambda autonome soit tableau -> tableau.
Grzegorz Puławski
4

CJam , 7 octets

{_W%.+}

Essayez-le en ligne!

Erik le golfeur
la source
Il produit ""pour [], c'est bizarre. Ce n'est pas ta faute, juste la langue.
Noah Cristino
@ NoahCristino C'est la représentation de CJam [].
Erik the Outgolfer
Oui, il est difficile d'avoir une sortie standard pour mon défi car beaucoup de langues affichent les tableaux différemment [], et [4]c'est donc bien.
Noah Cristino
4

APL (Dyalog) , 3 octets

⌽+⊢

Essayez-le en ligne!

Explication

          The argument reversed
+           Plus
          The argument
Kritixi Lithos
la source
1
ninja J'ai besoin de passer à un clavier APL ... xD
Uriel
@Uriel je suis toujours sur mon clavier APL: D
Kritixi Lithos
Aimer la simplicité. Il sort ⌽+⊢sans entrée
Noah Cristino
@NoahCristino Une entrée vide est spécifiée avec le vecteur vide. Sans aucun argument, il imprime le train par lui
Kritixi Lithos
4

R , 17 16 octets

-1 octet grâce à djhurio

rev(l<-scan())+l

Lit de stdin; renvoie le vecteur; numeric(0)est le vecteur numérique de longueur nulle pour la liste vide.

Essayez-le en ligne!

Giuseppe
la source
Pour un "tableau" vide, il retournenumeric(0)
Noah Cristino
1
@NoahCristino un vecteur vide est représenté comme numeric(0)dans R.
Leaky Nun
C'est très bien. @ LeakyNun
Noah Cristino
1
rev(l<-scan())+l, 16 octets?
djhurio
Pour mémoire, une alternative fonctionnelle R + pryr ne représente qu'un octet de plus:pryr::f(rev(x)+x)
JayCe
4

Clojure, 20 17 octets

3 octets enregistrés grâce à @MattPutnam

#(map +(rseq %)%)

Semble être assez compétitif avec les langues autres que le golf.

Voir en ligne

cliffroot
la source
Utilisez rseqau lieu de reverse.
MattPutnam le
3

Pyth, 3 octets

+V_

Essayez ici.

Erik le golfeur
la source
Yay passe tous mes tests!
Noah Cristino
Équivalent:sV_
M. Xcoder le
@ Mr.Xcoder Nevermind
Erik the Outgolfer
3

PowerShell , 26 octets

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

Essayez-le en ligne!

Prend l'entrée en tant qu'argument de ligne de commande.

Joey
la source
Pouvez-vous ajouter un TIO? et un lien sous le même nom, comme celui-ci: codegolf.stackexchange.com/a/135427/61877
Noah Cristino
@ NoahCristino: Vous aimez ça? Je n'ai pas utilisé cette chose jusqu'à présent, donc aucune idée de ce que j'ai pu mal faire. En passant, si vous attendez des personnes qu'elles utilisent un service donné dans leurs réponses, veuillez l'indiquer dans la description de la tâche.
Joey
C'est très bien. Ce n'est pas nécessaire, cela rend les réponses plus précises et plus faciles à tester pour les futurs téléspectateurs.
Noah Cristino
3

C, 49 octets

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}
orlp
la source
Ne devrait pas a,n,bêtre a,b,nou quelque chose?
Erik the Outgolfer
@EriktheOutgolfer Non, ce bn'est pas un paramètre pour la fonction, mais une définition supplémentaire insérée ici pour des raisons liées au golf. adoit être un pointeur sur les entiers et ndoit indiquer le nombre d'entiers dans le tableau.
Orlp
Pourriez-vous s'il vous plaît ajouter un lien TIO?
Noah Cristino
3

PowerShell , 40 32 octets

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

Essayez-le en ligne!

Prend les entrées en tant qu'arguments de ligne de commande individuels, ce qui est autorisé en tant que format de liste natif pour PowerShell. Puis boucle à travers chaque élément (c.-à-d. Une manière plus courte de parcourir les index), en ajoutant l’élément comptant à partir de l’arrière ( -1indexé) à l’élément actuel ( 0indexé, d’où le décrément -1). Ceux-ci sont laissés sur le pipeline et la sortie est implicite.

Sauvegardé 8 octets grâce à @briantist

AdmBorkBork
la source
il ne sort pas de tableau.
Noah Cristino
1
Les entrées / sorties de @NoahCristino PowerShell sont, en général, bizarres. Il est fournit en sortie un tableau, il est juste il y a capture rien dit tableau, et donc quand l'implicite Write-Outputse produit, il met les choses sur stdout un élément par ligne. Par exemple, vous pouvez voir ici que lorsqu’il est capturé, l’objet est bien un arraytype.
AdmBorkBork
Bon assez alors :) au moins, il a essayé
Noah Cristino
Je suis sur mobile et je ne peux pas tester si facilement, mais ne faut-il pas moins d'un octet pour le supprimer paramet le remplacer 1..$npar 1..($n=$args)?
briantist
@briantist Pas tout à fait, mais vous m'avez donné une façon de penser différente, en économisant un tas d'octets. Merci!
AdmBorkBork
3

Java 8, 61 57 56 53 octets

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

-1 octet et correction de bogue grâce à @Nevay .
-3 octets grâce à @ OliverGrégoire .

(C’était un port de (et jouions au golf de 4 à 8 octets) de la réponse C # de @jkelm , mais c’est maintenant une solution plus courte différente grâce à @ OliverGrégoire .)

Explication:

Essayez ici.

La méthode modifie le tableau en entrée pour économiser les octets. Aucun type de retour n'est donc nécessaire.

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
la source
1
Vous pouvez enregistrer 1 octet en utilisant a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay
1
Outre que le code échoue pour les tableaux de longueur impaire 1,2,3(retourne 4,2,4au lieu de 4,4,4), la boucle doit être exécutée aussi longtemps que 2*i<l, pas i<l/2.
Nevay
@ Merci Merci. Je savais qu'il devrait être possible de jouer au golf l-i-1, mais je ne pouvais tout simplement pas en arriver là.
Kevin Cruijssen
2
53 octets: a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}.
Olivier Grégoire
1
@ OlivierGrégoire Merci. Et votre let rest logique pour votre implémentation, donc je les ai aussi utilisés (et ajouté une explication).
Kevin Cruijssen
2

Ohm , 3 octets

DR+

Essayez-le en ligne!

totalement humain
la source
Il produit des floats, mais je n’ai jamais dit que c’était impossible, alors c’est bien, et []cela n’affiche rien, mais c’est juste le langage.
Noah Cristino
2

En fait , 4 octets

;R♀+

Essayez-le en ligne!

Erik le golfeur
la source
Parfait, excellent travail.
Noah Cristino
Erik, résolvant mon problème en 7 langues environ xD
Noah Cristino
@NoahCristino Ouais j'essaie de garder moins de 15 ans ...;)
Erik the Outgolfer
Je vais devoir commencer à ajouter un -1 pour chaque soumission xD
Noah Cristino
2

anyfix , 3 octets

"U+

La version sur TryItOnline! est une version obsolète de anyfix, qui contient quelques erreurs fatales telles que l'impossibilité d'ajouter des listes à cause de fautes de frappe dans le code source. Utilisez le code sur GitHub à la place.

"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
la source
2

Neim , 2 octets

C'est une fonction qui prend les entrées au sommet de la pile et les sorties au sommet de la pile.

𝕓𝔻

Essayez-le en ligne!

Okx
la source
Est-il permis de modifier la pile d'entrée via le code Neim réel au lieu des méthodes d'entrée normales?
LiefdeWen
@LiefdeWen Oui, c'est autorisé dans les paramètres par défaut pour les méta-publications d'E / S.
Okx
2

Röda , 22 octets

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

Essayez-le en ligne!

Il s'agit d'une fonction anonyme qui récupère un tableau et renvoie un flux de valeurs que le lien TIO génère en sortie, séparées sur des nouvelles lignes.

Explication

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
la source
Passe mes tests! Très bonne réponse.
Noah Cristino
2

JavaScript (ES6), 34 33 octets

Enregistré un octet grâce à @ETHproductions.

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

Rick Hitchcock
la source
J'aime la façon dont vous mettez dans les cas de test, +2
Noah Cristino
Je pense que vous pouvez économiser un octet en changeant -i-1pour +~i.
ETHproductions
@ETHproductions, oui, merci!
Rick Hitchcock le
2

MATL , 3 octets

tP+

Essayez-le en ligne!

Extrêmement simple. tduplique l'entrée. Ple retourne (et l’inverse) et +ajoute les deux tableaux par élément.

DJMcMayhem
la source
2

PHP, 59 octets

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

prend les arguments de la ligne de commande; sortie vide pour entrée vide

Renvoie un avertissement dans PHP> 7.0. Cette version ne (60 octets) ne:

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);
Titus
la source
Bonne réponse! :)
Noah Cristino