Ini adalah tantangan golf kode yang cukup sederhana. Program Anda, diberi string ASCII, adalah untuk mengurai string itu menjadi dua string, yang akan dievaluasi. Jika string kedua "kemudian" dari yang pertama, itu akan mengembalikan 1, jika "lebih awal" dari yang pertama, itu akan mengembalikan -1, dan jika mereka sama, itu akan mengembalikan 0. Ke mengklarifikasi apa yang dimaksud "nanti" dan "sebelumnya", mari kita lihat kode karakter ASCII. Anda perlu membandingkan setiap karakter string, memperlakukan masing-masing sebagai digit angka. Kemudian mengacu pada jumlah yang lebih besar, terjadi setelah jumlah yang lebih kecil. String akan diformat dengan karakter tanda hubung untuk memisahkan dua kelompok input.
Lihatlah contoh ini:
7-9
sebagai input harus kembali1
.
7
mengkonversi ke kode ASCII55
, dan9
mengkonversi ke kode ASCII57
.Seperti yang
57
terjadi secara numerik setelah55
,9
lebih dari7
.
Contoh lain:
LKzb-LKaj
sebagai input harus kembali-1
Urutan kode ASCII untuk ini adalah
76-75-122-98
dan76-75-97-106
Ini adalah tantangan kode golf, dan jumlah byte adalah bagaimana entri akan dinilai.
Setiap input dari 95 karakter ASCII yang dapat dicetak diterima, tidak termasuk spasi, dan tanda hubung untuk apa pun selain memisahkan input. Selain itu, string tidak dijamin memiliki panjang yang sama.
Semoga berhasil!
EDIT: Agar lebih jelas, setiap karakter harus diperlakukan seperti angka dalam angka. Dalam contoh LKzb-LKaj
, meskipun j
lebih lama dari b
, z
lebih lambat dari a
, dan karena ini adalah digit yang lebih signifikan, ia harus diutamakan. String yang disediakan akan selalu minimal 3 karakter, menghilangkan string kosong dari ruang lingkup masalah ini.
EDIT: Berikut adalah beberapa kasus uji lagi, untuk bantuan Anda:
A-9
->-1
11-Z
->-1
3h~J*-3h~J*
->0
Xv-Y0
->1
sumber
11-Z
->-1
tidak masuk akal mengingat kata-kata saat ini dari pertanyaan.Z
(90) lebih besar dari1
(49) dan merupakan huruf paling signifikan. Harap jelaskan bagaimana string dengan panjang yang berbeda dibandingkan.A-AA
?11>Z
dalam contoh Anda kapan1<Z
. Harus ada beberapa perilaku tidak terdefinisi untuk dilakukan dengan string dengan panjang yang berbeda atau contohnya salah.~
pada 126, kemudian akan menambah digit berikutnya dengan satu, mengembalikan digit awal ke!
. Setiap peningkatan dalam digit paling signifikan sama dengan peningkatan digit kedua paling signifikan dengan 127.Jawaban:
Pyth - 11 byte
Mudah, gunakan
._
tanda untuk mendapatkan tanda danC
untuk mendapatkan kode char.Cobalah online di sini .
Suite uji .
sumber
CJam, 12 byte
Cobalah online di penerjemah CJam .
Bagaimana itu bekerja
sumber
Jawa,
86118Cara yang sangat aneh untuk membandingkan string. Membuat perbaikan cepat sehingga melewati test case tambahan, akan mencari golfiness lebih banyak nanti
Terima kasih kepada Vartan dalam komentar untuk
signum
sarannyasumber
return s[0].compareTo(s[1]);
11-Z
kembali-1
, ini kembali1
."A".compareTo("Z")
kembali-25
. Sayangnya.i = a!=b ? b-a : s[1].compareTo(s[0]);
Saya sepertinya tidak mengerti ... Juga, Anda mungkin bisa menggunakan Math.signum dan simpan sendiri dengan menyatakan saya;Perl, 31 byte
30 byte + 1 byte untuk
-p
. Menerima input pada STDIN.Penjelasan
Ketika operan
cmp
memiliki panjang yang berbeda, sukachicken
danegg
, mereka disejajarkan seperti ini:sehingga
egg
>chicken
(\0
adalah byte nol). Tapi kami ingin mereka disejajarkan seperti ini:jadi itu
chicken
>egg
.Untuk melakukan ini, kami menggabungkan mereka, sekali dengan
chicken
sebelumnyaegg
dan sekali denganegg
sebelumnyachicken
:Sekarang setelah dua string kami memiliki panjang yang sama, kami menghapus kata utama menggunakan XOR untuk mendapatkan:
Dan sekarang kita dapat menggunakan
cmp
untuk menemukan yang lebih dulu. (Di sana, saya mengatakannya!)sumber
Python 2, 88 karakter
cmp
tidak melakukan hal yang benar ketika Anda memiliki dua string panjang yang berbeda, jadi saya harus mengisi keduanya dengan karakter nol (yangord
dikonversi ke0
) untuk menangani kasus itu. Sayangnya, itu menambahkan sekitar 35 karakter, ditambah itu sekarang dua baris, bukan satu karena saya membutuhkan panjang input dan untuk beralih di atasnya.sumber
1-2
yang harus mengembalikan1
pengembalian-1
. Tapi kerja pintar.11-A
, yang seharusnya kembali-1
, bukannya kembali1
dalam contoh ini.R, 54 Bytes
Ini membutuhkan perpustakaan pracma. Ini membagi string input pada
-
. Benar membenarkan string. Beri peringkat mereka dan lakukan diff.Jadi untuk 11-7 kita berakhir dengan string "11" dan "7". Peringkat ini adalah [2, 1]. Perbedaannya adalah -1. Untuk 3h ~ J * -3h ~ J * kita mendapatkan "3h ~ J *" dan "3h ~ J *". Peringkat ini adalah [1.5, 1.5] dengan perbedaan 0.
Contoh Uji
sumber
CoffeeScript,
143140139Ini adalah jsfiddle dengan hasilnya (lihat di konsol)
sumber
PERL,
4636 BytesMengonversi daftar argv menjadi string, membelah oleh tanda hubung menjadi arg sisi kiri dan kanan, tidak ada spasi arg, lalu mengembalikan panggilan cmp.
sumber
"@ARGV"=~/-/;print$`cmp$'
(belum diuji)cmp
, tetapi tidak berfungsi saat panjang string berbeda."A" cmp "9"
adalah 1 sedangkan"11" cmp "Z"
-1, meskipun kedua input harus mengembalikan nilai yang sama untuk tantangan ini.Python 3, 84 byte
Pisahkan input string dengan
"-"
. Ubah string unicode menjadi string bytes, lalu tafsirkan string byte ini sebagai bilangan bulat big-endian. Akhirnya lakukan perbandingan - (un) untungnyacmp
tidak lagi tersedia di Python 3.Python 2, 69 byte
sumber
print
dancmp
.Python 2, 79 byte
Solusi yang cukup sederhana, dan mudah dimengerti. Bandingkan panjang string, lalu bandingkan string secara leksigrafis.
Coba di sini
sumber
perl5, 64
Jalankan saja dari commandline. meskipun akan terlihat lebih baik dengan baris baru tetapi harganya 1 char.
Versi yang lebih panjang ini menangani panjang yang tidak cocok dengan benar.
sumber
/-/,$_=$`cmp$'
akan lebih mudah, dan Anda bisa melewatkan-aF-
bit. Juga, saya menghitung ini 20 (16 untuk$_=$F[1]cmp$F[0]
, dan 4 untukpaF-
, disimpan ke file dan dijalankan sebagaiperl -paF- file.pl
).cmp
tidak berfungsi ketika kedua string memiliki panjang yang berbeda, seperti dengan11-Z
./-/;$_=length$'<=>length$`||$' cmp$`
dan-p
. ($`
menyimpan segala sesuatu sebelum pertandingan regex,$'
menyimpan semua setelah.) Menggunakanmap
sebenarnya biaya lebih banyak byte daripada hanya meneleponlength
dua kali.F #, 53
Ini dalam bentuk fungsi anonim (lambda), jadi Anda harus menempelkannya dan memberikan parameter langsung setelahnya adalah (atau, menggunakan notasi perpipaan). Misalnya (dalam FSI):
sumber
JavaScript ES6,
4643 bytesumber
11-Z
harus kembali-1
tetapi kembali1
.'11'>'Z'
ketika'11'<'ZZ'
tidak ada dalam pertanyaan tentang bagaimana membandingkan string dengan panjang yang berbeda atau nilai apa yang dimiliki string kosong.Ruby, 59 byte
sumber
05AB1E ,
12119 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber