Bonjour, bienvenue chez PPCG. Les défis pour une seule langue sont généralement mal vus ici chez PPCG. Peut-être pourriez-vous le changer en un défi général: étant donné une chaîne, affichez la somme de tous les nombres de la chaîne, en ignorant tout le reste (c'est "the 5is 108 seCONd4 a"-à- dire que cela entraînera 117parce que 5+108+4=117). De plus, chaque «question» ici doit avoir une étiquette de condition gagnante . Dans ce cas, je suppose que c'est [code-golf] (étant la solution la plus courte possible)?
Kevin Cruijssen
4
Il semble que vous ayez posté une question similaire sur SO, ce qui tend à confirmer qu'il n'a pas été conçu pour être un défi PPCG et que vous recherchez un code `` utilisable '' plutôt que du code golfé. Je recommanderais plutôt d'améliorer votre question d'origine sur SO, afin qu'elle corresponde mieux aux règles du site.
Arnauld
4
J'ai révisé votre message pour l'adapter à nos normes. N'hésitez pas à modifier si le résultat ne vous convient pas.
Et dans ce cas, string x='-12hello3';comptez-vous des entiers négatifs (c.-à-d. -12 + 3 === -9)?
Shaun Bebbers
Réponses:
4
Javascript, 34 32 octets
s=>eval(s.match(/\d+/g).join`+`)
Faites correspondre tous les chiffres et joignez-les en les +transformant en 5 + 108 + 4, évaluez le résultat.
Fonctionne uniquement sur des entiers positifs.
Je suppose que l'utilisation de string.length dans la console pour compter les caractères n'est pas une bonne idée quand elle contient des caractères d'échappement ... Oups, corrigé. Thx again
Bassdrop Cumberwubwubwub
Une option légèrement meilleure serait console.log(f.toString().length), mais elle n'est pas fiable à 100% non plus.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication: l' Sumopérateur de Charcoal extrait automatiquement les nombres d'une chaîne, mais si la chaîne ne contient pas de caractères non numériques, alors il prend la somme numérique, donc je concatène un octet nul pour éviter cela. Le résultat est ensuite converti en chaîne pour une sortie implicite.
Pourquoi pas. Réponse regex obligatoire. Pourrait probablement ancrer 6 en utilisant Python 2, mais peu importe. Ne s'applique plus puisque j'utilise une approche eval au lieu d'utiliser la carte.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
Agréable! Dans votre TIO, vous devez utiliser z == l[1]au lieu de z is l[1]bien. Le code actuel peut donner de faux négatifs si les chiffres sont suffisamment élevés.
Un assez simple. Idans cubix prendra le premier entier dans l'entrée et le poussera vers la pile. Cela a pour effet de sauter tous les personnages. Le reste traite de l'apport supplémentaire et détecte la fin de l'entrée.
I! Entrez un entier et testez-le pour 0
s+q;;Si ce n'est pas zéro, échangez TOS (forces et 0 initial) et ajoutez. Poussez le résultat au bas de la pile et nettoyez le haut. Revenez au début.
/i? Si zéro, redirigez et faites une entrée de caractère pour vérifier
|?;/Si positif (caractère), tournez à droite dans un reflet, cela le repousse à travers le vérificateur ?et tourne à droite sur la pop de la pile, laissant 0 sur TOS. L'IP est ensuite redirigée vers la boucle principale.
I>p.O@ si négatif (fin d'entrée) tourner à gauche, faire une entrée entière, amener le bas de la pile en haut, sortir et arrêter.
Une réponse plus intéressante, mais indirecte (37 octets): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Explication
Sum##N=>MatchAll&"\\d+"
Cela a la forme:
f##g=>h&x
qui, une fois développé et entre parenthèses, devient:
f ## (g => (h&x))
##compose deux fonctions ensemble, =>crée une fonction mappant la fonction gauche sur le résultat de la fonction droite et &lie un argument à un côté d'une fonction. Pour l'entrée _, cela équivaut à:
{ f[Map[g, h[_, x]]] }
D'abord, ensuite, nous MatchAllexécutons des caractères numériques ( \\d+). Après, nous convertissons chaque exécution en un entier réel en utilisant la Nfonction. Enfin, nous prenons la somme de ces nombres en utilisant Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
Je ne pense pas que ce soit correct: le (seul) exemple de l'OP suggère que les chiffres consécutifs devraient former un seul entier, donc "123" devrait produire 123, pas 6 comme le fait votre code.
-4 bytesen utilisant Long::newau lieu de Long::valueOf. -1 byteen raccourcissant l'expression régulière - si nous supprimons déjà les chaînes vides plus tard, faire quelques extras lors du fractionnement est très bien.
Expliqué
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
-à- dire que cela entraînera117
parce que5+108+4=117
). De plus, chaque «question» ici doit avoir une étiquette de condition gagnante . Dans ce cas, je suppose que c'est [code-golf] (étant la solution la plus courte possible)?string x='-12hello3';
comptez-vous des entiers négatifs (c.-à-d. -12 + 3 === -9)?Réponses:
Javascript,
3432 octetss=>eval(s.match(/\d+/g).join`+`)
Faites correspondre tous les chiffres et joignez-les en les
+
transformant en 5 + 108 + 4, évaluez le résultat.Fonctionne uniquement sur des entiers positifs.
Enregistré 2 octets grâce à Arnauld
la source
console.log(f.toString().length)
, mais elle n'est pas fiable à 100% non plus.Perl 6 , 14 octets
Essayez-le en ligne!
Bloc de code anonyme qui renvoie la somme de toutes les séries de chiffres
la source
05AB1E ,
116 octetsEssayez-le en ligne.
Explication:
la source
¡
!R ,
644845 octetsAprès avoir vu l'entrée PowerShell, j'ai pu jouer au golf plus loin.
Essayez-le en ligne!
la source
t=
est suffisant ici plutôt quetext
APL (Dyalog Unicode) , 11 octets
Fonction prefic tacite anonyme
Essayez-le en ligne!
⊢
l'argument⊆
partitionné (les séries de True deviennent des morceaux, les séries de False sont des séparateurs) par∊
l' adhésion∘
de⎕D
l'ensemble des chiffres#⍎¨
évaluer chacun dans l'espace de noms racine+/
sommela source
Retina 0.8.2 , 8 octets
Essayez-le en ligne!
la source
PowerShell , 29 octets
Essayez-le en ligne!
la source
Fusain , 5 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication: l'
Sum
opérateur de Charcoal extrait automatiquement les nombres d'une chaîne, mais si la chaîne ne contient pas de caractères non numériques, alors il prend la somme numérique, donc je concatène un octet nul pour éviter cela. Le résultat est ensuite converti en chaîne pour une sortie implicite.la source
Haskell , 50 octets
Essayez-le en ligne!
Il y a probablement une meilleure façon, mais c'est la plus évidente.
la source
Zsh , 21 octets
Essayez-le en ligne!
Malheureusement, bash se plaint car il interprète
0108
comme octal. Zsh ne le fait pas (saufsetopt octalzeroes
)la source
Bash, 43 octets
Remplace chaque non-nombre par un espace, puis les additionne ensemble.
-5 octets grâce à GammaFunction
la source
{
}
place dedo
done
.Python 3 ,
635956 octetsPourquoi pas. Réponse regex obligatoire.
Pourrait probablement ancrer 6 en utilisant Python 2, mais peu importe.Ne s'applique plus puisque j'utilise une approche eval au lieu d'utiliser la carte.Explication:
Essayez-le en ligne!
la source
z == l[1]
au lieu dez is l[1]
bien. Le code actuel peut donner de faux négatifs si les chiffres sont suffisamment élevés.Java 10, 66 octets
Ceci est un lambda de
String
àint
.Les entiers négatifs ne sont pas pris en charge. Vraisemblablement, ça va.
Essayez-le en ligne
Remerciements
la source
[^0-9]
pour\D
quelques octets, vous pouvez aussi changerlong
etString
pourvar
(bien que vous deviez changer le type de retour enint
Ruby,
3227 caractèresRemerciements
la source
*?+
au lieu de.join ?+
-7 octets. Voir ary * strCubix , 17 octets
Essayez-le en ligne!
Regardez-le courir
Un assez simple.
I
dans cubix prendra le premier entier dans l'entrée et le poussera vers la pile. Cela a pour effet de sauter tous les personnages. Le reste traite de l'apport supplémentaire et détecte la fin de l'entrée.I!
Entrez un entier et testez-le pour 0s+q;;
Si ce n'est pas zéro, échangez TOS (forces et 0 initial) et ajoutez. Poussez le résultat au bas de la pile et nettoyez le haut. Revenez au début./i?
Si zéro, redirigez et faites une entrée de caractère pour vérifier|?;/
Si positif (caractère), tournez à droite dans un reflet, cela le repousse à travers le vérificateur?
et tourne à droite sur la pop de la pile, laissant 0 sur TOS. L'IP est ensuite redirigée vers la boucle principale.I>p.O@
si négatif (fin d'entrée) tourner à gauche, faire une entrée entière, amener le bas de la pile en haut, sortir et arrêter.la source
PHP ,
4039 octetsEssayez-le en ligne!
L'
php -nF
exécution avec entrée provient de STDIN. Exemple:la source
Haskell , 43 octets
Essayez-le en ligne!
Fait usage de
reads
.la source
Avant , 13 octets
Cela fonctionne parce
I
que balaye simplement le flux d'entrée pour le prochain jeton qui ressemble à un nombre, en ignorant toute autre chose.Essayez-le en ligne!
la source
QuadR , 9 octets
Essayez-le en ligne!
+/
somme de⍎
évaluation en tant qu'APL⍵
Le résultat de\D
remplacer chaque non-chiffre parla source
Japt
-x
, 5 octetsEssayez-le en ligne!
la source
Attaché , 23 octets
Essayez-le en ligne!
Une réponse plus intéressante, mais indirecte (37 octets):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Explication
Cela a la forme:
qui, une fois développé et entre parenthèses, devient:
##
compose deux fonctions ensemble,=>
crée une fonction mappant la fonction gauche sur le résultat de la fonction droite et&
lie un argument à un côté d'une fonction. Pour l'entrée_
, cela équivaut à:D'abord, ensuite, nous
MatchAll
exécutons des caractères numériques (\\d+
). Après, nous convertissons chaque exécution en un entier réel en utilisant laN
fonction. Enfin, nous prenons la somme de ces nombres en utilisantSum
.la source
APL (NARS), caractères 13, octets 26
tester:
la source
C # (Visual C # Interactive Compiler),
117111 octetsEssayez-le en ligne.
la source
Perl 5
-p
, 17 octetsEssayez-le en ligne!
la source
Japt v2.0a0
-x
, 3 octetsUn autre essai routier pour mon interprète (très-WIP).
Essayez-le
la source
Java 8,
53130 octets105 octets + 25 octets pour l'importation d'expressions régulières
Essayez-le en ligne!
Explication
la source
SNOBOL4 (CSNOBOL4) , 81 octets
Essayez-le en ligne!
la source
Swift, 109 octets
Essayez-le en ligne!
la source
Pip , 6 octets
Traite
-123
comme un entier négatif. Essayez-le en ligne!Si les tirets doivent être ignorés plutôt que traités comme des signes moins, alors ce qui suit fonctionne pour 7 octets :
XD
est une variable prédéfinie pour`\d`
;+XD
lui ajoute le+
modificateur regex , le faisant correspondre à 1 ou plusieurs chiffres.la source
Java (JDK) ,
989493 octetsEssayez-le en ligne!
-4 bytes
en utilisantLong::new
au lieu deLong::valueOf
.-1 byte
en raccourcissant l'expression régulière - si nous supprimons déjà les chaînes vides plus tard, faire quelques extras lors du fractionnement est très bien.Expliqué
la source