Wenn wir eine Software veröffentlichen, weisen wir ihr eine Versionsnummer zu. Benutzer möchten möglicherweise auf die neueste Version einiger Software aktualisieren. Es ist also an der Zeit herauszufinden, welche Version neuer sein soll.
Eingang
Geben Sie zwei Versionsnummern als Zeichenfolgen ein.
Im Rahmen dieser Herausforderung unterstützen wir nur Versionsnummern, bei denen es sich um Ziffern handelt, die durch Punkte verbunden sind.
- Eine Versionsnummer ist eine Zeichenfolge, die nur Ziffern (
0
~9
) und Punkte (.
) enthalten darf . - Punkte wären nicht das erste / letzte Zeichen einer Versionsnummer.
- Zwischen den Punkten müssen einige Ziffern stehen. Es dürfen keine zwei Punkte fortlaufend erscheinen.
- Alle Nummern in einer Versionsnummer wären kleiner als 2 16 .
Ausgabe
Vergleichen Sie die eingegebenen Versionsnummern und geben Sie aus, ob die erste größer / gleich / kleiner als die zweite ist. Sie können eine der folgenden Präsentationen auswählen:
- Verwenden Sie eine positive Zahl / Null / negative Zahl, während Null gleich bedeutet.
- Verwenden Sie drei verschiedene konstante Werte.
Vergleichen
Sie müssen den in diesem Abschnitt beschriebenen Algorithmus nicht implementieren. Ihre Eingabe ist gültig, solange sie mit diesem Algorithmus dieselbe Ausgabe ergibt.
- Versionsnummern sind Dezimalzahlen, die durch Punkte verbunden sind. Wir teilen zuerst die beiden Versionsnummern in Zahlenfelder auf;
- Das Ende von Arrays mit Nullen auffüllen, damit sie die gleiche Länge haben;
- Vergleichen Sie vom ersten bis zum letzten Artikel:
- Wenn sich die beiden Array-Elemente unterscheiden, bedeutet die höhere Nummer eine höhere Versionsnummer
- Wenn sie identisch sind, vergleichen Sie die folgenden Elemente weiter.
- Wenn alle Elemente im Array gleich sind, sind die beiden Versionen gleich.
Testfälle
version1 version2 result
2 1 >
1.0.0 1 =
1.0 1.0.0 =
1.2.42 1.2.41 >
1.1.56789 1.2.0 <
1.10 1.2 >
1.20 1.150 <
18.04 18.4 =
7.010 7.8 >
1.0.0.1.0 1.00.00.2 <
00.00.01 0.0.0.1 >
0.0.1 0.1 <
42.0 4.2.0 >
999.999 999.999.1 <
2018.08.1 2018.08 >
Antworten:
Python 2 ,
847976 BytesProbieren Sie es online!
Ausgänge
-1,0,1
für<,=,>
quelle
05AB1E (Legacy) ,
151413 ByteAusgänge
-1 [] 1
für< = >
.-1 Byte dank @Emigna .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
0K
anstelle von verwendenʒĀ}
.R , 32 Bytes
Probieren Sie es online!
Verwenden eines eingebauten R
Ausgänge
1 2
,1.5 1.5
,2 1
für weniger, gleich, größer.Am besten bisher, ohne eingebaut zu haben:
R ,
151 142 125107 BytesProbieren Sie es online!
Abgerollter Code mit Erklärung:
Ausgänge
-1
,NULL
,1
für weniger, gleich, größer.Ursprüngliches Konzept, das mit Golf gespielt wurde
sapply
,[<-
und%*%
:R , 129 Bytes
Probieren Sie es online!
Nun haben Sie eine Liste von zwei gleichlangen Vektoren von ganzen Zahlen. Berechnen Sie die paarweisen Differenzen mit
Reduce
und geben Sie das erste Nicht-Null-Element mit der kniffligen kleinenw[!!w][1]
Form am Ende aus.Ausgänge
-1
,NA
,1
für weniger, gleich, größer.quelle
scan
function(a,b,d=scan(t=a,se='.'),e=scan(t=b,se='.'),f=1:max(lengths(list(d,e))),g=d[f]-e[f])g[!!g][1]
(oder 106 auf 100 Bytes0
und nicht (implizit)NA
. Ich habe die Antwort zu einem Community-Wiki gemacht, damit jeder, der sie reparieren kann, sie einfach hinzufügen kann.Find(c,x)
. Ich denke das ist ein neuer Trick.APL (Dyalog Unicode) ,
18 bis17 Bytes1 Byte gespart dank @ Adám für die Verwendung
⍤1
anstelle von∘↑(...)¨
und durch Ändern des Eingabeformats von einem verschachtelten Array in eine MatrixProbieren Sie es online!
Nimmt die Eingabe als Zeichenmatrix als das richtige Argument, wobei sich jeder Versionsstring in einer eigenen Zeile befindet. Ausgänge
¯1 1
,0 0
,1 ¯1
für<
,=
,>
jeweils.(⍎¨∊∘⎕D⊆⊢)⍤1
in jeder Reihe∊∘⎕D⊆⊢
Gruppieren Sie alle Vorkommen von Ziffern, dh teilen Sie sie auf.
⍎¨
und konvertieren Sie jedes dieser Vorkommen in eine Zahl↑
In eine Matrix konvertieren, bei der sich die erste Eingabe in der oberen und die zweite in der unteren Zeile befindet und0
bei Bedarf mit s aufgefüllt wird(⍋-⍒)
und-
subtrahieren⍒
die Indizes in die Zeilen, die sie in absteigender Reihenfolge sortieren würden⍋
wie oben, jedoch in aufsteigender Reihenfolgequelle
Perl 6 ,
63 4722 BytesProbieren Sie es online!
Es stellte sich heraus, dass Perl 6 einen Versionstyp hat , der der Beschreibung ziemlich gut entspricht. Dies ist ein anonymer Codeblock, der eine Liste von zwei Versionsstrings und gibt entweder nimmt
More
,Same
oderLess
.Erläuterung:
Oder ohne eingebaute Typen für 47 Bytes:
Probieren Sie es online!
Anonymer Codeblock, der zwei Zeichenfolgen akzeptiert und zurückgibt,
More
wenn die zweite größer ist,Less
wenn die zweite kleiner ist undNil
wenn sie gleich sind.Erläuterung:
quelle
Brachylog ,
4940 Bytes... Es ist immer noch ziemlich unscheinbar lang.
Erwartet eine Liste mit zwei Zeichenfolgen. Verwendet
positive number / zero / negative number
als> / = / <
.Probieren Sie es online!
Erläuterung
Aufteilung der Eingänge
Angesichts einen Eingang, der nicht mit sich vereinen
[0, 0]
, wie beispielsweise["1.02.0", "1.2.0.1.0"]
, die folgenden Segmentausgänge, zB[[1, "02.0"], [1, "2.0.1.0"]]
.Vergleich der Eingaben
Zippt zum Beispiel
[[1, "02.0"], [1, "2.0.1.0"]]
die Unterlisten in[[1, 1], ["02.0", "2.0.1.0"]]
und vergleicht die Werte im head ([1,1]
). Wiederholen Sie in der zweiten Unterliste. Man beachte , dass das Prädikat zipz
Zyklen durch kürzere Listen , so daß bei Schwirren[0,0]
mit zu Zipping entspricht[0]
, daher die vorherigen Schritt vereinheitlicht0
mit0
ohne weitere Werte angehängt.quelle
JavaScript (ES6),
73-68Byte5 Bytes gespart dank @redundancy
(a)(b)
Probieren Sie es online!
quelle
replace
mit Bytes sparenfill
. Die Operanden für-
werden vertauscht, da nun beide zu einer Zahl gezwungen werden müssen. Probieren Sie es online!a
letzten Zyklen durch diese 0-Werte erfolgt, wennb
mehr Zahlensegmente als enthalten sinda
. Es kommt vor, dass die kürzeste Methode, um dies sicherzustellen, darin besteht, dieb
Zeichenfolge mit der Länge '.' durch Nutzung der bestehenden Aufteilung aufa
.Java (JDK 10) ,
2019689 BytesProbieren Sie es online!
Gibt eine negative Zahl zurück, wenn die erste Version kleiner als die zweite ist, eine positive, wenn die erste Version größer als die zweite ist und
0
wenn sie gleich ist.Ja, das ist einige schwere Arbeit, um "nur" ein eingebautes zu nennen!
Credits
quelle
try-finally
so die if-Überprüfung vereinfacht werden kann; versucht, innerhalb der Schleife zurückzukehren, wennt!=0
; versuchte es mitInteger
undi.compare(i.valueOf(...),i.valueOf(...))
; habe versucht, solche Generika zu verwenden<T>T[]g(T s){return(T[])(s+"").replaceAll("(\\.0+)*$","").split("\\.");}
; etc. Alle sind 2-6 Bytes länger. Wenn Sie (oder jemand anderes) etwas mehr finden, lassen Sie es mich bitte wissen. Neugierig was zu wissen. :)2^16
". Kurze Bereiche von - (2 ^ 15) bis 2 ^ 15-1.Python 2 , 87 Bytes
Probieren Sie es online!
Gibt -1,0,1 für <, =,> aus.
quelle
Retina 0.8.2 , 54 Bytes
Probieren Sie es online!Link enthält Testfälle. Verwendet den Trennzeichenwert als Gleichheitsausgabe, sodass der Header das Eingabetrennzeichen der Einfachheit halber in konvertiert
=
, es kann sich jedoch auch um etwas anderes handeln[.\d]
. Erläuterung:In Unary konvertieren.
Löschen Sie wiederholt das erste Zeichen von jeder Seite, bis sie sich unterscheiden oder eine Seite leer ist. Dies ist viel schneller als der Versuch, Präfixe abzugleichen, obwohl dies möglicherweise nicht mehr der Fall ist. Zu diesem Zeitpunkt liegen die Zeichenfolgen in einer von mehreren Formen vor, die zu einem Vergleichsergebnis decodiert werden müssen.
1
ist das Ergebnis=
1
lautet das Ergebnis>
1
lautet das Ergebnis<
<
>
Eine andere Art, darüber nachzudenken, ist, dass wenn eine Zeichenkette a enthält
1
und die andere nicht mit a beginnt1
, diese Zeichenkette größer ist, sich jedoch herausstellt, dass sie ein Byte länger ist.Suchen Sie nach Fall 3 oder Fall 4 ohne Fall 1.
Wenn die linke Zeichenfolge
1
zu diesem Zeitpunkt noch ein enthält , ist sie größer.Andernfalls löschen Sie alle verbleibenden
.
s.Firefox-Browserkonsole REPL, 19 Byte
Ich glaube, diese interne Funktion führt den erforderlichen Vergleich durch. Es gibt -1, 0 oder 1 zurück.
quelle
Cu.import("resource://gre/modules/Services.jsm");
gezählt werden?PHP , 38 Bytes
Ausgänge
-1 → < | 0 → = | 1 → >
Probieren Sie es online!
quelle
1.0.0
1
C (gcc) ,
140134 BytesDieser Code gibt eine negative
0
oder eine positive für<
,=
oder>
jeweils.Probieren Sie es online!
Bearbeitungen:
quelle
Ruby , 75 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
1058880 Byte-17 Bytes von @redundancy. Wow!
-8 Bytes, die Math.sign entfernen. Danke @tsh
Gibt einen negativen, nullten oder positiven Wert zurück
Probieren Sie es online!
quelle
exec
zum Teilen von Strings. Probieren Sie es online!Japt ,
1611 Bytes-5 Bytes von @Shaggy
Ausgänge:
<
null
oder0
) für=
>
Probieren Sie es online!
quelle
< = >
aber ich weiß nicht, ob die Eingabe als Array verwendet werden kannSauber ,
116111 BytesProbieren Sie es online!
Gibt eine negative Zahl aus, wenn das erste Argument kleiner als das zweite ist, eine Null, wenn es äquivalent ist, und eine positive Zahl, wenn es größer als das zweite ist.
quelle
Schnelle 4 , 155 Bytes
Header (nicht gezählt: der Code ist nicht rekursiv):
Code
Probieren Sie es online!
Erklärungen
Zurückgegebene Konstanten
quelle
JavaScript 64 Bytes
Probieren Sie es online!
Mit Kommentaren:
quelle
Perl 5 , 55 Bytes
Probieren Sie es online!
quelle
Burlesque - 17 Bytes
Wenn Sie eine Ausgabe in '> <=' wünschen, fügen Sie hinzu
?i"<=>"j!!Q
.quelle
Powershell, 88 Bytes
Gibt
0
für gleich, apositive integer
für größer als oder anegative integer
für kleiner als zurück.Weniger Golf-Testskript:
Ausgabe:
quelle
Dart ,
277231 BytesProbieren Sie es online!
quelle
Swift 4 + Foundation ,
160 Byte (142 + 18), 155 Byte (142 + 13)Importieren (13 Bytes, einschließlich
;
vom Code zu trennen):Das wird Foundation importieren, ist aber 5 Bytes kürzer als
import Foundation
.Header (nicht gezählt: der Code ist nicht rekursiv):
Code (142 Bytes):
Probieren Sie es online!
Erklärungen
Zurückgegebene Konstanten
quelle
import
Anweisung zählen. Deshalb habe ich eine separate Antwort veröffentlicht , die nicht erforderlich ist. DieFoundation
Anzahl der Bytes liegt zwischen 142 Bytes (Import nicht gezählt) und 160 Bytes (Import gezählt).Zsh , 54 Bytes
Probieren Sie es online! Probieren Sie eine Testsuite aus!
Dies ist
eval
zu den folgenden acht Aussagen:Die drei eindeutigen Werte sind also:
quelle