Definisi
Sebuah vektor yang mengandung n elemen dikatakan majorize atau mendominasi vektor b dengan n elemen IFF untuk semua nilai k sehingga 1 ≤ k ≤ n , jumlah dari elemen pertama dari sebuah ↓ melalui k th unsur sebuah ↓ lebih besar dari atau sama dengan jumlah elemen pertama hingga k dari b ↓ , di mana v ↓ mewakili vektor v yang diurutkan dalam urutan menurun.
Itu adalah,
a_1 >= b_1
a_1 + a_2 >= b_1 + b_2
a_1 + a_2 + a_3 >= b_1 + b_2 + b_3
...
a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1
a_1 + a_2 + ... + a_n-1 + a_n >= b_1 + b_2 + ... + b_n-1 + b_n
di mana a dan b diurutkan dalam urutan menurun.
Untuk tujuan tantangan ini, kami akan menggunakan sedikit generalisasi mayorisasi: kami akan mengatakan daftar adalah mayorisasi yang tidak disortir dari yang lain jika semua ketidaksetaraan di atas benar tanpa menyortir a dan b . (Ini, tentu saja, secara matematis tidak berguna, tetapi membuat tantangan lebih menarik.)
Tantangan
Diberikan input dari dua daftar berbeda a dan b dari bilangan bulat dalam kisaran 0 hingga 255 (inklusif), kedua daftar panjang n ≥ 1, output apakah daftar pertama tidak disortir-mengambil jurusan yang kedua ( a > b ), yang kedua tidak disortir- mengambil jurusan pertama ( b > a ), atau tidak keduanya.
Anda dapat secara opsional meminta panjang dua daftar yang akan disediakan sebagai input. Outputnya harus selalu salah satu dari tiga nilai yang berbeda, tetapi nilai itu sendiri bisa berupa apa pun yang Anda inginkan (sebutkan nilai mana yang mewakili a > b , b > a , dan tidak ada dalam jawaban Anda).
Uji kasus untuk a > b :
[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]
Uji kasus untuk b > a :
[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]
Uji kasus tanpa jurusan:
[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]
sumber
Jawaban:
Jelly ,
1086 byte2 byte berkat @orlp.
2 byte berkat @Dennis.
Cobalah online!
1
untuka>b
,-1
untuka<b
,0
tanpa jurusan.Jika ada keduanya
1
dan-1
sekarang (beberapa jumlah kumulatif lebih besar, beberapa lebih kecil), maka langkah terakhir akan menghasilkan0
.sumber
ngn / apl, 11 byte
Berdasarkan metode dalam jawaban @ Leaky Nun .
Mengingat dua daftar A dan B , menemukan perbedaan antara setiap nilai elementwise, atau membiarkan C = A - B . Kemudian, cari jumlah kumulatif C dan ambil tanda masing-masing. Jumlah nilai tanda unik akan menjadi hasilnya. Jika A > B , hasilnya adalah 1, jika A < B hasilnya adalah -1, dan jika tidak ada mayoritas hasilnya adalah 0.
Cobalah online.
sumber
Julia, 30 byte
Disimpan 4 byte berkat @Dennis!
sumber
a^b=sum(sign(cumsum(a-b))∪0)
menghemat beberapa byte.Python 3.5, 85 byte:
Fungsi lambda anonim. Mengembalikan
[True,False]
jikaa>b
,[False,True]
jikab>a
, atau[False,False]
jika tidak ada yang benar. Saya harap ini baik-baik saja.Cobalah secara Online! (Ideone)
sumber
Cheddar ,
118114 bytePada dasarnya port jawaban Jelly saya .
Fakta bahwa lingkup di dalam fungsi rusak menyebabkan ketidakmampuan untuk mendefinisikan variabel di dalam fungsi berarti bahwa saya perlu melakukan
[xxx].map(i->yyy)[0]
alih - alihvar a=xxx;yyy
.Mengambil array yang dialihkan sebagai input.
sumber
Python 2, 73 byte
Uji di Ideone .
sumber
Ruby,
7259 bytePengembalian
1
untuka>b
,-1
untuka<b
,0
untuk keduanya.-13 byte dari cribbing the trick dari @Dennis dalam jawaban Python mereka
Cobalah online!
sumber
Python 2, 59 byte
Output:
1
untuka>b
2
untukb>a
3
untuk keduanyaIterate melalui daftar, melacak jumlah
t
perbedaan yang berjalan. Nomors
melacak tanda apa yang telah dilihat sebagai angka dua-bitr
: positif di bit kanan dan negatif di bit kiri. Ini terjadi melaluicmp(t,0)%3
, yang memberit>0
→+1
→ 1t==0
→0
→ 0t<0
→-1
→ 2Mengambil
or
ini dan nilai saat inir
memperbarui 2 bit denganor
, dengan nilai nol tidak berpengaruh.sumber
Javascript (menggunakan library eksternal-Enumerable) (123 byte)
Tautan ke lib: https://github.com/mvegh1/Enumerable
Penjelasan kode: Lulus dalam vektor a dan b, buat fungsi global z. z akan mulai dengan membuat array bilangan bulat dari 1, untuk hitungan a.length. . Semua akan memverifikasi bahwa predikat itu benar untuk setiap anggota yang dimiliki oleh. Predikat itu mengatakan untuk memuat a sebagai enumerable, ambil hitungan enumerable yang setara dengan nilai iterasi saat ini dari rentang yang kami buat, dan jumlahkan itu. Periksa apakah itu> = logika yang sama dari array "b". Jadi, kita memanggil z dalam urutan (a, b), dan membandingkannya dengan urutan (b, a) ... jika sama kita mengembalikan 0 untuk menandakan tidak ada mayor. Kalau tidak, kita mengembalikan 1 jika (a, b) benar, kalau tidak -1
sumber