Saya punya masalah di tempat kerja. Saya perlu membandingkan dua angka yang datang sebagai string dari dua basis data yang berbeda. Angka-angka mungkin datang dengan angka nol di depan dan / atau spasi di depan / belakang. Jadi saya mungkin punya "0001 "
dari satu database dan " 1 "
dari yang lain.
Saya memecahkan masalah dalam C # dengan kode berikut:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
Tantangan
Ini adalah tantangan yang sangat sederhana, cocok untuk pemula dan segala jenis bahasa esoterik. Diberi dua angka sebagai string yang mungkin datang dengan angka nol di depan dan / atau spasi di depan / belakang, tulis kode terpendek yang memeriksa apakah kedua string tersebut mewakili angka yang sama.
- Input harus berupa dua string atau setara dalam bahasa Anda (array char OK), dan mereka akan selalu mewakili nilai integer lebih besar dari nol.
- Keluaran harus berupa dua nilai yang konsisten yang mewakili nilai kebenaran dan nilai palsu.
Contohnya
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
Ini adalah kode-golf , jadi semoga kode terpendek untuk setiap bahasa menang!
Jawaban:
Javascript , 11 byte
Menyalahgunakan aturan casting Javascript sedikit;
+a
memaksaa
menjadi tipe numerik.-6 byte terima kasih kepada Shaggy dan Martin Ender ♦
Juga take keren oleh LiefdeWen :
sumber
c=
, dan currying juga baik-baik saja sehingga Anda dapat menggunakana=>b=>...
bukan(a,b)=>
. Akhirnya, JavaScript saya agak berkarat, tapi saya pikir sesuatu seperti!(a-b)
juga akan berfungsi?a
ke tipe numerik dengan unary+
.05AB1E , 1 byte
Cobalah online!
Penjelasan
Perbandingan untuk persamaan
Q
akan secara otomatis mencoba untuk mengevaluasi string sebagai int sebelum membandingkan.sumber
|0+Q
cukup singkat ...Operasi bahasa scripting Flashpoint , 33 byte
Telepon dengan:
Keluaran:
Versi alternatif (41 byte):
Masih 5 byte lebih pendek dari yang lebih mudah
f={t=_this;call(t select 0)==call(t select 1)}
39 byte:
count
(yang mengembalikan ukuran array) berfungsi sebagai gantiforEach
, karena Anda bisa memberikannya "lambda" yang digunakan sebagai kondisi untuk menghitung hanya elemen array yang memenuhi kondisi itu. "Kondisi" yang digunakan dalam kasus ini bukan kondisi yang valid, tetapi tidak masalah di sini karena tidak menyebabkan kesalahan dan nilai pengembaliancount
tidak diperlukan.sumber
Taksi , 488 byte
Cobalah online!
Tidak Disatukan:
Taksi (relatif) sangat cocok untuk tantangan ini karena string adalah satu-satunya tipe input atau output yang diperbolehkan.
The Babelfishery
adalah apa yang mengubah string menjadi angka (dan sebaliknya) dan itu menangani pengupasan semua ruang dan memimpin nol. Ini juga akan menangani angka negatif jika-
tepat sebelum digit pertama. Setelah itu,Equal's Corner
periksa kedua nilai terhadap satu sama lain danWriter's Depot
memberikan output dalam format string. Keluaran adalah1
untuk kebenaran dan0
untuk kepalsuan.sumber
error: The boss couldn't find your taxi in the garage. You're fired!
?Go to Taxi Garage:n 1 r 1 l 1 r.
C (gcc) , 27 byte
Dengan
-O0
(yang merupakan pengaturan default).Cobalah online!
C, 32 byte
Cobalah online!
sumber
char
, dan ketika Anda melewatkan sebuah array ke suatu fungsi, Anda sebenarnya hanya meneruskan pointer ke elemen pertama dari array. Di sini, pointer kechar
array secara implisit dikonversi ke integer ketika diteruskan ke fungsi, dan integer dikonversi kembali ke pointer ketika memanggilatoi
.s=foo;
alih - alihreturn foo;
Anda perlu memberi label ini sebagai "x86 gcc dengan optimasi dinonaktifkan", bukan hanya "C", karena kode ini tidak mengembalikan nilai kecuali sebagai artefak implementasi.s=retval;
bukannyareturn retval;
benar - benar rusak. Sepertinya logika internal gcc (dengan-O0
hanya) benar-benar memperlakukan ekspresi terakhir sebagai nilai balik, mungkin cara yang sama seperti ekspresi-pernyataan GNU C bekerja. (Tapi itu memang membutuhkans=
). Pada ARM32, ia menghitung==
hasilnyar3
, dan kemudian menggunakan ekstramov r0, r3
untuk menjadikannya nilai pengembalian! Jadi ini bukan peretasan khusus x86,gcc -O0
peretasan yang tampaknya didukung gcc.J , 4 byte
Bandingkan
=
setelah&
mengevaluasido
. Dapat juga=&".
Coba online!sumber
-10
) dan negatif ketika J memahaminya (misalnya_10
) karena cara-
kerja monadik .Retina , 11 byte
Cobalah online!
Input dipisahkan dengan umpan baris, tetapi ruang uji menggunakan pemisahan koma untuk kenyamanan. Mencetak
1
untuk persamaan dan0
untuk ketidaksetaraan.Penjelasan
Konversi setiap baris ke unary. Ini mengabaikan nol dan spasi terkemuka.
Deduplicate: bersihkan baris kedua jika keduanya sama.
Pastikan string sekarang diakhiri dengan linefeed.
sumber
Python 3 , 25 byte
Cobalah online!
sumber
Brain-Flak , 22 byte
Cobalah online!
Disimpan 4 byte berkat Jo King .
sumber
Triangularity , 17 byte
Cobalah online!
Triangularity, untuk sekali, kompetitif!
Bagaimana itu bekerja
Triangularity memerlukan kode untuk memiliki distribusi titik-titik. Artinya, panjang setiap baris harus sama dengan jumlah baris dikalikan 2 dan dikurangi, dan setiap baris harus memiliki (di setiap sisi) sejumlah titik yang sama dengan posisinya dalam program (baris bawah adalah baris 0, yang di atasnya adalah baris 1 dan seterusnya). Ingatlah ini, mari kita menganalisis bagaimana kode bekerja:
sumber
Alice , 7 byte
Cobalah online!
Pemisah non-digit berfungsi. Mencetak
1
untuk kesetaraan dan0
sebaliknya.Penjelasan
sumber
Japt , 3 byte
Cobalah
Mengonversi input kedua ke integer dan membandingkan persamaan dengan yang pertama.
sumber
APL (Dyalog) , 4 byte
3 byte disimpan berkat @ Adám
Cobalah online!
sumber
=/⍎¨
jq, 24 karakter
2 string dilewatkan sebagai item dari array.
Contoh dijalankan:
Cobalah online! ( Semua kasus uji )
sumber
Sekam , 3 byte
Cobalah online!
Penjelasan
sumber
Ër
berfungsi juga.PowerShell , 20 byte
Mirip dengan jawaban JavaScript, hanya lebih lama karena PowerShell tidak memiliki currying. Menggunakan
+
untuk melemparkan string pertama ke integer, dan kemudian-eq
uals secara otomatis melemparkan string kedua ke integer. Output Benar / Salah.Cobalah online!
sumber
PowerShell , 19 byte
Cobalah online!
-join
array argumen ($args
) dengan representasi string dari operator perbandingan (-eq
) kemudian mengevaluasi ekspresi denganInvoke-Expression
(iex
).sumber
+
karena ia melakukan pengecekan kesetaraan string.00009
dan077
kemudian kode yang dihasilkan adalah00009 -eq077
, sepotong kode yang benar-benar valid. Anda berhadapan langsung dengan string saat runtime, jadi Anda harus melemparkannya terlebih dahulu agar operasi dilakukan pada numerik.Q (Kdb +), 13 byte
Penjelasan
(x; y): daftar dua input.
"J" $: casting setiap input ke tipe panjang (7j) dari string (10c), yang dapat menafsirkan
ruang putih dengan benar dan memimpin 0s.
= /: memeriksa persamaan elemen dalam daftar (setiap pasangan berikutnya).
Karena hanya ada satu pasangan, mengembalikan boolian 0b / 1b tunggal.
sumber
{=/["J"$(x;y)]}
untuk 15 byte ... Meskipun untuk 8 byte Anda dapat memiliki ini:(~/)"J"$
jika Anda hanya menggunakan REPL dan meneruskan input sebagai daftar string .. atau{(~/)"J"$x}
untuk 11 sebagai fungsi.T-SQL, 35 byte
Sesuai standar kami , data dimasukkan melalui tabel yang sudah ada sebelumnya
t
denganvarchar
bidanga
danb
.Kembali
1
jika mereka cocok,0
jika mereka tidak.Beberapa fungsi matematika SQL (termasuk
ABS
,FLOOR
danCEILING
) akan melakukan konversi implisit ke numerik jika diberi parameter string, ini lebih pendek daripada eksplisitCAST(a AS INT)
atauCONVERT(INT,b)
, dan berfungsi dalam kasus ini karena kita tahu nilai input selalu positif.IIF
khusus untuk MS SQL 2012 dan di atasnya, jadi tidak ada jaminan tentang implementasi lainnya.sumber
Excel VBA,
2716 Bytes-9 Terima kasih kepada @Nayrb dan @TaylorScott
Di mana Anda memasukkan nilai pada Sel dengan
'string
.Di manax
dan di manay
string input danz
merupakan output Boolean.Jika CInt (x) = CInt (y) Kemudian z = 1
Menggunakan CIntsumber
?[Int(A1)=Int(B1)]
yang mengambil input dari rentangA1
danB1
dan output ke jendela langsung VBER ,
2827 byteMembaca angka sebagai string, mengubahnya menjadi dua kali lipat dan memeriksa apakah perbedaannya tidak nol.
Cobalah online!
Byte1 byte terima kasih kepada Giuseppe
sumber
""
cukupLua , 20 byte
Cobalah online!
sumber
Haskell , 20 byte
-11 byte terima kasih kepada Laikoni. -2 byte terima kasih kepada Zgarb.
Cobalah online!
sumber
read
:a#b=0+read a==read b
Gema , 21 karakter
Tidak ada boolean di Gema. Karena
@get-switch{}
/@set-switch{}
fungsi menggunakan 0 dan 1 untuk mewakili status sakelar, juga menggunakan 0 dan 1.2 string dilewatkan pada jalur input yang terpisah.
Contoh dijalankan:
sumber
Perl 5, 9 + 1 (
-p
) = 10 bytecoba online
sumber
Ditumpuk , 8 byte
Cobalah online!
Penjelasan
sumber
Attache , 11 byte
Cobalah online!
Ini mengambil array string, seperti
V["0001", "1 "]
. Secara sederhana,Map&:N
adalah fungsi yang memetakanN
argumennya, danSame
memeriksa bahwa array hanya berisi anggota yang sama. (Fakta menyenangkan: fungsi ini berfungsi untuk lebih dari 2 argumen string.)sumber
SNOBOL4 (CSNOBOL4) , 42 byte
Cobalah online!
Keluaran 1 untuk kebenaran, tidak ada untuk falsey. Karena
(spasi) adalah operator concatenation di SNOBOL,
EVAL
ing nomor dengan spasi terdepan / tertinggal menghasilkan nomor itu sendiri, dan itu juga rapi mengurus setiap nol terkemuka.EQ
menguji kesetaraan numerik, dengan pengaturanOUTPUT
1 ke kondisi aktifSuccess
.sumber
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 29 byte BASIC tokenized
Solusi baru terima kasih kepada Neil (terima kasih atas tipnya).
Solusi ini membutuhkan input pengguna, jadi masukkan dalam dua string dengan spasi putih dan / atau nol di depan, atau masukkan dua string dengan nilai numerik yang tidak sama;
0
salah dan1
benar sekali baris ketiga telah membandingkan nilai dari setiap string yang dimasukkan.Solusi lama: Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 46 byte BASIC tokenized
Pemeriksaan aktual dilakukan pada baris tiga, yang hanya ~ 16 byte BASIC tokenized; jadi memasuki setiap pasangan uji menggunakan mode langsung akan menghemat ~ 30 byte dari daftar. Perhatikan bahwa jumlah byte ini tidak termasuk
var stack
.sumber
INPUT A$
danINPUT B$
? Juga saya tidak berpikir Anda perlu()
s.APL (NARS2000) , 7 byte
Ya, saya tahu NARS2000 tidak dapat bersaing dengan Dyalog di sini karena menggunakan Unicode, tapi saya pikir saya lebih suka pamer
⍥
(dipanggil Komposisi dalam NARS2000, meskipun sebenarnya tidak terkait dengan fungsi komposisi), sesuatu yang tidak dilakukan Dyalog miliki sebagai built-in dan saya belum pernah melihat digunakan di sini. Di Dyalog, itu harus diimplementasikan sebagai{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. Apa yang dilakukannya adalah memanggil fungsi operan monadik kanan pada argumen kiri dan kanan, dan kemudian memanggil fungsi dyadic operan kiri pada hasil.Di sini, operan kanan adalah
⍎
( Execute , ie eval) dan operan kiri adalah=
( Equal To , yaitu periksa apakah argumennya sama).sumber