Bei einer Zeichenfolge mit Dezimalzahlen:
teststring134this 123test string54 100
Erhöhen Sie jede Zahl in dieser Zeichenfolge um eins, um die neue Zeichenfolge zu erhalten
teststring135this 124test string55 101
.
Die Zeichenfolge kann wie folgt bereitgestellt werden:
- ein Befehlszeilenargument
- STDIN
- eine fest codierte Variable oder ein Funktionsargument
Decken Sie alle möglichen Positionen für eine Nummer ab:
- als Präfix für ein Wort;
123test
►124test
- als Suffix für ein Wort;
test123
►test124
- in einem Wort;
te123st
►te124st
- allein
test 123 test
►test 124 test
Hier ist eine Lösung ohne Golf in Python:
NUMBERS = '0123456789'
def increment(s):
out = ''
number = ''
for c in s:
if c in NUMBERS:
number += c
else:
if number != '':
out += str(int(number) + 1)
number = ''
out += c
if number != '':
out += str(int(number) + 1)
number = ''
return out
print "\"%s\"" % (increment('teststring134this 123test string54 100'))
Dies ist eine code-golf
Frage, der kürzeste Code gewinnt.
Antworten:
Perl, 14 Bytes
Benötigt den
-p
Schalter, den ich als ein Byte gezählt habe.Beispiellauf
quelle
Ruby,
3024 BytesErwartet, dass die Eingabe in gespeichert wird
s
.quelle
$1.next
im Block verwendet werden?next
dass es so raffiniert ist.Vim - 13 Tastenanschläge
Erwartet, dass die Eingabe die aktuelle Zeile ist.
Oder für endlich viele Zahlen (z. B. 999) in Tastenanschlägen mit 8 + Ceil (log (n)):
quelle
JavaScript (ES6) - 28
Führen Sie mit aus
H("test 123 234t")
.quelle
H=
und es einfach zu einer anonymen Funktion machen.Perl, 23
Angenommen, die Eingabezeichenfolge ist zugewiesen
$_
quelle
Python 2 - 59
Geben Sie den String als Variable an
n
quelle
C99 - 86 (GCC 4.9.0 und Visual C ++ 2013)
Bearbeiten: Sowohl GCC 4.9.0 (mit -std = c99) als auch Visual C ++ 2013 erstellen erfolgreich (mit Warnungen) denselben Code ohne die Includes. Ich wusste nicht, dass du das kannst! Danke für den Tipp.
Bearbeiten: Mir ist nicht einmal in den Sinn gekommen, dass ich es im laufenden Betrieb auf den Bildschirm schreiben sollte, anstatt die Zeichenfolge zu erstellen und sie dann zu drucken. Das macht einen großen Unterschied. Danke Dennis!
Hierbei wird eine fest codierte Zeichenfolge verwendet, der Inhalt der Zeichenfolge wird jedoch nicht zur Gesamtsumme gezählt (das = "" wird gezählt).
Grundsätzlich durchläuft es die Zeichenfolge zeichenweise und prüft jeweils, ob es sich um eine Ganzzahl handelt. Wenn dies der Fall ist, wird die Ganzzahl inkrementiert und in die Ausgabe geschrieben, andernfalls wird das aktuelle Zeichen in die Ausgabe kopiert.
Dadurch wird die fest codierte Zeichenfolge verloren, da s erhöht wird.
quelle
include
s loswerden und es wird immer noch gut mit gcc kompiliert.99
.J (20)
Erwartet, dass die Eingabe in der Variablen gespeichert wird
a
.Prüfung:
quelle
(f?) Lex (39)
Datei
inc.l
:Kompilieren:
Lauf:
Ich habe dies nicht mit dem Original getestet
lex
. Kommentare sind willkommen.quelle
%%
da dies kein Benutzercode ist: flex.sourceforge.net/manual/…Emacs - 20 Zeichen
Erfordert, dass zu verarbeitender Text im aktuellen Puffer vorhanden ist. Ich habe CM-% hier als ein Zeichen gezählt, da es mit einem Tastendruck eingegeben werden kann, wenn drei Modifikatoren gedrückt gehalten werden.
quelle
GNU sed, 304 (einschließlich 1 für -r Flagge)
Ich habe diese Frage als mögliches Duplikat knapp gewählt, aber das widerspricht vielleicht dem, weil diese Antwort nicht trivial geändert werden kann, um dort zu funktionieren. Mit Abstand die längste Antwort.
Inspiriert von diesem Beispiel aus der sed-Dokumentation , obwohl einige Arbeiten erforderlich waren, um mehrere Zahlen in einer Zeichenfolge zu verarbeiten:
Ausgabe:
Beachten Sie, dass dadurch vorübergehend
_
Zeichen eingefügt werden , die zu falschen Ergebnissen führen können, wenn sie_
im Eingabestream vorhanden sind . Um dies zu vermeiden, können wir das_
im sed-Skript durch ein nicht druckbares Zeichen (z. B. ASCII 0x07 BEL) ersetzen und davon ausgehen, dass der Eingabestream nur druckbares ASCII enthält. Dies scheint gut zu funktionieren, wenn ich es teste.quelle
Schläger 74
quelle
Lua - 68 Zeichen
Erwartet, dass die Eingabe in s gespeichert wird.
quelle
CJam,
67 58 534831 ZeichenDiese Frage ist wie die schlimmste Frage für CJam. Kein Regex, kein Pattern Matching, kein Ausnahmefang. Aber los geht's (#YOLO)
Dieser teilt die Zeichenfolge in eine Gruppe von nur Alphabeten und nur Ziffern auf. Das erhöht jede Ziffer und stickt die beiden Arrays zurück, wobei jeweils ein Element verwendet wird.
Vorherige Lösung:
Probieren Sie es hier online aus
Wie es funktioniert:
Die Grundidee besteht darin, das Zeichen weiterhin separat in einer Zeichenfolge zu speichern, wenn es sich um eine Ziffer handelt, und den inkrementierten Wert auf die endgültige Zeichenfolge zu übertragen, sobald ein nicht-stelliges Zeichen angezeigt wird.
quelle
Cobra - 88
quelle
C # -
178169157 ZeichenDies setzt voraus, dass Zahlen wie 999 auf 000 überlaufen dürfen und dass - +, E nicht Teil einer Zahl sind.
Besser lesbare Form:
Ich bin neu hier, habe noch nie Code Golf ausprobiert, habe es einfach ausprobiert :)
Ich frage mich, ob jemand Ideen hat, um es noch kürzer zu machen ...
Um mit C # teilzunehmen, wäre es schön, wenn wir alle notwendigen Frameworks um den eigentlichen Code weglassen könnten - dann hätte dies nur 82 Zeichen, und das ohne Aufrufen leistungsfähiger Systemfunktionen.
Das gleiche gilt für Zeiger (182 Zeichen):
Jetzt, ohne überzulaufen, wird der 999-Fall (223 Zeichen) korrekt behandelt:
Ein anderes älteres, es liest von der Standardeingabe und verwendet Rekursion:
Hinweis:
Console.ReadKey();
und die Zeichenfolge selbst sollte nicht gezählt werden.Ich habe dies bereits mehrfach verbessert, siehe Kommentare. Es gibt noch Raum für weitere Verbesserungen, würde ich sagen :) Und entschuldigen Sie die Länge, aber ich denke, die verschiedenen Versionen sind interessant genug, um sie beizubehalten ...
quelle
if(c==57)
Siec--;
stattdessen schreiben konntenc=48;
, was ist mit dem ternären Operator? Es gibt tatsächlich viele Golf-Tricks. Vielleicht sollten Sie codegolf.stackexchange.com/questions/2203/tips-for-golfing-in-c... ? ... : c++*b--
Groovy, 38 Bytes
Uggghhh ... Ich hasse die Worte absolut
replace
undall
sie ruinieren alle Regex-Golfplätze für mich.quelle
(it as int)+1
→it.next()
PHP - 91 Bytes
Ich wollte keine regulären Ausdrücke verwenden. PHP kann einen String-Offset nicht direkt inkrementieren, daher musste ich beim Inkrementierungsschritt einige Bytes hinzufügen. Dieses einzeilige Skript erinnert mich an ein sehr dunkles Zeitalter des PHP-Skripts ...
quelle
K, 56
quelle
sed und bash - 40 (einschließlich Anrufung und Pipes)
Ausgänge:
quelle
42;rm -rf /
Es hat beim ersten Mal funktioniert.\0
zu&
(-1 Zeichen), zu (-2 Zeichen) ,$((…))
zu$[…]
(-2 Zeichen) wechseln , um Ihren aktuellen Code zu verkürzen . Beheben Sie jedoch besser zuerst den von @Dennis erwähnten Fehler. (Er schrieb „es das erste Mal arbeitete“ für Spaß und als Hinweis auf die Ausgabe Eigentlich Code bei der Eingabe nicht enthalten. , , , Und vielleicht andere Sonderzeichen auch.)s/^/echo /
iecho \\
;
#
`…`
$(…)
eval echo `sed 's/[0-9]\+/$[&+1]/g'`
- hat immer noch das Problem der Code-Injektion, wie aus meiner Antwort auf eine andere ähnliche Frage hervorgeht. Codegolf.stackexchange.com/a/37145/11259Java 7, 119 Bytes
Wenn die Anforderung ein Programm statt nur einer Funktion ist, sind es 149 Bytes:
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Gema, 14 Zeichen
Probelauf:
quelle
DASH , 16 Bytes (nicht konkurrierend)
Dies gibt eine Funktion / Teilanwendung zurück.
Verwendung:
Erläuterung
quelle
CJam, 18 Bytes
Probieren Sie es hier aus.
Erläuterung
quelle
R, 83 Bytes
Spät zur Party. Angenommen, die Eingabe wird in einer Variablen gespeichert
x
. Es wird wahrscheinlich nicht benötigt, um diesregmatches
zu lösen, aber ich konnte keine vektorisierten Ersetzungen ohne externe Pakete herausfinden.Ungolfed und erklärt
Beispielausgabe
quelle
C # (Visual C # Interactive Compiler) mit Befehlszeilenoption
/u:System.Text.RegularExpressions.Regex;System.Int32
, 40 ByteErwartet, dass sich die Eingabe in einer Variablen mit dem Namen n befindet.
Probieren Sie es online aus!
quelle