Ketika kami menerbitkan beberapa perangkat lunak, kami menetapkan nomor versi untuknya. Dan pengguna mungkin ingin memperbarui ke versi terbaru dari beberapa perangkat lunak. Jadi, inilah saatnya untuk mencari tahu versi mana yang harus lebih baru.
Memasukkan
Masukkan dua nomor versi sebagai string.
Dalam konteks tantangan ini, kami hanya mendukung nomor versi yang merupakan beberapa digit yang digabungkan dengan titik.
- Nomor versi adalah string yang hanya berisi digit (
0
~9
) dan titik (.
). - Dots tidak akan menjadi karakter pertama / terakhir dari nomor versi.
- Harus ada beberapa digit di antara titik-titik. Tidak ada dua titik yang muncul terus menerus.
- Semua angka dalam nomor versi akan kurang dari 2 16 .
Keluaran
Bandingkan nomor versi yang dimasukkan dan hasilkan apakah yang pertama lebih besar dari / sama dengan / kurang dari yang kedua. Anda diperbolehkan memilih salah satu dari presentasi berikut:
- Gunakan angka positif / nol / angka negatif, sedangkan nol berarti sama;
- Gunakan tiga nilai berbeda konstan;
Perbandingan
Anda tidak diharuskan untuk mengimplementasikan algoritma yang dijelaskan di bagian ini. Kiriman Anda valid selama menghasilkan hasil yang sama dengan algoritma ini.
- Nomor versi adalah beberapa angka desimal yang digabungkan dengan titik. Kami pertama-tama membagi dua nomor versi menjadi array angka;
- Padding akhir array dengan nol untuk membuat mereka memiliki panjang yang sama;
- Bandingkan dari item pertama ke yang terakhir:
- Jika dua item array berbeda, angka yang lebih besar berarti angka versi yang lebih besar
- Jika mereka sama, terus membandingkan item berikut;
- Jika semua item dalam array sama, kedua versi sama.
Testcases
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 >
Jawaban:
Python 2 ,
847976 byteCobalah online!
Output
-1,0,1
untuk<,=,>
sumber
05AB1E (warisan) ,
151413 byteOutput
-1 [] 1
untuk< = >
masing - masing.-1 byte terima kasih kepada @Emigna .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
0K
bukanʒĀ}
.R , 32 byte
Cobalah online!
Menggunakan R builtin
Output
1 2
,1.5 1.5
,2 1
kurang, sama, lebih besar.Terbaik sejauh ini, tanpa builtin:
R ,
151 142 125107 byteCobalah online!
Kode terbuka dengan penjelasan:
Output
-1
,NULL
,1
kurang, sama, lebih besar.Konsep asli, menggunakan golf
sapply
,[<-
dan%*%
:R , 129 byte
Cobalah online!
Sekarang Anda memiliki daftar dua vektor bilangan bulat dengan panjang yang sama. Hitung perbedaan berpasangan menggunakan
Reduce
dan output elemen non-nol pertama menggunakanw[!!w][1]
bentuk kecil yang rumit di akhir.Output
-1
,NA
,1
kurang, sama, lebih besar.sumber
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]
(atau 106 jika Anda ingin kembali -1, NA, 1 tidak (negatif), NA, (positif).0
dan tidak (secara tidak langsung)NA
. Saya telah membuat jawaban sebagai Wiki Komunitas sehingga siapa pun yang dapat memperbaikinya dapat menambahkannya.Find(c,x)
. Saya pikir itu trik baru.APL (Dyalog Unicode) ,
1817 byte1 byte disimpan berkat @ Adám untuk menggunakan
⍤1
alih-alih∘↑(...)¨
dan dengan mengubah format input dari array bersarang ke matriksCobalah online!
Mengambil input sebagai matriks karakter sebagai argumen yang tepat, di mana setiap versi string berada di barisnya masing-masing. Output
¯1 1
,0 0
,1 ¯1
untuk<
,=
,>
masing-masing.(⍎¨∊∘⎕D⊆⊢)⍤1
di setiap baris∊∘⎕D⊆⊢
kelompokkan semua kemunculan digit, yaitu terpecah.
⍎¨
dan konversi masing-masing kejadian ini ke angka↑
mengkonversi ke matriks, di mana input pertama berada di baris atas dan yang kedua di bawah, padding dengan0
s jika diperlukan(⍋-⍒)
dan-
mengurangi⍒
indeks ke dalam baris yang akan mengurutkannya dalam urutan menurun⍋
sama seperti bagian atas tetapi untuk urutan naiksumber
Perl 6 ,
63 4722 byteCobalah online!
Ternyata Perl 6 memiliki tipe versi yang cukup sesuai dengan deskripsi. Ini adalah blok kode anonim yang mengambil daftar dua string versi dan kembali baik
More
,Same
atauLess
.Penjelasan:
Atau, tanpa tipe bawaan untuk 47 byte:
Cobalah online!
Blok kode anonim yang mengambil dua string dan kembali
More
jika yang kedua lebih besar,Less
jika yang kedua lebih kecil danNil
jika mereka sama.Penjelasan:
sumber
Brachylog ,
4940 byte... Itu masih agak panjang tidak mengesankan.
Mengharapkan daftar dua string. Digunakan
positive number / zero / negative number
sebagai> / = / <
.Cobalah online!
Penjelasan
Memisahkan input
Diberikan input yang tidak menyatukan dengan
[0, 0]
, seperti["1.02.0", "1.2.0.1.0"]
, output segmen di bawah ini, misalnya[[1, "02.0"], [1, "2.0.1.0"]]
,.Membandingkan input
Diberikan, misalnya,
[[1, "02.0"], [1, "2.0.1.0"]]
ritsleting sublist ke dalam[[1, 1], ["02.0", "2.0.1.0"]]
dan membandingkan nilai-nilai di head ([1,1]
). Berulang pada sublist kedua. Perhatikan bahwa zip memprediksikanz
siklus melalui daftar yang lebih pendek sehingga zipping[0,0]
sama dengan zipping[0]
, maka langkah sebelumnya menyatu0
dengan0
tanpa nilai lebih lanjut ditambahkan.sumber
JavaScript (ES6),
7368 byteDisimpan 5 byte berkat @redundancy
(a)(b)
Cobalah online!
sumber
replace
denganfill
. Operan untuk-
ditukar karena keduanya sekarang harus dipaksa ke nomor. Cobalah online!a
akhirnya siklus melalui nilai-nilai 0 jikab
mengandung lebih banyak segmen nomor daripadaa
. Kebetulan bahwa metode terpendek untuk memastikan yang demikian adalah dengan membelahb
string panjang '.' dengan memanfaatkan perpecahan yang ada diterapkana
.Java (JDK 10) ,
2019689 byteCobalah online!
Mengembalikan angka negatif jika versi pertama lebih kecil dari yang kedua, positif jika versi pertama lebih besar dari yang kedua dan
0
jika mereka sama.Yap, itu pekerjaan berat untuk "hanya" memanggil built-in!
Kredit
sumber
try-finally
sehingga if-check dapat disederhanakan; mencoba kembali ke dalam loop jikat!=0
; mencoba menggunakanInteger
dani.compare(i.valueOf(...),i.valueOf(...))
; mencoba menggunakan obat generik seperti ini<T>T[]g(T s){return(T[])(s+"").replaceAll("(\\.0+)*$","").split("\\.");}
; dll. Semua lebih panjang 2-6 byte. Jika Anda (atau orang lain) memang menemukan sesuatu yang lebih, beri tahu saya. Penasaran ingin tahu apa. :)2^16
." Jangkauan pendek dari - (2 ^ 15) hingga 2 ^ 15-1.Python 2 , 87 byte
Cobalah online!
Output -1,0,1 untuk <, =,>, masing-masing.
sumber
Retina 0.8.2 , 54 byte
Cobalah online! Tautan termasuk kasus uji. Menggunakan nilai separator sebagai output persamaan, jadi untuk memudahkan header mengkonversi separator input menjadi
=
tetapi bisa berupa apa saja yang tidak ada[.\d]
. Penjelasan:Konversikan ke unary.
Hapus karakter pertama dari masing-masing sisi hingga mereka berbeda atau satu sisi habis. Ini jauh lebih cepat daripada mencoba mencocokkan awalan, meskipun mungkin bukan pegolf. Pada titik ini, string berada dalam salah satu dari beberapa bentuk, yang perlu diterjemahkan ke hasil perbandingan.
1
maka hasilnya adalah=
1
maka hasilnya adalah>
1
maka hasilnya adalah<
<
>
Cara lain untuk berpikir tentang ini adalah bahwa jika satu string berisi a
1
dan yang lainnya tidak dimulai dengan sebuah1
maka string itu lebih besar, namun itu ternyata lebih lama satu byte.Periksa kasus 3, atau kasus 4 tanpa kasus 1.
Jika string kiri masih berisi
1
pada saat ini maka itu lebih besar.Jika tidak, hapus sisa
.
s.Konsol Browser Firefox REPL, 19 byte
Saya percaya fungsi internal ini melakukan perbandingan yang diperlukan. Ia mengembalikan -1, 0, atau 1.
sumber
Cu.import("resource://gre/modules/Services.jsm");
dihitung?PHP , 38 byte
Keluaran
-1 → < | 0 → = | 1 → >
Cobalah online!
sumber
1.0.0
dan1
C (gcc) ,
140134 byteKode ini menghasilkan negatif,
0
atau positif untuk<
,=
atau>
masing - masing.Cobalah online!
Suntingan:
sumber
Ruby , 75 byte
Cobalah online!
sumber
JavaScript (Node.js) ,
1058880 byte-17 byte dari @redundancy. Wow!
-8 byte menghapus Math.sign. Terima kasih @tsh
Mengembalikan nilai negatif, nol atau positif
Cobalah online!
sumber
exec
untuk membagi string. Cobalah online!Japt ,
1611 byte-5 byte dari @Shaggy
Output:
<
null
atau0
) untuk=
>
Cobalah online!
sumber
< = >
masing - masing tapi saya tidak tahu apakah input dapat diambil sebagai arrayBersih ,
116111 byteCobalah online!
Menghasilkan angka negatif ketika argumen pertama kurang dari yang kedua, nol ketika mereka setara, dan angka positif ketika lebih dari yang kedua.
sumber
Swift 4 , 155 byte
Header (tidak dihitung: kode ini non-rekursif):
Kode
Cobalah online!
Penjelasan
Konstanta yang dikembalikan
sumber
JavaScript 64 byte
Cobalah online!
Dengan komentar:
sumber
Perl 5 , 55 byte
Cobalah online!
sumber
Burlesque - 17 byte
Jika Anda ingin keluaran di '> <=' lalu tambahkan
?i"<=>"j!!Q
.sumber
Powershell, 88 byte
Pengembalian
0
setara, apositive integer
untuk lebih besar dari ataunegative integer
untuk kurang dari.Skrip uji yang kurang golf:
Keluaran:
sumber
Anak panah ,
277231 byteCobalah online!
sumber
Swift 4+ Foundation ,
160 byte (142 + 18), 155 byte (142 + 13)Impor (13 byte, termasuk
;
untuk dipisahkan dari kode):Ini akan mengimpor Foundation, tetapi lebih pendek 5 byte dari
import Foundation
.Header (tidak dihitung: kode ini non-rekursif):
Kode (142 byte):
Cobalah online!
Penjelasan
Konstanta yang dikembalikan
sumber
import
pernyataan, jadi saya memposting jawaban terpisah yang tidak memerlukanFoundation
dan dengan hitungan byte di antara 142 byte (tidak termasuk impor) dan 160 byte (menghitung impor).Zsh , 54 byte
Cobalah online! Coba test suite!
Ini
eval
untuk delapan pernyataan berikut:Jadi tiga nilai unik adalah:
sumber