Kiedy publikujemy oprogramowanie, przypisujemy mu numer wersji. Użytkownicy mogą chcieć zaktualizować oprogramowanie do najnowszej wersji. Czas więc dowiedzieć się, która wersja powinna być nowsza.
Wkład
Wprowadź dwa numery wersji jako ciągi.
W kontekście tego wyzwania obsługujemy tylko numery wersji, które są niektórymi cyframi połączonymi kropkami.
- Numer wersji to ciąg znaków, który może zawierać tylko cyfry (
0
~9
) i kropki (.
). - Kropki nie byłyby pierwszym / ostatnim znakiem numeru wersji.
- Pomiędzy kropkami muszą znajdować się cyfry. Nie mogą pojawiać się dwie kropki w sposób ciągły.
- Wszystkie liczby w numerze wersji byłyby mniejsze niż 2 16 .
Wydajność
Porównaj wprowadzone numery wersji i wypisz, czy pierwszy jest większy niż / jest równy / mniejszy niż drugi. Możesz wybrać jedną z następujących prezentacji:
- Użyj liczby dodatniej / zera / liczby ujemnej, podczas gdy zero oznacza równość;
- Użyj trzech stałych odrębnych wartości;
Porównywanie
Nie musisz implementować algorytmu opisanego w tej sekcji. Twoje zgłoszenie jest ważne, o ile daje ten sam wynik w przypadku tego algorytmu.
- Numery wersji to niektóre liczby dziesiętne połączone kropkami. Najpierw dzielimy dwa numery wersji na tablice liczb;
- Wypełnianie końcówek tablic zerami, aby miały taką samą długość;
- Porównaj od pierwszego elementu do ostatniego:
- Jeśli dwa elementy tablicy różnią się, większa liczba oznacza większy numer wersji
- Jeśli są takie same, kontynuuj porównywanie następujących pozycji;
- Jeśli wszystkie elementy w tablicy są równe, obie wersje są równe.
Przypadki testowe
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 >
Odpowiedzi:
Python 2 ,
847976 bajtówWypróbuj online!
Wyjścia
-1,0,1
dla<,=,>
źródło
05AB1E (starsza wersja) ,
151413 bajtówWyjścia
-1 [] 1
dla< = >
odpowiednio.-1 bajt dzięki @Emigna .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
0K
zamiastʒĀ}
.R , 32 bajty
Wypróbuj online!
Korzystanie z wbudowanego R.
Wyjścia
1 2
,1.5 1.5
,2 1
za mniejsze, równe, Wielkopolska.Najlepsze jak dotąd, bez wbudowanego:
R ,
151 142 125107 bajtówWypróbuj online!
Kod rozwinięty z wyjaśnieniem:
Wyjścia
-1
,NULL
,1
za mniejsze, równe, Wielkopolska.Koncepcji oryginalny, grałem w dół za pomocą
sapply
,[<-
i%*%
:R , 129 bajtów
Wypróbuj online!
Teraz masz listę dwóch wektorów liczb całkowitych o jednakowej długości. Obliczyć różnice par przy użyciu
Reduce
i wyprowadzić pierwszy niezerowy element przy użyciu trudnej małejw[!!w][1]
formy na końcu.Wyjścia
-1
,NA
,1
za mniejsze, równe, Wielkopolska.źródło
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]
(lub 106, jeśli chcesz zwrócić -1, NA, 1 nie (ujemny), NA, (dodatni).0
a nie (domyślnie)NA
. Odpowiedziałem na Wiki Wiki, więc każdy, kto może to naprawić, może go po prostu dodać.Find(c,x)
. Myślę, że to nowa sztuczka.APL (Dyalog Unicode) ,
1817 bajtów1 bajt zapisany dzięki @ Adám za używanie
⍤1
zamiast∘↑(...)¨
i przez zmianę formatu wejściowego z zagnieżdżonej tablicy na macierzWypróbuj online!
Traktuje dane wejściowe jako macierz znaków jako właściwy argument, gdzie każdy ciąg wersji znajduje się w osobnym wierszu. Wyjścia
¯1 1
,0 0
,1 ¯1
na<
,=
,>
odpowiednio.(⍎¨∊∘⎕D⊆⊢)⍤1
w każdym rzędzie∊∘⎕D⊆⊢
zgrupuj wszystkie wystąpienia cyfr, czyli podziel na.
⍎¨
i przekonwertuj każde z tych wystąpień na liczbę↑
przekonwertować na macierz, gdzie pierwsze wejście znajduje się w górnym rzędzie, a drugie na dole, dopełniając w0
razie potrzeby s(⍋-⍒)
i-
odejmować⍒
indeksy w wierszach, które posortowałyby je w kolejności malejącej⍋
tak samo jak u góry, ale w porządku rosnącymźródło
Perl 6 ,
63 4722 bajtówWypróbuj online!
Okazuje się, że Perl 6 ma typ wersji, który właściwie pasuje do opisu. Jest to anonimowy blok kodu, który pobiera listę dwóch ciągów wersji i zwraca albo
More
,Same
alboLess
.Wyjaśnienie:
Lub bez wbudowanych typów dla 47 bajtów:
Wypróbuj online!
Anonimowy blok kodu, który pobiera dwa ciągi znaków i zwraca,
More
jeśli drugi jest większy,Less
jeśli drugi jest mniejszy iNil
jeśli są równe.Wyjaśnienie:
źródło
Brachylog ,
4940 bajtów... Nadal jest dość imponująco długa.
Oczekuje listy dwóch ciągów. Używa
positive number / zero / negative number
jako> / = / <
.Wypróbuj online!
Wyjaśnienie
Podział wejść
Biorąc pod uwagę dane wejściowe, które nie są jednoczące z
[0, 0]
, takie jak["1.02.0", "1.2.0.1.0"]
wyjścia segmentu poniżej, np[[1, "02.0"], [1, "2.0.1.0"]]
.Porównywanie danych wejściowych
Biorąc pod uwagę, na przykład,
[[1, "02.0"], [1, "2.0.1.0"]]
zamyka podlisty[[1, 1], ["02.0", "2.0.1.0"]]
i porównuje wartości w head ([1,1]
). Powtórz na drugiej liście podrzędnej. Zauważ, że predykat zip przełączaz
cyklicznie krótsze listy, dzięki czemu zipowanie[0,0]
jest równoważne zipowaniu za pomocą[0]
, dlatego poprzedni krok łączy0
się0
bez dodawania kolejnych wartości.źródło
JavaScript (ES6),
7368 bajtówZaoszczędzono 5 bajtów dzięki @redundancy
(a)(b)
Wypróbuj online!
źródło
replace
jefill
. Operandy na-
są zamieniane, ponieważ oba muszą być teraz wymuszone na liczbę. Wypróbuj online!a
ostatecznie przechodzi przez te wartości 0, jeślib
zawiera więcej segmentów liczb niża
. Zdarza się, że najkrótszą metodą zapewnienia tego jest podzielenie nab
ciąg długości „.” poprzez wykorzystanie istniejącego podziału zastosowanego doa
.Java (JDK 10) ,
2019689 bajtówWypróbuj online!
Zwraca liczbę ujemną, jeśli pierwsza wersja jest mniejsza od drugiej, wartość dodatnią, jeśli pierwsza wersja jest większa od drugiej i
0
jeśli są równe.Tak, to ciężka praca, aby „po prostu” zadzwonić do wbudowanego!
Kredyty
źródło
try-finally
aby sprawdzić, czy można sprawdzić. próbował wrócić do pętli, jeślit!=0
; próbowałem użyćInteger
ii.compare(i.valueOf(...),i.valueOf(...))
; próbowałem użyć takich generycznych<T>T[]g(T s){return(T[])(s+"").replaceAll("(\\.0+)*$","").split("\\.");}
; itd. Wszystkie są 2-6 bajtów dłuższe. Jeśli ty (lub ktokolwiek inny) znajdziesz coś więcej, daj mi znać. Ciekawe, co wiedzieć. :)2^16
”. Krótki zakres od - (2 ^ 15) do 2 ^ 15-1.Python 2 , 87 bajtów
Wypróbuj online!
Wykazuje -1,0,1 odpowiednio dla <, =,>.
źródło
Retina 0.8.2 , 54 bajty
Wypróbuj online! Link zawiera przypadki testowe. Używa wartości separatora jako wyjścia równości, więc dla wygody nagłówek konwertuje separator wejściowy na,
=
ale może to być coś, czego nie ma[.\d]
. Wyjaśnienie:Konwertuj na unary.
Kilkakrotnie usuwaj pierwszy znak z każdej strony, aż będą się różnić lub skończy się jedna strona. Jest to o wiele szybsze niż próba dopasowania prefiksów, choć być może nie golfista. W tym momencie ciągi są w jednej z kilku form, które należy zdekodować w celu uzyskania wyniku porównania.
1
a, wynikiem jest=
1
a, wynikiem jest>
1
a, wynikiem jest<
<
>
Innym sposobem myślenia na ten temat jest to, że jeśli jeden ciąg zawiera a,
1
a drugi nie zaczyna się od,1
to ten ciąg jest większy, jednak okazuje się, że jest to bajt dłuższy.Sprawdź przypadek 3 lub przypadek 4 bez przypadku 1.
Jeśli lewy ciąg znaków nadal zawiera
1
w tym momencie znak , jest on większy.W przeciwnym razie usuń wszelkie pozostałości
.
.Konsola przeglądarki Firefox REPL, 19 bajtów
Uważam, że ta funkcja wewnętrzna wykonuje wymagane porównanie. Zwraca -1, 0 lub 1.
źródło
Cu.import("resource://gre/modules/Services.jsm");
liczyć?PHP , 38 bajtów
Wyjścia
-1 → < | 0 → = | 1 → >
Wypróbuj online!
źródło
1.0.0
I1
C (gcc) ,
140134 bajtówKod ten wysyła negatywne,
0
lub dodatnią na<
,=
lub>
odpowiednio.Wypróbuj online!
Edycje:
źródło
Rubinowy , 75 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) ,
1058880 bajtów-17 bajtów od @redundancy. Łał!
-8 bajtów usuwania Math.sign. Dzięki @tsh
Zwraca wartość ujemną, zerową lub dodatnią
Wypróbuj online!
źródło
exec
do podziału ciągów. Wypróbuj online!Japt ,
16 lat11 bajtów-5 bajtów z @Shaggy
Wyjścia:
<
null
lub0
) dla=
>
Wypróbuj online!
źródło
< = >
ale nie wiem, czy dane wejściowe można traktować jako tablicęCzysty ,
116111 bajtówWypróbuj online!
Zwraca liczbę ujemną, gdy pierwszy argument jest mniejszy niż drugi, zero, gdy są one równoważne, i liczbę dodatnią, gdy jest większa niż drugi.
źródło
Swift 4 , 155 bajtów
Nagłówek (nie liczony: kod nie jest rekurencyjny):
Kod
Wypróbuj online!
Objaśnienia
Zwrócone stałe
źródło
JavaScript 64 bajty
Wypróbuj online!
Z komentarzami:
źródło
Perl 5 , 55 bajtów
Wypróbuj online!
źródło
Burleska - 17 bajtów
Jeśli chcesz otrzymać dane wyjściowe w „> <=”, dodaj
?i"<=>"j!!Q
.źródło
PowerShell, 88 bajtów
Zwraca wartość
0
równą, apositive integer
większą lubnegative integer
mniejszą niż.Skrypt testu mniej golfowego:
Wydajność:
źródło
Dart ,
277231 bajtówWypróbuj online!
źródło
Swift 4 + Foundation ,
160 bajtów (142 + 18), 155 bajtów (142 + 13)Importuj (13 bajtów, w tym
;
aby oddzielić od kodu):Spowoduje to zaimportowanie Fundacji, ale jest o 5 bajtów krótsze niż
import Foundation
.Nagłówek (nie liczony: kod nie jest rekurencyjny):
Kod (142 bajty):
Wypróbuj online!
Objaśnienia
Zwrócone stałe
źródło
import
instrukcję, więc opublikowałem osobną odpowiedź , która nie wymaga,Foundation
a bajty liczą pomiędzy 142 bajty (nie licząc importu) a 160 bajtów (licząc import).Zsh , 54 bajty
Wypróbuj online! Wypróbuj zestaw testowy!
Dotyczy
eval
to ośmiu następujących oświadczeń:Tak więc trzy unikalne wartości to:
źródło