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!


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!


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.


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


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




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.


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!


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.


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

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!


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


Utilisez rseqau lieu de reverse.
MattPutnam le


3

PowerShell , 26 octets

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

Essayez-le en ligne!

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


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

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


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

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

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

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!


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

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


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

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

Bonne réponse! :)
Noah Cristino
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.