Als Code-Golfer sind wir es ( sicher ) nicht gewohnt, etwas zu veröffentlichen . Wir brauchen ein paar Tools, die uns dabei helfen.
Um ein neues Release zu vermarkten, benötigen wir natürlich eine schöne und glänzende Release-Version. Wer wird nicht aufgeregt, wenn er von Version 3.0.0 erfährt?
Aufgabe
Ihre Aufgabe wird es sein, ein Programm / eine Routine / ... zu schreiben, um eine Versionsnummer zu erhöhen.
Sie müssen die Versionsnummer erhöhen und die "weniger wichtigen" (dh die Patch-Version) zurücksetzen.
Sie erhalten zwei Argumente: die aktuelle Version (z. B. "1.0.3") als Zeichenfolge und einen Index, um zu wissen, welcher zu aktualisieren ist (0 oder 1-indiziert).
Beispiel 0-indiziert:
next-version("1.0.3", 0) # 2.0.0
next-version("1.2.3.4.5", 2) # 1.2.4.0.0
next-version("10.0", 0) # 11.0
next-version("3", 0) # 4
next-version("1", 7) # ERROR
next-version("01", 0) # ERROR
Die Version ist eine Zeichenfolge, jeder Teil ist eine Zahl, die durch einen Punkt getrennt ist. Es darf keine führenden, keine nachgestellten oder keine aufeinanderfolgenden Punkte geben (und nichts außerhalb von Zahlen / Punkten). Die Größe der Versionszeichenfolge ist unbegrenzt.
^[1-9]\d*(\.[1-9]\d*)*$
Der Fehlerfall (die letzten beiden Beispiele) ist undefiniertes Verhalten. Was bei Fehleingaben passiert, ist für diese Herausforderung nicht relevant.
Standardlücken sind wie üblich verboten. Sie dürfen den String ausdrucken oder zurücksenden.
Antworten:
Japt,
1611 BytesTesten Sie es online! Die Eingangsnummer ist 1-indiziert.
Basierend auf meiner JavaScript-Antwort. Dies nutzt eine der hilfreichsten Funktionen von Japt: Aufteilen einer Zeichenfolge auf eine andere, bevor die einzelnen Elemente zugeordnet werden, und erneutes Verknüpfen dieser Zeichenfolge nach der Zuordnung.
Ungolfed und Erklärung
quelle
Vim
2025 BytesIch bemerkte leider, dass es den Fall der Aktualisierung der letzten Nummer nicht handhabte, also musste ich Bytes hinzufügen. Dies ist 1-indiziert.
TryItOnline
Unbedruckbares:
Dies nimmt die Argumente in umgekehrter Reihenfolge als separate Zeilen:
Erläuterung:
quelle
DJ@"t.<C-a>qq2wcw0<esc>@qq@q
was wieder zwanzig istDJ@"f.@"<esc><C-a>qq2wcw0<esc>@qq@q
?JavaScript (ES6),
44424037 Byte3 Bytes dank @Neil gespart
Die Eingangsnummer ist 1-indiziert.
Testschnipsel
quelle
n=>i&&+n+!--i
V ,
13, 12 BytesProbieren Sie es online!
Dies ist 0-indiziert.
Es gibt dort eine
ctrl-a
(ASCII 0x01), also hier ist eine lesbare Version:Erläuterung:
quelle
Perl,
403734 + 1 = 35 Bytes-2 Bytes dank @Dada. -3 Bytes dank einer Idee, die ich beim Lesen des Japt-Codes von @ ETHproductions erhalten habe.
Laufen Sie mit der
-p
Flagge.Probieren Sie es online!
Aufschlüsselung des Codes
quelle
$&
stattdessen$1
)Jelly ,
1917 Bytes1-indiziert.
TryItOnline!
Wie?
quelle
V€
:).MATLAB, 85 Bytes
One based und erster Golfversuch!
quelle
string
Typ in Aktion :-)C #
116104 BytesErläuterung
Probieren Sie es hier aus
quelle
string
undint
in der anonymen Funktion SignaturPython 2, 84 Bytes
Ich habe das Gefühl, dass dies wirklich kürzer sein könnte. Möglicherweise ist eine Möglichkeit erforderlich, eine nicht aufzählbare Option zu haben.
Wenn wir die Version als Liste von Zeichenfolgen verwenden könnten, gäbe es eine 75-Byte-Lösung:
Wenn sowohl die Eingabe als auch die Ausgabe Listen von Zahlen waren, gibt es außerdem eine 64-Byte-Lösung:
quelle
V
1420 BytesWieder musste ich Code für den Eckfall des Inkrementierens der letzten Ziffer hinzufügen. (1-indiziert)
TryItOnline
Unbedruckbares:
Dies nimmt die Argumente in umgekehrter Reihenfolge als separate Zeilen:
quelle
@a
(oder noch kürzerÀ
) eine Reihe von Bytes einsparen.Batch, 119 Bytes
1-indiziert.
quelle
Perl 6, 67 Bytes, 0-indiziert
Erläuterung:
quelle
PowerShell 3+,
75 bis74 ByteUngolfed
Erläuterung
Parameter werden über das
$args
Array akzeptiert ..
für jedes Element auf:$m
wird gesetzt, um zu sein-not $b
. Beim ersten Durchlauf$b
wird undefiniert, woraufhin zusammengeführt wird$false
und so wie$m
folgt gestartet wird$true
.$m
soll ein Multiplikator sein, der immer0
oder ist1
und später verwendet wird.$m
muss hier ausgewertet werden, da wir wollen, dass es auf dem$b
Wert der letzten Iteration basiert .$b
wird auf sich selbst gesetzt,-or
wenn ein Iterator$i
mit$args[1]
(dem Indexparameter) verglichen wird . Dies bedeutet$b
, dass hier gesetzt wird,$true
sobald wir uns auf dem Element befinden, das inkrementiert werden soll. Darüber hinaus wird es$true
in jeder nachfolgenden Iteration verwendet, da die Bedingung-or
den aktuellen Wert hat.$b
umgewandelt wird einstellige auf eine Zahl mit+
($false
=>0
,$true
=>1
), dann auf die aktuelle Version Element hinzugefügt ,$_
das eine ist[string]
, aber Powershell immer versucht , das Argument auf der rechten Seite auf den Typ auf der linken Seite zu vereinigen, werden so Arithmetik durchgeführt, keine String-Verkettung. Dann wird dieser Wert mit multipliziert$m
, der noch vorhanden ist,[bool]
aber implizit verschmolzen wird..
.Die erste Iteration,
$b
zu der es kommt$true
,$b
wäre gewesen,$false
wenn sie$m
ausgewertet worden wäre, wobei sie$m
gleich gemacht worden wäre$true
, was den Multiplikator aufrechterhalten würde1
.Während dieses Laufs
$b
wird$true
und wird das Versionselement (as1
) hinzugefügt , wodurch es inkrementiert wird, und da der Multiplikator noch1
ist, ist dies das Endergebnis.So bei der nächsten Iteration,
$b
wird schon sein$true
, was$m
gleich$false
, was den Multiplikator machen0
. Da dies$b
für immer der Fall sein wird$true
, wird der Multiplikator immer derselbe sein0
, und jedes zurückgegebene Element wird es0
auch sein.quelle
R
100959286 BytesUngewöhnlich für R verwendet dies die 0-Indizierung. Anonyme Funktion mit zwei Argumenten (einer Zeichenfolge und einer Ganzzahl). Wahrscheinlich kann ein bisschen Golf gespielt werden.
quelle
05AB1E , 22 Bytes
Probieren Sie es online!
Ich weiß nicht, wie ich if-else in 05AB1E machen soll, das ist also länger als es sein sollte.
quelle
1.0.0.0.3, 3
sollte also1.0.0.1.0
nicht produzieren1.0.0.1.3
.Kaffeeskript:
7767 BytesWoot! Zeit für Kuchen und Kaffee für die Beta-Version.
Dank @ven und @Cyoce habe ich 10 Bytes rasiert!
quelle
.join '.'
oder.split '.'
)+
anstelle vonparseInt
(verwenden~~
Sie, wenn Sie es in eine GanzzahlPython 3,
8986 Bytessehr naive Art, Dinge zu erledigen
Bearbeiten: Die Bedingung wurde unter Bezugnahme auf @kade umgeschrieben
quelle
PHP, 81 Bytes
furchtbar lang. Zumindest: Der Elefant schlägt immer noch die Python.
durchläuft das erste Argument, das durch Punkte geteilt ist:
"."[!$i]
ist für das erste leer und für jedes andere Element ein Punkt;($i<=$n)
und($i==$n)
werden implizit in Ganzzahl0
oder1
für Ganzzahlarithmetik umgewandelt.quelle
JavaScript (ES6),
57-55ByteBeispiele:
Nicht die beste JS-Implementierung, aber sie ist recht einfach und folgt der erwarteten Logik.
quelle
Pyth - 21 Bytes
Test Suite
quelle
10.0
Testfall gibt11.0.0
, das ist ein Teil zu viel!Powershell,
801009592 Bytes5 Bytes mit einer Konstante für die gespeichert
-1..if
3 Bytes mit
!$b
anstelle von gespeichert$b-eq0
Erläuterung:
Testfälle:
quelle
r
stattrandom
random
, es ist kein Alias! Dies ist ein Ergebnis der Befehlsauswertung von PowerShell. Da ein Befehl in Aliasen, Funktionen, Cmdlets, systemeigenen Anwendungen usw. gesucht wird, versucht er als letztes, dem, was er ist, das VoranstellenGet-
. Sie rufen also tatsächlich anGet-Random
, aber technisch gesehen nicht als Alias. Sie können sehen, dass dies funktioniert, indem Sie laufenservice
oderchilditem
oder für maximale Ironiealias
.Objective-C 531 Bytes
kompilieren:
Verwendung:
quelle
0
anstelle von verwendenNULL
undreturn 0;
am ende des main entfernen .NSString *s
kann wahrscheinlich den Raum entfernt haben.**argv
ist 1 Byte kürzer als*argv[]
.@autoreleasepool{}
ist wahrscheinlich unnötig.Javascript ES6: 60 Bytes
quelle
}
am Ende ein Extra gibt . Am Golf: eines der Merkmale des Pfeils Funktionen implizit Rückkehr, so dass Sie ersetzen können(n,r)=>{return r>i?n=0:n}
mit(n,r)=>r>i?n=0:n
bis einige Bytes zu speichern.R, 75 Bytes
Die Indizierung basiert auf 1. Sie können hier online damit spielen .
quelle
APL (Dyalog) , 31 Bytes
Benötigt
⎕IO←0
( I ndex O rigin 0), was auf vielen Systemen Standard ist. Vollständiger Programmteil; fordert zur Texteingabe (Version) und dann zur numerischen Eingabe (Index) auf.Probieren Sie es online!
⍞
Eingabeaufforderung für Texteingabe'.'⎕VFI
V erify und F ix I nput mit Punkt als Feldtrennzeichen (Feldgültigkeiten, Feldwerte)⌽
umkehren (um die Werte in den Vordergrund zu stellen)⊃
wähle den ersten (die Werte)⎕(
...)
wende die folgende implizite Funktion an, wobei die ausgewertete Eingabe als linkes Argument verwendet wird:Um die nicht stillschweigenden Entsprechungen jeder Funktionsanwendung zu erläutern
⍺
, geben wir nun das linke Argument (den Index) und⍵
das rechte Argument (die Liste der einzelnen Nummern der ursprünglich eingegebenen aktuellen Versionsnummer) an.⊃
äquivalent zu(⍺⊃⍵)
verwenden ,⍺
ein Element zur Auswahl⍵
1+
füge eins hinzu↑,
Entspricht den(⍺↑⍵),
vorangestellten⍺
Nummern von⍵
⊢∘≢↑
äquivalent zu(⍺⊢∘≢⍵)↑
äquivalent,(≢⍵)↑
um so viele Zahlen davon zu nehmen, wie Elemente enthalten sind⍵
, und erforderlichenfalls mit Nullen aufzufüllen⍕
Format (mit einem Leerzeichen zwischen jeder Zahl versehen)' '⎕R'.'
PCRE R ePlace Räume mit Periodenquelle
Java 8, 130 Bytes
Erläuterung:
Probieren Sie es hier aus.
quelle
LiveScript,
5352 Bytes-1 Byte dank nur @ ASCII!
Alte Erklärung:
Noch eine Selbstantwort ... Nicht, dass irgendjemand in LiveScript Golf spielt. : P
Ich habe an einer anderen Version gearbeitet:
Ist
*
aber zu überlastet, um in einem Spleißindex erkannt zu werden, so=0
wird versucht, darauf zuzugreifen0[0]
. Also musst du so etwas schreiben..[b to ..length- b]=[0]*(..length-1-b)
und es ist am Ende länger.quelle
f=(a,b)->(for e,i in a/\.<newline> if i<b then e else if i>b then 0 else+e+1)*\.
ist es viel länger :(if i<b then e else if i>b then 0 else+e+1
in dh[+e+1;0;e;e][i>b+(2*i<b)]
oder etwas in diese Richtung, vielleicht sogar([+e;-1][i>b+(2*i<b)]||e-1)+1
(a,b)->(for e,i in a/\.<newline> [+e+1;0;e][(i>b)+2*(i<b)])*\.
, 54->(for e,i in it/\.<newline> [+e+1;0;e][(i>&1)+2*(i<&1)])*\.
52;
Leerzeichen ersetzen . auch ... sieht so aus, als ob das im Grunde genommen so weit unten ist, wie es mit diesem Ansatz gehen wirdHaskell ,
136129 BytesProbieren Sie es online!
Original
quelle