Diberi kunci, dan array string, kocok array sehingga diurutkan ketika setiap elemen XOR'd dengan kunci.
XOR'ing dua string
Untuk XOR string dengan kunci, XOR masing-masing nilai karakter dari string dengan pasangannya di kunci, dengan asumsi bahwa kunci berulang selamanya. Misalnya, abcde^123
terlihat seperti:
a b c d e
1 2 3 1 2
--------------------------------------------
01100001 01100010 01100011 01100100 01100101
00110001 00110010 00110011 00110001 00110010
--------------------------------------------
01010000 01010000 01010000 01010101 01010111
--------------------------------------------
P P P U W
Penyortiran
Penyortiran harus selalu dilakukan secara Leksikografis dari string XOR. Yaitu, 1 < A < a < ~
(Mengasumsikan pengkodean ASCII)
Contoh
"912", ["abcde", "hello", "test", "honk"]
-- XOR'd
["XSQ]T", "QT^U^", "MTAM", "Q^\R"]
-- Sorted
["MTAM", "QT^U^", "Q^\R", "XSQ]T"]
-- Converted back
["test", "hello", "honk", "abcde"]
Catatan
- Kunci akan selalu setidaknya 1 karakter
- Kunci dan Input hanya akan terdiri dari ASCII yang dapat dicetak.
- String XOR'd mungkin berisi karakter yang tidak dapat dicetak.
- Input dan Output dapat dilakukan melalui Metode yang Wajar
- Celah Standar dilarang.
- Anda dapat mengambil Kunci dan Input dalam urutan apa pun.
Uji Kasus
key, input -> output
--------------------
"912", ["abcde", "hello", "test", "honk"] -> ["test", "hello", "honk", "abcde"]
"taco", ["this", "is", "a", "taco", "test"] -> ["taco", "test", "this", "a", "is"]
"thisisalongkey", ["who", "what", "when"] -> ["who", "what", "when"]
"3", ["who", "what", "when"] -> ["what", "when", "who"]
Ini kode-golf , jadi paling tidak byte menang!
Jawaban:
Jelly ,
97 byteTerima kasih kepada @EriktheOutgolfer untuk saran yang membantu menghemat 2 byte!
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3 ,
7573 byteIni mengurutkan daftar x di tempat.
Terima kasih kepada @mercator untuk bermain golf 2 byte!
Cobalah online!
Versi alternatif, 62 byte
Ini mengambil input sebagai string byte, yang mungkin tidak diizinkan.
Cobalah online!
sumber
x.sort(key=...)
.Haskell, 77 byte
Terlalu banyak impor.
Cobalah online!
sumber
Ruby , 61 byte
Cobalah online!
sumber
Bersih ,
10110094 byte-6 byte terima kasih kepada Ourous!
Cobalah online! Contoh penggunaan:
s ['3'] [['who'], ['what'], ['when']]
.Tidak Disatukan:
sumber
? =toInt
dan menggunakan?
malah menghemat 2 byte, dan menggunakan flipping yang lebih besar daripada yang kurang atau sama dengan menyimpan yang lain.Sebenarnya , 24 byte
Cobalah online!
Penjelasan:
sumber
["who", "what", "when"]
dan"thisisalongkey"
Perl 6 , 37 byte
Cobalah online!
$^a
dan@^b
argumen kunci dan array untuk fungsi masing-masing.@^b.sort(...)
cukup mengurutkan array input sesuai dengan fungsi predikat yang diberikan. Fungsi itu membutuhkan satu argumen, jadisort
akan meneruskannya setiap elemen pada gilirannya dan memperlakukan nilai kembali sebagai kunci untuk elemen itu, menyortir daftar dengan kunci elemen.Fungsi penyortiran adalah
*.comb Z~^ (|$^a.comb xx *)
.*
adalah argumen string tunggal ke fungsi.*.comb
adalah daftar karakter individu dari string.|$^a.comb xx *
adalah daftar karakter dalam kunci sortir xor, direplikasi tanpa batas. Kedua daftar tersebut di-zip bersama-sama (Z
) menggunakan operator xwise stringwise (~^
). Karena predikat pengurutan mengembalikan kunci pengurutan yang merupakan daftar,sort
memesan dua elemen dengan membandingkan elemen pertama dari daftar yang dikembalikan, maka elemen kedua jika elemen pertama sama, dan lain-lain.sumber
{sort *.comb »~^»$^a.comb,@^b}
C (gcc) ,
132128126 byteMengambil jumlah argumen dan pointer ke array string (kunci, diikuti oleh string yang akan diurutkan) dan memodifikasi array string di tempat.
Kode ini sangat non-portabel dan membutuhkan pointer 64-bit, gcc, dan glibc.
Terima kasih kepada @ceilingcat untuk bermain golf 2 byte!
Cobalah online!
sumber
Python 2,
204 140 134126 byteTerima kasih untuk @Mr. Xcoder untuk menyimpan 64 byte, terima kasih kepada @ovs karena telah menghemat enam byte, dan terima kasih kepada @Dennis karena telah menghemat delapan byte!
Cobalah online!
sumber
opcode x86, 57 Bytes
Kode uji:
sumber
JavaScript ES 6,
1139795 BytesJavaScript panjang di charcoding ...
Untuk [0,65536) + 1e4 semuanya menjadi 5 digit sehingga dapat dibandingkan seperti string
sumber
k+=k
alih-alihp=k+p
tetapi menggunakan terlalu banyak memori dengan test case kecilPerl 5, 88 byte
Cobalah online .
sumber
Clojure, 80 byte
sumber
Perl 5,
80 + 3 (, 67 byteanl
) = 83coba online
sumber
9
;abcdeabcde abcdeabcdz
(harus memberiabcdeabcdz abcdeabcde
)AWK ,
285284 byteCobalah online!
Menerima input dalam bentuk
key word word ...
mis912 abcde hello test honk
Keluaran kata diurutkan spasi terpisah
Sedikit lebih mudah dibaca
sumber
Faktor, 85
Coba pertama, saya akan melihat apakah saya bisa bermain golf lebih jauh besok.
Saya menerima saran;)
sumber
Dyalog APL, 34 byte
Dfn, gunakan ⎕ml 3
sumber