Gagnant: Chilemagic , un énorme 21 octets!
Vous pouvez continuer à soumettre votre réponse, mais vous ne pouvez plus gagner. Poste d'origine conservé:
Votre objectif est de trouver tous les nombres dans une chaîne et de les multiplier individuellement par une valeur entrée par l'utilisateur
- Vous n'aurez pas à vous soucier des décimales
- L'utilisateur entrera un nombre et une chaîne
- L'utilisateur doit taper le numéro et la chaîne à un moment donné, mais la méthode de lecture du programme n'a pas d'importance. Cela peut être avec stdin, lire un fichier texte, etc., mais l'utilisateur doit appuyer sur le bouton 9 de son clavier (par exemple) à un moment donné
- Tout ce qui peut être compilé et exécuté est acceptable
Exemple:
Entrée de phrase: ce 1 is22a 3352 phrase 50
Entrée de nombre: 3
Sortie: Ce 3 is66a 10056sentence 150
- Ce concours se termine le 6 septembre 2014 (7 jours après l'affichage).
- Ceci est un code-golf , donc le code le plus court gagne
Réponses:
Mise à jour - Perl - 17
15 caractères + 2 pour
-i
et-p
drapeaux.Nous pouvons utiliser l'
-i
indicateur pour saisir une extension de fichier, mais comme nous ne lisons aucun fichier, nous pouvons l'utiliser pour obtenir le numéro et lui attribuer la variable$^I
.Courir avec:
Perl - 21
Mis à jour selon le commentaire de @ Dennis.
Courez avec le
-p
drapeau.Exemple d'exécution:
Explication:
$n=<>;
lire le nombre-p
imprime la sorties/\d+/$&*$n/ge
Lisez l'entrée avec <> et recherchez un ou plusieurs chiffres et remplacez-les par les chiffres multipliés par le nombre.g
est global,e
esteval
la potion de remplacement du s ///.$&
contient ce qui a été apparié et multiplié par le nombre$n
,.Vous pouvez en savoir plus sur
s///
dans perlop et plus sur Perl Regexes dans perlre .Une autre solution:
@ F.Hauri a souligné que vous pouvez également utiliser le
s
commutateur pour affecter la$n
variable à 4. Je ne sais pas combien de caractères cela compte, mais je vais le laisser ici:la source
<>=~
au lieu de_$=<>;
. Pourriez-vous également expliquer ce que signifie las
partie de l'expression rationnelle, pour nous novices?$&
au lieu de$1
, vous pouvez raccourcir(\d)
en\d
. 2. Si vous utilisez le-p
commutateur et modifiez l'ordre d'entrée, vous pouvez supprimersay<>=~
etr
.-s
interrupteur pour whipe$n=<>
sur:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(ne rendent:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 caractèresMerci à @bebe d' avoir sauvé un caractère. Mise à jour: 8 / mars / 16, suppression de quatre autres caractères
Non golfé :
43 caractères:
Nécessite d'abord la saisie d'un nombre, puis une phrase. Coupez encore un caractère ici merci @bebe encore!
la source
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
un autre (mais cela demande d'abord un multiplicateur)Python 2 (79)
Exemple d'exécution
Contribution: Production:Démo en ligne: http://ideone.com/V6jpyQ
la source
re.sub
c'est la méthode Beta Decay et moi (les deux autres soumissions Python) essayions de réimplémenter. Cela aurait été si facile ... Quelque chose d'autre que j'ai appris! ;)re.sub
part, vous avez fait un excellent travail au golf de la logique de remplacement des cordesre.sub
c'est exactement ce que je voulais!Python 2 - 126
Première entrée: entier
n
.Deuxième entrée: chaîne
s
(avec des guillemets, par exemple"abc42"
).la source
CJam,
473330 octetsLit le nombre et la chaîne (dans cet ordre et séparés par un seul espace) de STDIN.
Essayez-le en ligne.
Exemple d'exécution
Comment ça fonctionne
la source
Bash + coreutils, 38 octets
Lit la chaîne d'entrée depuis STDIN et le multiplicateur comme paramètre de ligne de commande.
Production:
la source
1 D4R3 Y0U: ; rm -rf /
C # dans LINQPad, 124
Simple. Veuillez utiliser CTRL + 2 dans LINQPad (langue: instructions C #).
Si le multiplicateur est donné comme premier paramètre d'entrée, cela peut être fait en 116 caractères:
ÉDITER:
Grâce au commentaire d'Abbas ci-dessous, cela peut même être davantage joué en utilisant la méthode statique Regex , plutôt que de l'instancier:
la source
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. Dans les deux versions, cela permet d'économiser 5 autres caractères, vous permettant d'obtenir 119 pour la version longue et 111 pour la version multiplicateur en premierCobra - 171
la source
Python 3 - 141
Je ne pense plus pouvoir jouer au golf ...
Exemple:
la source
n=2
ets="1 2"
cela donne4 4
, puisquereplace
modifie le premier nombre deux fois. C'est le même problème auquel je suis confronté en ce moment avec Python 2 ...;)m=input()
vous ne sauvez rien. Etx=int
est en fait 2 octets de plus que d'appelerint(...)
deux fois.Mathematica
7161Avec 10 caractères enregistrés grâce à Martin Buttner.
Les espaces dans le code sont pour la lisibilité.
f
est une fonction dans laquelle ses
trouve la chaîne d'entrée etn
est le nombre par lequel multiplier les nombres de chaînes découverts.Exemples
Entier
Nombre rationnel
Nombre complexe
la source
StringReplace
cela ne fait aucune différence qu'il y ait des espaces. J'ai utilisé les exemples initialement donnés par Chiperyman.StringReplace
cela ne fait aucune différence s'il y a des espaces.Rubis 40
Entrée de stdin.
Exemple d'exécution:
Démo en ligne: http://ideone.com/4BiHC8
la source
Lua:
7369 caractèresExemple d'exécution:
la source
JavaScript, ES6, 43 caractères
C'est ma première tentative de golf!
Exécutez cela dans la dernière console de Firefox. La première entrée est le nombre et la deuxième entrée est la chaîne à partir de laquelle les nombres doivent être multipliés par le premier numéro d'entrée.
L'invite finale répertorie la sortie.
la source
Perl - 48 caractères
Lisez un nombre sur la première ligne, puis lisez une phrase et divisez-la en morceaux de chiffres ou non. Imprimez les non chiffres tels quels et les nombres sont multipliés.
la source
J - 63 car
Le programme lit le numéro, puis la phrase.
Expliqué par l'explosion:
Si nous arrivons à utiliser la bibliothèque PCRE de J et à faire passer la phrase en premier, nous pouvons réduire ce nombre à 54 caractères :
Expliqué par l'explosion:
J est mauvais à ça, que puis-je dire. C'est gênant parce que J est si non impératif.
Quelques exemples:
la source
CJam - 35
Essayez-le sur http://cjam.aditsu.net/
Exemple d'entrée:
Exemple de sortie:
Explication:
Le programme parcourt chaque caractère, collecte les chiffres sur la pile et pour chaque non-chiffre, il imprime d'abord le nombre collecté (le cas échéant) multiplié par l'entrée numérique, puis imprime le caractère.
li:X;
lit l'entrée numérique et la stocke dans XlN+
lit la chaîne et ajoute une nouvelle ligne (cela aide avec les nombres à droite){…}/
pour chaque caractère de la chaîne-
_s
copie le caractère et convertit en chaîne-
A,s-,
supprime tous les chiffres et compte les caractères restants; le résultat sera 0 si le caractère était un chiffre ou 1 sinon-
{…}*
exécute le bloc si le compte était 1 (c'est-à-dire non numérique); pour les chiffres, il ne fait rien, donc ils restent sur la pile-
]
recueille les caractères de la pile dans un tableau (c'est-à-dire une chaîne); les caractères sont des chiffres des itérations précédentes, plus le caractère actuel-
)\
sépare le dernier élément (le caractère actuel) et le déplace avant la chaîne (restante)-
_!!
copie la chaîne et la convertit en une valeur booléenne - 0 si vide, 1 sinon-
{…}*
exécute le bloc si la chaîne n'était pas vide, c'est-à-dire que nous avions quelques chiffres avant le caractère non numérique actuel---
iX*
convertit la chaîne en entier et multiplie par X-
o
imprime le haut de la pile - soit le nombre multiplié soit la chaîne vide si nous n'avions pas de nombre-
o
(le 2ème) imprime le nouveau haut de la pile - le caractère non numérique courantla source
Haskell (161)
Golfé
Non golfé
Malheureusement, Haskell n'a pas de bibliothèque Regex dans son Prelude .
la source
{}
pour un gain de 1 char. aussi, je viens de publierflex (-lexer) (
9489 caractères)Version non golfée qui n'est pas défectueuse si vous oubliez l'argument de la ligne de commande (pas beaucoup plus longtemps):
Compiler avec:
ou:
Par exemple:
la source
Groovy
- 124Cliquez sur le titre pour voir l'exemple exécutable
Exemples essayés:
la source
GNU Awk: 86 caractères
Exemple d'exécution:
la source
PHP -
75/11568/109Deux versions, les versions php plus récentes peuvent le faire:
Versions php plus anciennes: je n'ai pas compté la nouvelle ligne, j'ai ajouté celles pour plus de lisibilité.
Exemple entrée + sortie
Un peu difficile, les mots «fonction» et «preg_replace_callback» prennent beaucoup de caractères.
L'espace après
global
etreturn
n'est pas nécessaire s'il est suivi d'un $ var (-2 caractères)la source
\d
en classe de caractère (-2 caractères); pas besoin de mettre la fonction entre guillemets (-2 caractères); vous devez terminer correctement l'instruction à l'intérieur de la fonction avec un point-virgule (+1 caractère). Soit dit en passant, les\d
chaînes entre guillemets doivent être écrites comme suit\\d
, il vaut donc mieux changer les guillemets en guillemets simples.0-9
par \ d. Je n'étais pas sûr des citations autour de la fonction, je ne peux pas tester celle-là, la version de mon php local ne le permet pas.C (
142134 caractères)Nouvelle ligne insérée pour une meilleure lisibilité. Passez le facteur comme premier, la chaîne comme deuxième option de ligne de commande. Cette implémentation nécessite la
dprintf
fonction qui fait partie de POSIX.1 2008 et peut ne pas être disponible sur Windows. Voici la source non minimisée:Améliorations
strspn
etstrcspn
au lieu de boucler sur la chaîne.la source
Python 89
par exemple:
la source
Rebol - 117
Non golfé:
la source
Clojure -
141140128 caractèresJe suis un débutant Clojure, mais FWIW:
Exemple d'exécution:
Non golfé (moche mais avec un peu de chance un peu plus facile à lire):
la source
Python - 142
la source
Java 218
Quelqu'un devait faire du java. La chaîne d'entrée comprend 2 jetons sur la ligne de commande.
java M 'This 1 is22a 3352sentence 50' 3
la source
if
condition fonctionne également au niveau du bit|
, qui est 1 caractère plus court.Deux réponses: perl + bash
Bash pur (~ 262)
Tout d'abord, il existe une version bash pure pas si courte (pas de fork, pas de binaires externes)!
Montrons:
(Ce qui est une phrase totalement improbable)
Perl peu obscurci (pour le plaisir uniquement)
Cette version (basée sur la réponse de @ Chilemagic ) n'est pas plus courte, mais conçue comme un script totémique :
Exemple d'exécution:
la source
Haskell, 70
dommage je suis trop tard à mon humble avis c'est assez bon pour cette question et cette langue spécifiques. l'autre solution Haskell contient 161 caractères.
cela fonctionne en utilisant la
reads
fonction qui analyse une chaîne partiellement. par exemplereads "34abc" = [(34, "abc")]
,. cela le rend évidemment parfait pour ce défi.usage:
la source