Gewinner: Chilemagic , massive 21 Bytes!
Sie können Ihre Antwort weiterhin übermitteln, jedoch nicht mehr gewinnen. Originalpost aufbewahrt:
Ihr Ziel ist es, alle Zahlen in einer Zeichenfolge zu finden und jede einzeln mit einem vom Benutzer eingegebenen Wert zu multiplizieren
- Sie müssen sich keine Gedanken über Dezimalstellen machen
- Der Benutzer gibt eine Zahl und eine Zeichenfolge ein
- Der Benutzer muss die Zahl und die Zeichenfolge an einem bestimmten Punkt eingeben, die vom Programm gelesene Methode spielt jedoch keine Rolle. Dies kann mit stdin, Lesen einer Textdatei usw. geschehen. Der Benutzer muss jedoch irgendwann die Taste 9 auf seiner Tastatur drücken
- Alles, was kompiliert und ausgeführt werden kann, ist akzeptabel
Beispiel:
Satzeingabe: Diese 1 ist22a 3352sentence 50
Zahleneingabe: 3
Ausgabe: Diese 3 is66a 10056sentence 150
- Dieser Wettbewerb endet am 6. September 2014 (7 Tage nach Veröffentlichung).
- Dies ist ein Code-Golf , also gewinnt der kürzeste Code
Antworten:
Update - Perl - 17
15 Zeichen + 2 für
-i
und-p
Flags.Wir können das
-i
Flag verwenden, um eine Dateierweiterung einzugeben, aber da wir keine Dateien lesen, können wir es verwenden, um die Nummer abzurufen, und es wird die Variable$^I
zugewiesen.Laufen mit:
Perl - 21
Aktualisiert gemäß dem Kommentar von @ Dennis.
Laufen Sie mit
-p
Flagge.Beispiellauf:
Erläuterung:
$n=<>;
Lesen Sie die Nummer ein-p
druckt die Ausgabes/\d+/$&*$n/ge
Lesen Sie die Eingabe mit <> und suchen Sie nach einer oder mehreren Ziffern und ersetzen Sie diese durch die Ziffern multipliziert mit der Zahl.g
ist global,e
isteval
der Ersatztrank des s ///.$&
enthält , was abgestimmt wurde und es multipliziert mit der Anzahl$n
.Sie können mehr über
s///
in Perlop und mehr über Perl-Regexes in lesen perlre .Eine andere Lösung:
@ F.Hauri wies darauf hin, dass Sie die Variable auch mit dem
s
Schalter$n
4 zuweisen können. Ich bin mir nicht sicher, wie viele Zeichen dies zählt, aber ich lasse es hier:quelle
<>=~
anstelle von verwenden_$=<>;
.s
Können Sie uns auch erklären, was der Teil des Regex für uns Anfänger bedeutet?$&
statt$1
, können Sie verkürzen(\d)
zu\d
. 2. Wenn Sie den-p
Schalter verwenden und die Eingabereihenfolge ändern, können Siesay<>=~
und löschenr
.-s
Schalter, um whipe$n=<>
aus:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(do machen:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 ZeichenVielen Dank an @bebe für das Speichern eines Zeichens. Update: 8 / Mar / 16, weitere vier Zeichen entfernt
Ungolfed :
43 Zeichen:
Erfordert zuerst eine Zahleneingabe und dann einen Satz. Schneiden Sie ein Zeichen mehr hier danke @bebe noch einmal!
quelle
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
eine andere (aber das verlangt Multiplikator zuerst)Python 2 (79)
Probelauf
Eingang: Ausgabe:Online-Demo: http://ideone.com/V6jpyQ
quelle
re.sub
handelt sich um die Methode, mit der Beta Decay und ich (die beiden anderen Python-Beiträge) versucht haben, sie erneut zu implementieren. Es wäre so einfach gewesen ... Etwas anderes, das ich gelernt habe! ;)re.sub
beiseite, Sie haben hervorragende Arbeit beim Golfen der String-re.sub
ist genau das was ich wollte!Python 2 - 126
Erste Eingabe: Ganzzahl
n
.Zweite Eingabe: String
s
(z"abc42"
. B. mit Anführungszeichen ).quelle
CJam,
473330 BytesLiest die Nummer und die Zeichenfolge (in dieser Reihenfolge und durch ein einzelnes Leerzeichen getrennt) von STDIN.
Probieren Sie es online aus.
Beispiellauf
Wie es funktioniert
quelle
Bash + Coreutils, 38 Bytes
Liest die Eingabezeichenfolge aus STDIN und dem Multiplikator als Befehlszeilenparameter.
Ausgabe:
quelle
1 D4R3 Y0U: ; rm -rf /
C # in LINQPad, 124
Einfach. Bitte verwenden Sie STRG + 2 in LINQPad (Sprache: C # -Anweisungen).
Wird der Multiplikator als erster Eingabeparameter angegeben, kann dies in 116 Zeichen erfolgen:
BEARBEITEN:
Dank Abbas 'Kommentar unten kann dies sogar noch besser mit der statischen Regex-Methode umgesetzt werden , anstatt sie zu instanziieren:
quelle
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. In both versions this saves another 5 characters, getting you on 119 for the long version and 111 for the multiplier-first versionCobra - 171
quelle
Python 3 - 141
I don't think I can golf this any more...
Example:
quelle
n=2
ands="1 2"
it yields4 4
, sincereplace
modifies the first number twice. That's the same problem I'm facing right now with Python 2... ;)m=input()
saves you nothing. Andx=int
is actually 2 bytes longer than callingint(...)
twice.Mathematica
7161With 10 chars saved thanks to Martin Buttner.
Spaces in code are for readability.
f
is a function in whichs
is the input string andn
is the number to multiply discovered string numbers by.Examples
Integer
Rational number
Complex Number
quelle
StringReplace
it makes no difference whether there are spaces. I used the examples originally given by Chiperyman.StringReplace
it makes no difference whether there are spaces.Ruby 40
Input from stdin.
Example run:
Online demo: http://ideone.com/4BiHC8
quelle
Lua:
7369 charactersSample run:
quelle
JavaScript, ES6, 43 characters
This is my first attempt at golfing!
Run this in latest Firefox's Console. The first input is the number and the second input is the string from which the numbers are to be multiplied with the first input number.
The final prompt lists the output.
quelle
Perl - 48 chars
Read a number on the first line, then read a sentence and break it into chunks of either digits or non digits. Print the non digits as they are, and the numbers get multiplied.
quelle
J - 63 Zeichen
Das Programm liest die Nummer und dann den Satz ein.
Erklärt durch Explosion:
Wenn wir die PCRE-Bibliothek von J verwenden und den Satz zuerst eingeben, können wir dies auf 54 Zeichen reduzieren :
Erklärt durch Explosion:
J ist schlecht darin, was soll ich sagen. Es ist unpraktisch, weil J so nicht einflussreich ist.
Einige Beispiele:
quelle
CJam - 35
Versuchen Sie es unter http://cjam.aditsu.net/
Beispieleingabe:
Beispielausgabe:
Erläuterung:
Das Programm durchläuft jedes Zeichen, sammelt die Ziffern auf dem Stapel und druckt für jede Nicht-Ziffer zuerst die gesammelte Zahl (falls vorhanden) multipliziert mit der numerischen Eingabe und druckt dann das Zeichen.
li:X;
Liest die numerische Eingabe und speichert sie in XlN+
Liest die Zeichenfolge und fügt{…}/
für jedes Zeichen in der Zeichenfolge eine neue Zeile an (dies hilft bei abschließenden Zahlen)-
_s
kopiert die Zeichen und konvertiert sie in Zeichenfolgen-
A,s-,
entfernt alle Ziffern und zählt die verbleibenden Zeichen; das Ergebnis ist 0, wenn das Zeichen eine Ziffer war, oder 1, wenn nicht-
{…}*
führt den Block aus, wenn die Zählung 1 war (dh keine Ziffer); Bei Ziffern geschieht nichts, daher bleiben sie auf dem Stapel-
]
sammelt die Zeichen aus dem Stapel in einem Array (dh einer Zeichenfolge); Die Zeichen sind alle Ziffern aus den vorherigen Iterationen sowie das aktuelle Zeichen.- -
)\
trennt den letzten Punkt (die aktuelle Rolle) und bewegt ihn vor der (Rest-) string_!!
kopiert die Zeichenfolge und konvertiert sie in einen booleschen Wert - 0, wenn leer, 1, wenn nicht-.
{…}*
führt den Block aus, wenn der String nicht leer war, dh wir hatten einige Ziffern vor dem aktuellen nicht-stelligen Zeichen-
iX*
konvertiert den String in eine Ganzzahl und multipliziert mit X-
o
druckt den oberen Teil des Stapels - entweder die multiplizierte Zahl oder die leere Zeichenfolge, wenn wir keine Zahl hatten-
o
(die zweite) druckt den neuen oberen Teil des Stapels - das aktuelle nicht-stellige Zeichenquelle
Haskell (161)
Golf gespielt
Ungolfed
Leider hat Haskell keine Regex-Bibliothek im Prelude .
quelle
{}
um 1 Zeichen zu gewinnen. Außerdem habe ich gerade diese Haskell-Lösung mit 70 Bytes gepostet: codegolf.stackexchange.com/questions/37110/…flex (-lexer) (
9489 Zeichen)Ungolfed-Version, die nicht fehlerfrei funktioniert, wenn Sie das Kommandozeilenargument vergessen (nicht mehr lange):
Kompilieren mit:
oder:
Z.B:
quelle
Groovy
- 124Klicken Sie auf den Titel, um das ausführbare Beispiel zu sehen
Versuchte Beispiele:
quelle
GNU Awk: 86 Zeichen
Probelauf:
quelle
PHP -
75/11568/109Zwei Versionen, neuere PHP-Versionen können dies tun:
Ältere PHP-Versionen: Ich habe die Zeilenumbrüche nicht gezählt, sondern aus Gründen der Lesbarkeit hinzugefügt.
Beispiel Eingabe + Ausgabe
Etwas schwierig, nehmen die Wörter 'function' und 'preg_replace_callback' eine Menge Zeichen in Anspruch.
Der Platz nach
global
und wirdreturn
nicht benötigt, wenn ein $ var (-2 Zeichen) folgt.quelle
\d
in Zeichenklasse (-2 Zeichen) zu setzen; Die Funktion muss nicht in doppelte Anführungszeichen (-2 Zeichen) eingeschlossen werden. Sie müssen die Anweisung innerhalb der Funktion ordnungsgemäß mit einem Semikolon (+1 Zeichen) beenden. Übrigens sollte\d
in doppelten Anführungszeichen geschrieben werden\\d
, so ändern Sie die Anführungszeichen besser in einfache Anführungszeichen.0-9
in \ d. War nicht sicher über die Anführungszeichen rund um die Funktion, ich kann das nicht testen, meine lokale PHP-Version erlaubt es nicht.C (
142134 Zeichen)Zeilenumbruch zur besseren Lesbarkeit eingefügt. Übergeben Sie den Faktor als erste und die Zeichenfolge als zweite Befehlszeilenoption. Diese Implementierung erfordert die
dprintf
Funktion, die Teil von POSIX.1 2008 ist und unter Windows möglicherweise nicht verfügbar ist. Hier ist die ungekürzte Quelle:Verbesserungen
strspn
und,strcspn
anstatt die Zeichenfolge zu durchlaufen.quelle
Python 89
z.B:
quelle
Rebol - 117
Ungolfed:
quelle
Clojure -
141140128 ZeichenIch bin ein Clojure-Neuling, aber FWIW:
Probelauf:
Ungolfed (hässlich, aber hoffentlich etwas leichter zu lesen):
quelle
Python - 142
quelle
Java 218
Jemand musste Java machen. Die Eingabezeichenfolge enthält 2 Token in der Befehlszeile.
java M 'Diese 1 is22a 3352sentence 50' 3
quelle
if
funktioniert die Bedingung auch bitweise|
, dh 1 Zeichen kürzer.Zwei Antworten: Perl + Bash
Pure Bash (~ 262)
Erstens gibt es eine nicht so kurze reine Bash-Version (keine Fork, keine externen Binaries)!
Lass es uns zeigen:
(Welches ist ein völlig unwahrscheinlicher Satz)
Perl etwas verschleiert (nur zum Spaß)
Diese Version (basierend auf der Antwort von @ Chilemagic ) ist nicht kürzer, sondern als Totem- Skript konzipiert:
Probelauf:
quelle
Haskell, 70
schade ich bin zu spät IMHO das ist ziemlich gut für diese spezifische Frage und Sprache. Die andere Haskell-Lösung besteht aus 161 Zeichen.
Dies funktioniert mit der
reads
Funktion, die eine Zeichenfolge teilweise analysiert. zum Beispielreads "34abc" = [(34, "abc")]
. Dies macht es offensichtlich perfekt für diese Herausforderung.Verwendung:
quelle