Créez un programme qui additionne tous les entiers trouvés dans une chaîne qui est définie comme une variable dans le programme (ainsi, le programme n'a à gérer aucune entrée). Les nombres entiers sont séparés par des nombres non numériques (tout sauf 0, 1, 2, 3 ... 9).
Exemples:
e7rde f ,fe 43 jfj 54f4sD
= 7 + 43 + 54 + 4 = 1085
= 564 545,5445-32JIFk0ddk
= 64 + 545 + 5445 + 32 + 0 = 60860ab0
= 0 + 0 = 0
Notes supplémentaires:
- Le support Unicode n'est pas nécessaire, mais autorisé
-n
(oùn
est un entier) n'est pas compté comme un négatifn
, mais comme un trait d'union suivi den
.
La réponse peut être imprimée à l'écran (mais pas obligatoire).
Réponse la plus courte (en caractères) gagne.
5a-3
(mon code sauterait-
s'il suit immédiatement un numéro, mais pas s'il y avait un non-numéro avant).Réponses:
Perl, 15
Entrée
$_
, somme$c
:la source
Ruby 1.9, 21 caractères
Pour imprimer la solution sur stdout, 2 caractères supplémentaires sont requis:
Et pour lire à partir de stdin au lieu d'utiliser une variable prédéfinie, 3 autres caractères doivent être utilisés:
Pour Ruby 1.8, remplacez
?+
par"+"
pour obtenir une solution de travail en 22 caractères.la source
scan
plus court quesplit
. Votre solution devient donceval s.scan(/\d+/)*?+
- 21 caractères.scan
, merci!eval
et* '+'
Python (60)
la source
Rubis -
3634 caractères36 caractères si vous voulez que le résultat soit imprimé.
Suppose que l'entrée est présente sous forme de chaîne dans s.
la source
JavaScript (ES6), 30
Version annotée:
la source
Windows PowerShell, 23
252931Avec sortie.
En fait, sans que la sortie soit exactement la même, il suffit de la diriger ailleurs où elle est nécessaire.
la source
J -
4038 caractèresVersion paresseuse. Nécessite la bibliothèque de chaînes.
la source
Java
hors concours;)
la source
JavaScript [30 octets]
la source
Labyrinthe ,
2921 octets(Avertissement: Labyrinth est plus récent que ce défi.)
En outre, Labyrinth n'a pas de variables, donc je suis allé avec un programme d'entrée / sortie normal.
C'était assez simple à cause de la façon dont les commandes d'entrée de Labyrinth fonctionnent.
?
essaie de lire un entier signé de STDIN et s'arrête au premier non-chiffre. S'il ne peut pas lire un entier (parce que le caractère suivant n'est-
pas suivi d'un chiffre, ou de tout autre non-chiffre, ou nous avons atteint EOF), il reviendra à la0
place.,
d'autre part lit tout octet suivant et pousse la valeur d'octet. Si celui-ci est appelé à l'EOF, il reviendra-1
place.Voici donc un pseudocode pour la solution:
Gérer correctement les nombres négatifs complique beaucoup cette solution. Si ce n'était pas pour ceux-là, j'aurais cette solution à 8 octets:
la source
PHP - 37
Sans impression;
Avec impression (38):
la source
Perl, 16 caractères
Prend l'entrée
$_
, la sortie continue$r
. Le dernier point-virgule est superflu, mais il sera probablement nécessaire lorsque le programme fera plus de choses. Ajoutersay$r
pour la sortie.la source
wc -c
.J - 23 caractères
Pas un gagnant, mais nous voyons une primitive assez rare en action.
Expliqué:
_"."0 y
- Pour chaque caractère de la chaîne d'entréey
, essayez de le lire sous forme de nombre. Si vous ne le pouvez pas, utilisez_
plutôt la valeur par défaut (infini).,_=
- Vérifiez chaque résultat pour_
, puis exécutez le tableau final de 0 et de 1 dans un vecteur. ("."0
ajoute toujours une dimension de trop au résultat, nous corrigeons donc cela ici.)y,:' '
- Ajoutez une rangée d'espaces sous la chaîne d'entrée.}
- Utilisé tel qu'il est ici,}
est appelé Item Amend , et il utilise la liste des 0 et des 1 à gauche comme indices pour sélectionner la ligne à partir de laquelle l'argument de droite est utilisé. Donc, ce qui se passe, c'est que pour chaque colonne du côté droit, nous prenons le caractère d'origine s'il peut être lu comme un nombre, sinon nous prenons l'espace en dessous. Par conséquent, nous couvrons tous les caractères non numériques avec des espaces.+/".
- Convertissez maintenant cette chaîne entière en une liste de nombres et additionnez-les.la source
gs2, 4 octets
Encodé en CP437 ; le troisième octet est
E9
.W
lit tous les nombres/-?\d+/
d'une chaîne,#Θ
mappe la valeur absolue, lesd
sommes.(gs2 est également plus récent que ce défi, mais sa
read-nums
commande est une coïncidence totale.)la source
Smalltalk (Smalltalk / X) (51 caractères)
en utilisant le paquet regex:
wo regex:
entrée en s
la source
R, 30
Ici,
x
le nom de la variable.Exemple:
la source
Javascript - 43 caractères
Je sais que c'est long, mais il n'y avait pas de solution JS donc :)
a
est la chaîne.c
contient la réponse.la source
Tcl, 30
Il suppose que l'entrée se trouve dans la variable
$a
(officiellement, dansa
) et stocke la réponse dans le résultat de l'interpréteur. Les E / S sont laissées en exercice.la source
APL, 16 octets
⎕d
est un intégré contenant les chiffres (0-9).b
est affecté à un vecteur de 0/1 où 1 est donné aux caractères qui sont des chiffres.b
est utilisé pour compresser le tableau de caractères donné, puis réutilisé pour le développer, ce qui insère des espaces.⍎
est l' eval d'APL qui convertit une chaîne en un vecteur entier, dans ce cas.+/
calcule la somme.la source
+/2⊃⍞⎕VFI⍨⎕AV~⎕D
Swift 3, 78
où
s
est la chaînela source
Perl - 24 caractères
L'entrée est en $ _
la source
En fait, 14 octets (non concurrents)
Essayez-le en ligne!
Cette soumission n'est pas concurrentielle, car elle est en fait un peu plus récente que ce défi.
Ce programme prend en charge la page de codes CP437 pour la saisie.
Explication:
la source
C 100
Essayez-le en ligne!
Une version antérieure de 85 octets qui triche un peu en codant en dur la chaîne à l'intérieur du programme:
Pour utiliser réellement le programme de 85 octets, vous devez affecter la variable comme suit:
la source