Code proche du challenge: Somme des nombres entiers


39

C'est un défi simple: à partir d'une séquence d'entiers, trouvez la somme de tous les entiers qu'elle contient.

Mais avec une torsion. Votre score est la distance de Levenshtein entre votre code et la phrase suivante (Le défi):

À partir d'un ensemble d'entiers, trouvez la somme de tous les entiers qu'il contient.

Vous pouvez supposer qu'il n'y a pas de nouvelles lignes ni d'espaces de fin dans l'entrée.

Exemple d'entrée / sortie:

Input: 1 5 -6 2 4 5
Output: 11
Input: 1 -2 10
Output: 9

Une calculatrice en ligne pour la distance de Levenshtein est disponible ici: http://planetcalc.com/1721/


4
Je ne peux pas m'empêcher de penser à cela
JohnE

7
Wow, tellement de créativité les gars xD ... toux commentaire

1
Pensez-vous que cela devrait avoir une suite avec un autre défi mais le même principal de distance de Levenshtein? Je ne sais pas si cela est considéré comme digne de suite ou non.

1
@NicoA définitivement! Peut-être que le seul problème est que cette tâche était trop facile.
Maltysen

2
@NicoA Si vous le faites, soyez très prudent dans la définition de ce qui n'est pas autorisé. De nombreuses langues permettent par exemple aux chaînes brutes de flotter.
xnor

Réponses:


58

Python, distance 3

#Given a set of integers, find the 
sum#of all integers in it.

Cela donne la fonction intégrée sum, qui peut résumer un ensemble comme sum({3,5,7})==17. Les parties restantes sont commentées. Cela a distance 3, avec 3 modifications:

  • Ajouter l'initiale #
  • Ajouter une nouvelle ligne
  • Remplacer l'espace après sumavec#

3
Une autre fonctionnalité utile de la merveilleuse syntaxe anglaise
qwr le

1
Ma seule question est de savoir comment l'utiliser car il ne s'agit pas d'un programme complet et (en théorie), vous n'avez même pas besoin de l'utiliser dans votre code car il s'agit d'un logiciel intégré
Beta Decay

1
@BetaDecay Cela fonctionne parce que les règles autorisent les fonctions par défaut et que les littéraux de fonction sont autorisés pour les fonctions .
xnor

54

Julia, distance 27 26

Sans commentaires!

Given(a)=(Set;of;integer; find; [sum(a),all,integer,in][1])

Cela crée une fonction appelée Givenqui accepte un tableau et renvoie la somme de ses éléments. Comme beaucoup de commandes intégrées de Julia ont des noms pertinents (mais ne sont pas pertinentes pour le calcul ici), nous pouvons simplement en énumérer quelques-unes délimitées par des points-virgules. Tant qu'ils ne sont pas la dernière chose listée, ils ne seront pas retournés. La dernière partie crée en fait un tableau contenant la somme et trois fonctions et sélectionne le premier élément, la somme.


Aucun commentaire n'est certainement plus dans l'esprit du défi. Bon travail.
Christopher Wirt

@ChristopherWirt Merci! :)
Alex A.

4
Puis-je suggérer une amélioration? Given=(a;set;of=integer; find;th;[sum,of,all,integer, in][])- "Given" fonctionne toujours de la même manière, mais la distance est de 18.
Glen O

22

APL, distance 6 3

Sauvegardé 3 distances ...? merci à Dennis!

+/⍝en a set of integers, find the sum of all integers in it.

Cela résume un tableau donné ( +/). Le reste de la phrase est ajouté à la fin à l'aide d'un commentaire ( ).


1
Vous n'avez pas besoin {et ⍵}. +/est déjà une fonction valide.
Dennis

@Dennis Awesome, merci beaucoup pour la suggestion!
Alex A.

10

GolfScript, 5

~{Given a set of integers+ find the sum of all integers in it}*

C'est un programme complet qui n'utilise aucun commentaire (mais beaucoup de noops).

Essayez-le en ligne dans Web GolfScript .


9

R, Distance 37 36 34

Sans utiliser les commentaires :)

 as.integer ( sum (scan(,integer( ) )))

Notez qu'il y a un espace au début.


8

Mathematica, distance 17

Given a set of integers find the sum of all integers in it*0+Total@Input[]

Il n'utilise aucun commentaire ni aucune opération, mais déclare tous les mots en tant que variables, puis les supprime en les multipliant par zéro.

Il présente également l’avantage d’être la seule réponse qui prend en réalité un ensemble d’entiers en entrée.

L'entrée {1,2,3}fournit la sortie 6comme prévu.

Malheureusement, la Sumfonction Mathematica ne fait pas la tâche de la question, ce qui nécessite un plus grand nombre d'octets.


Given a set of integers find the sum of all *0+Total@Input[]distance 14
Leaky Nun

6

Java - 43 41

J'ai essayé.

float a_set_of(int[] r){return IntStream.of(r).sum()}//n it.
Given a set of integers, find the sum of all integers in it.

Java: P.


Je pense que vous pouvez changer l'argument dans la fonction de a à r pour économiser une distance d'édition.
Element118

@ Element118 Belle prise. Également changé le type de retour pendant que j'y étais pour que le nom de la méthode s'aligne mieux.
Anubian Noob

2
ne pourriez-vous pas utiliser "int a_" comme début de l'extrait? (un espace avant l'int et deux après celui a_
masterX244

6

RProgN , Distance 2.

Given aset of integers, ;find the sum of all integers in it.

Dans RProgN, a, set, find et sum sont toutes des commandes. Tout le reste est ignoré par défaut dans la syntaxe. a pousse l'alphabet vers la pile, ce qui fera échouer la somme. Set n'a jamais assez d'arguments, donc échoue toujours, en erreur. La recherche trouve un nombre incorrect d'arguments ou tente de comparer l'alphabet avec la pile d'entrée, ce qui ne fonctionne pas.

a et set peuvent tous deux être "corrigés" en supprimant l'espace entre eux, aset n'étant pas une fonction, il est donc ignoré. Rechercher a juste un caractère supplémentaire inséré au début, ce qui le rend également non reconnu et ignoré. Il ne reste que la somme qui résume le contenu de la pile d’entrée.

Enfin, RProgN pourrait gagner quelque chose!

Essayez-le en ligne!


4

CJam, 7 6 5

{:+}e# a set of integers, find the sum of all integers in it.

C'est une fonction anonyme qui extrait un tableau de la pile et laisse un entier en retour.

Merci à @AboveFire pour avoir réduit la distance de 1.

Essayez-le en ligne.


4

Matlab, distance 29 28

Given_a_set_of_integers=@(findthe)sum(all(1)*findthe)

Sans utiliser de commentaires :-)

Le code est sous la forme d'une fonction anonyme. Je suppose que l'entrée est un vecteur (1D-array) de nombres.

Exemple:

>> Given_a_set_of_integers=@(findthe)sum(all(1)*findthe)
Given_a_set_of_integers = 
    @(findthe)sum(all(1)*findthe)

>> Given_a_set_of_integers([1 5 -6 2 4 5])
ans =
    11

3

O , 5

M] + o "Étant donné un ensemble d’entiers, trouvez la somme de tous les entiers qu’il contient.

Les nombres doivent être en notation hexadécimale et négative inversée:

  • -6 => 6_
  • -4 => 4_
  • -10 => A_

Essayez-le en ligne


1
Yay le lien fonctionne!
Maltysen

Belle démo! N’appelez-vous pas cela un peu excessif, cependant?
Kirbyfan64sos

@ kirbyfan64sos Totalement, mais je veux ajouter plus de fonctionnalités telles que la coloration syntaxique et tout le reste. Pour l'instant, c'est juste un interprète.
phase le

Je pense qu'un lien vers la page O esolangs serait plus utile.
mbomb007

@ mbomb007 Mais c'est horriblement obsolète; la moitié des choses là-bas ne fonctionnent pas, et ce n'est qu'un petit bout du langage documenté.
phase le

3

K, 60 5

+/ / Given a set of integers, find the sum of all integers in it.

Je suppose que les symboles ne vont pas bien avec le Leve, quelle que soit la distance ...

Hahaha. À l’origine, je n’avais aucune idée de la distance parcourue par le LeveXXX, alors j’en ai eu 60. Puis, grâce à des commentaires utiles, il est tombé à 5.


Ce n’est pas que vous utilisiez des symboles, la distance de Levenshtein est le nombre d’additions, de suppressions, de substitutions. donc vous avez 60 suppressions de la chaîne d'origine.
Maltysen

Ce ne sont pas des symboles, mais simplement que votre code est si court que la longueur de la phrase - la longueur de votre code = 60. Aïe.

2
Vous savez que vous pouvez simplement faire défiler vers le haut pour obtenir l'orthographe correcte de "Levenshtein", non? ;)
Alex A.

@Alexa. C'est plus drôle de cette façon. :)
kirbyfan64sos

2
Je ne le blâme pas. J'ai dû vérifier l'orthographe environ 10 fois avant de le copier-coller.

3

F #, distance 21

let ``Given a set of integers, find the sum of all integers in it`` x = Seq.sum x

Je dois aimer la possibilité d'utiliser des doubles ticks pour donner à une fonction un nom avec des espaces.

Usage:

[1;2;3] |> ``Given a set of integers, find the sum of all integers in it`` |> printfn "%i"

6


3

Pip, distance 3

Rejoindre le club de golflang trivial no-comments-but-lot-of-no-ops répond ...

Given a set of integers, find the sum of all integers in $+g

Dépôt GitHub pour Pip

Le code se documente pratiquement tout seul; peut-être s/in/using/pour une description plus précise. Les entiers donnés en tant qu'arguments de ligne de commande sont lus dans la liste g, qui est pliée lors de l'addition et le résultat imprimé automatiquement. Presque tout le reste n'est que des variables, qui ne sont pas des opérations.

J'ai été un peu surpris au début de s, ftravailler sans se plaindre, car se fréférer à la fonction principale et prendre la portée d'un bloc de code n'a pas de sens. Mais j’ai alors réalisé: l’ ,opérateur range, lorsqu’on lui donne un argument de fonction, construit simplement une autre fonction (comme le font de nombreux opérateurs dans Pip). Donc, je pense s, févalue à {Given a set of integers, find the sum of all integers in " ",$+g}. (Ce qui est ensuite jeté quand même.)

Un dernier point: ce code fonctionne avec la version actuelle de Pip, dans laquelle je n'ai encore rien assigné G. Si dans une version future je crée Gun opérateur binaire ou ternaire, une version distance 4 sera nécessaire. Utiliser givenau lieu de Givenfonctionnerait bien.


3

Haskell, distance 11

Sans commentaires!

const sum"Given a set of integers, find the sum of all integers in it."

Usage:

> const sum"Given a set of integers, find the sum of all integers in it." $ [1..10]
55

3

Cubix , Distance 9

@ivOn a ;et I+ i?tegers, fu;d <he sum of all integers in it.

Essayez-le en ligne!

Cela enveloppe le cube

      @ i v
      O n a
      ; e t
I + i ? t e g e r s , f
u ; d < h e s u m o f a
l l i n t e g e r s i n
      i t .
      . . .
      . . .

Le code opératif est

  • I+i Entrer un entier, ajouter au TOS puis entrer un caractère
  • ?Tester la valeur du caractère. Rediriger à gauche pour -1 (fin de saisie) ou à droite pour autre chose (0 ne peut pas être entré)
    • ;O@ pop TOS, sortie somme et sortie
    • <;u rediriger, pop TOS et demi-tour sur le début

2

Pyth - 4

Il suffit de placer le code réel sQdevant la chaîne non opérée par un espace.

sQ "Given a set of integers, find the sum of all integers in it.

Essayez-le en ligne ici .


1

PHP4.1, distance 25

Celui-ci est assez long et très tard dans la course.

Mais enfin, le voici:

<?=$n_a_set_of_integers_fi=array_sum($f_all_integers_in_i);

Pour que cela fonctionne, il vous suffit de passer un tableau sur POST / GET / COOKIE / session, en utilisant la clé f_all_integers_in_i.


2
Pas de commentaire à la traîne yay!
Anubian Noob

1

Pyt , distance 1

Given a set of integers, find the Ʃum of all integers in it.

Tous les caractères alphanumériques sont non-ops dans Pyt, et la somme d'une liste prend un seul caractère:

Essayez-le en ligne!


0

C ++ 17, distance 44 29

Variadic Générique Lambda FTW

[](auto...t){return(t+...);}//the sum of all integers in it.

Solution précédente

template<class...t>int s(t...l){return(...+l);}//gers in it.



0

Ly , score 4

&+#Given a set of integers, find the sum of all integers in it.

Notez la fin de ligne.

Essayez-le en ligne!

Le code est assez explicite. &+est l'opérateur de sommation de Ly, tandis que #est un commentaire. Il est regrettable que je doive inclure une fin de ligne, car terminer un programme avec une ligne de commentaire va "commenter" la sortie implicite de Ly, qui est en fait un bogue dans l'interpréteur que j'appelle une fonctionnalité.


0

dc, 14

?[+z1 <f]d  sf xp#egers, find the sum of all integers in it.

commentaires:

?                   # read numbers
 [                  # start macro
  +                 # add up last two things on stack
   z1 <f            # if stack size is more than 1, execute macro at register 'f'
        ]           # end macro
         d          # dupe it
            sf      # saving one copy to register 'f'
               x    # and executing another
                p   # printing result

TIO

il se plaint que la pile est vide si vous entrez 1 nombre, mais fonctionne toujours, et la suppression de 0 enregistre 2 diff.


0

Excel VBA, Distance: 11

Fonction de fenêtre immédiate VBE anonyme qui prend des entrées dans la plage [a:a]de l'objet ActiveSheet et les envoie dans la fenêtre immédiate VBE

?[Sum(a:a)] 'f integers, find the sum of all integers in it.

0

Brain-Flak , 20

(([]){[{}]{}([])}{})ers, find the sum of all integers in it.

Essayez-le en ligne!

Explication

Comme il n'y a pas de parenthèses dans le texte original, cela revient à un problème de dans Brain-Flak. Mais cela ne rend pas encore cette réponse triviale, comme le sont rarement les réponses dans Brain-Flak.

La première intuition serait probablement le code suivant

({{}})

Ce qui fonctionne ... à moins qu'il y ait un zéro sur la pile, auquel cas la somme est juste jusqu'au zéro. Pour contourner ce problème, nous devons utiliser une hauteur de pile pour vérifier que la pile n'est pas vide. Cela peut être mis en place comme ça

([])    #{ Push stack height }
(       #{ Start Push }
{       #{ Loop until zero }
 <{}>   #{ Silently Pop the last height }
 {}     #{ Grab a value from the stack }
 <([])> #{ Silently push the stack height again }
}       #{ End loop }
{}      #{ Remove last stack height }
)       #{ Push the result }

Celui-ci fonctionne, mais il y a quelque chose qui ne va pas. Nous continuons à faire taire les pops et les poussées dans les boucles, mais ils sont presque égaux et il devrait donc y avoir un moyen de les annuler. Si on essaye

([])({[{}]{}([])}{})

Nous nous retrouvons à nchaque fois. Donc, voici le truc, nous avons déjà un nemplacement, nous le déplaçons dans la poussée pour équilibrer les choses.

(([]){[{}]{}([])}{})

1
Je voulais juste vous féliciter pour votre 2^8réponse, pp
Taylor


0

Gelée , Distance: 2

Given a set of integers, find the sum of all integers in it.
S

Essayez-le en ligne!

Jelly n'évalue que le lien principal (la dernière ligne) et les commandes explicites exécutent d'autres liens (autres lignes).

La dernière ligne a S, qui résume l'entrée.

La première ligne n'est pas exécutée car il n'y a pas de référence dans le lien principal.


0

Casser! 4.2.2.9 (+ Outils), syntaxe scratchblocks3, distance 35

Ceci est une fonction. integers, find the sum of all inteest l'entrée.

for each(et)of(integers, find the sum of all inte
change[s v]by(et
end
report(s

Comment cela prend-il des entrées? Est-ce que l'entrée est supposée être collée dans le code? Habituellement, nous n'autorisons pas ce type d'entrée, mais exigeons plutôt que cette entrée soit extraite de STDIN ou que, si votre soumission est une fonction, celle-ci soit transmise en tant qu'argument.
Wheat Wizard

Non, c'est une fonction. integers, find the sum of all inteest un argument, il n'est simplement pas distingué des variables normales dans la syntaxe de scratchblocks3, c'est pourquoi j'ai clarifié
Silas Reel
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.