Tâche
La tâche est très simple. Étant donné une chaîne non vide contenant des nombres , des lettres majuscules et minuscules , affichez la somme des nombres restants. Par exemple:
a1wAD5qw45REs5Fw4eRQR33wqe4WE
Filtrer toutes les lettres entraînerait:
1 5 45 5 4 33 4
La somme de ces nombres est 1 + 5 + 45 + 5 + 4 + 33 + 4 = 97
. Ainsi, la sortie serait 97
.
Cas de test
a > 0
0 > 0
5 > 5
10 > 10
a0A > 0
1a1 > 2
11a1 > 12
4dasQWE65asAs5dAa5dWD > 79
a1wAD5qw45REs5Fw4eRQR33wqe4WE > 97
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Réponses:
GS2, 2 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Labyrinthe , 8 octets
Prenez ça, Pyth ...
Essayez-le en ligne!
Explication
L'amorce habituelle (volée au Sp3000):
Ce qui est vraiment pratique ici, c'est que Labyrinth a deux commandes d'entrée différentes,
,
et?
. Le premier lit un seul octet de STDIN, ou-1
à EOF. Ce dernier lit un entier depuis STDIN. Il fait ainsi sauter tout ce qui ignore n'est pas un nombre, puis lit le premier nombre décimal qu'il trouve. Celui-ci revient0
à EOF, nous ne pouvons donc pas l'utiliser pour vérifier de manière fiable EOF ici.La boucle principale du programme est ce bit compact:
Avec
?
nous lisons un entier (ignorant toutes les lettres), avec+
nous l'ajoutons au total cumulé (qui commence comme l'un des zéros implicites en bas de la pile). Ensuite, nous lisons un autre personnage avec,
pour vérifier EOF. Tant que nous ne sommes pas à l'EOF, le caractère lu sera une lettre qui a un code de caractère positif, donc l'IP tourne à droite (de son point de vue, c'est-à-dire vers l'ouest).;
jette le personnage parce que nous n'en avons pas besoin, puis nous entrons à nouveau dans la boucle.Une fois que nous sommes à l'EOF,
,
pousse un-1
pour que l'IP tourne à gauche (est) à la place.;
rejette à nouveau cela-1
,!
imprime le total cumulé sous forme d'entier et@
termine le programme.la source
CJam, 13 octets
Correction de travailler avec une entrée sans chiffres grâce à Dennis! Également enregistré un octet en remplaçant le tableau de lettres par un tableau ASCII au-dessus du point de code 64. Et puis un autre octet enregistré par Dennis!
Translittération simple des lettres aux espaces, puis eval et sum. Essayez-le en ligne .
la source
MATL , 8 octets
Essayez-le en ligne!
la source
Rétine ,
2211Essayez-le en ligne!
11 octets (!) Économisés grâce à Martin!
Fondamentalement, juste décimal à unaire, puis compter le
1
s.la source
$0
implicite si une substitution commence par$*
. C'est un schéma très courant et qui vous aurait permis de battre Pyth. ;)Japt, 2 octets
Testez-le en ligne!
Comment ça fonctionne
la source
JavaScript ES6, 35 octets
Comment ça fonctionne
Tout d'abord, nous remplaçons chaque chaîne de non-chiffres par
"+"
. Il existe essentiellement quatre façons différentes pour que cela se termine:Les cas 1 et 2 sont déjà pris en charge. Mais nous devons en quelque sorte corriger le dernier
+
afin qu'il ne provoque pas d'erreur. Nous pourrions l'enlever avec.replace(/\+$,"")
, mais c'est trop cher. Nous pourrions ajouter un0
à la fin, mais cela affecterait le dernier nombre si la chaîne ne se termine pas par un+
. Un compromis est d’ajouter.0
, qui est à la fois un nombre valide et n'affecte pas la valeur des autres entiers.Voici quelques autres valeurs qui pourraient également fonctionner:
Version alternative, également 35 octets
Une autre version alternative, 36 octets
la source
Pyth,
121110 octetsHeureusement,
s
(convertir en int) retourne0
lorsqu'il est appliqué à la chaîne vide, donc je n'ai pas à me soucier du fait quesplit("a1b", "\D+")
retourne["", "1", ""]
. De même,split("a", "\D+")
renvoie["", ""]
.Cela me permet même de séparer chaque non-chiffre individuellement, car
1 + 0 + 0 + 0 + 0 + 2
c'est la même chose que1 + 2
.Merci à Thomas Kwa pour un octet!
la source
Gol> <> , 4 octets
Si court j'ai besoin d'un texte factice ...
la source
Perl 6, 18 bytes
Usage:
la source
Jelly, 6 bytes
Try it online!
How it works
la source
Perl, 21 + 1 = 22 bytes
Requires the
-p
flag:la source
a
?0
;-)Julia, 35 bytes
This is an anonymous function that accepts a string and returns an integer. To call it, assign it to a variable.
We use
matchall
to get an array consisting of matches of the regular expression\d+
, which are just the integers in the string. We have to tack on a 0 to the front of the string, otherwise for cases like"a"
, we'd be summing over an empty array, which causes an error. We then applyparse
to each string match, which converts to integers, and take the sum.la source
parse
can becomeint
if you don't mind the deprecation warning.PHP, 64 bytes
Run it as
https://eval.in/517817
la source
<?
instead of<?php
?Javascript,
3239 bytesShow code snippet
la source
Mathematica, 51 bytes
Catching the wrong end of the verbose Mathematica builtins. 1 Byte off with the help of @DavidC
la source
DigitCharacter ..
will save 1 byteDigitCharacter
doesn't work as written because it removes all the digits whereas we want to remove all the letters...Total@ ToExpression@StringCases[#, DigitCharacter ..] &
R,
4643 bytesExplanation
Sample run
Edit: Replaced
[^0-9]
with\\D
.la source
PowerShell,
2826 bytesTakes input
$args
then does a regex-replace
to swap the letters with+0
, then pipes that toiex
(short forInvoke-Expression
and similar toeval
).Alternatively
If you're OK with some extraneous output, you can do the following, also at
2826 bytes:This will take the input string
$args
and-split
it into an array-of-strings on the non-numbers (removing them in the process). For example,1a2b33
would turn into['1','2','33']
. We pipe that toMeasure-Object
with the-Sum
parameter. Output would be like the below:Edit -- durr, don't need the
[ ]
in the regex since I'm no longer specifying a list of possible matches ...la source
Gema, 39 characters
Sample run:
la source
Seriously, 13 bytes
Try it online!
Explanation:
la source
a
. Should be a one-byte fix.Java, 70 bytes
la source
TI-Basic, 106 bytes
Works on TI-83/84 calculators!
la source
Clojure/ClojureScript, 35 bytes
la source
R, 50 bytes
Requires having
gsubfn
installedUses
strtoi
to coerce to numericla source
Ruby 45 bytes
(First attempt at work, will revisit this)
la source
POSIX sh + tr + dc,
2725 bytesConverts any run of non-digits (including the terminating newline) to
+
operator, pushes two zeros onto the stack (in case input begins with non-digit), adds them all and prints the result. There may be an extra zero remaining at bottom of stack, but we don't care about that.la source
Lua, 51 Bytes
Pretty short for once! Even shorter than Java! The input must be a command-line argument for it to work.
Ungolfed
la source
Bash + GNU utilities, 29
If it is required to support input with no numbers (e.g.
a
), then we can do this:Bash + GNU utilities, 38
1 byte saved thanks to @TobySpeight.
la source
a
. We are currently discussing whether that's valid or not.;
instead of||
to always add zero, for no harm.Python 2, 70 bytes
I am putting a Python answer just for fun.
Very simple and uses regex to find all the numbers in the input. Try it online!
la source
raw_input
or switch to python3. A smaller version (py3, 56 bytes) :import re;print(sum(map(int,re.findall('\d+',input()))))
.Oracle SQL 11.2, 105 bytes
The regex convert alpha characters to ','
XMLTABLE create one row per item in the string using ',' as the separator.
SUM the rows to get the result.
NVL is needed to account for a string with no digit.
la source