Tantangan:
Diberikan daftar bilangan bulat, urutkan menurun berdasarkan satu digit terbesarnya. Urutan angka dengan digit terbesar yang sama kemudian diurutkan berdasarkan digit terbesar kedua, dll.
Kami mengabaikan digit yang digandakan dalam angka. Dan jika semua digit dalam angka sama, urutan angka-angka itu dalam daftar bisa dengan cara apa pun yang Anda inginkan.
Contoh:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Mengapa? Berikut adalah angka-angka yang relevan dengan nomor yang diurutkan:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Aturan tantangan:
- Kami mengabaikan digit yang digandakan, jadi
478
dan-7738
akan dipesan sebagai478, -7738
, karena digit terbesar adalah[8,7,4]
dan[8,7,3]
, dan bukan[8,7,4]
dan[8,7,7,3]
. - Jika beberapa angka memiliki angka yang sama, urutannya dapat berupa apa saja. Jadi
373
dan-73
dapat disortir karena keduanya373, -73
atau-73, 373
(digit[7,3]
untuk kedua angka ini). - Jika suatu angka tidak mengandung lagi angka untuk diperiksa, angka itu akan ditempatkan di belakang angka yang relevan. Jadi
123
dan3120
akan disortir sebagai3120, 123
, karena digit terbesarnya[3,2,1]
sama, tetapi0
ada sebelumnyanone
. - Anda dapat menganggap semua angka dalam input berada dalam kisaran
[-999999,999999]
. - Hanya satu dari kemungkinan keluaran yang cukup sebagai hasilnya, tetapi Anda diizinkan untuk mengeluarkan semua kemungkinan keluaran di mana sublist dapat dalam permutasi apa pun jika Anda mau (walaupun saya ragu itu akan menghemat byte dalam bahasa apa pun).
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
m:g/\d./
untuk.abs.comb
: tio.run/…Python 2 ,
605554 byte-1 byte terima kasih kepada Jonas Ausevicius .
Cobalah online!
Tidak disatukan
Cobalah online!
sumber
None
dapat diganti dengancmp
disort
fungsiPython 2 ,
5860 bytelambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Cobalah online!
sumber
Brachylog , 9 byte
Catatan: karena cara pemesanan bekerja di brachylog, tidak berfungsi pada nomor dengan benar. Ini diperbaiki dengan melemparkan nomor ke string (
ṫ
) dengan biaya 1 byte.Cobalah online!
sumber
ṫ
(ke string) memperbaiki masalah ini. Memesan digit dalam jumlah menurun berfungsi sebagai berikut. Pesan dari terkecil ke terbesar kemudian mundur. Masalahnya adalah bahwa jumlah yang3120
dipesan dari terkecil ke terbesar0123
adalah sama dengan123
yang dibalik321
dan tidak3210
ṫ
). Seperti disebutkan oleh @Arnauld, saya pikir komentar Anda berarti kode Anda saat ini tidak berfungsi. Mungkin lebih baik untuk menyebutkannya seperti: " Ini bisa jadi 8 byte dengan menghapusṫ
(toString), tetapi sayangnya itu tidak berfungsi sebagaimana dimaksud karena cara pemesanan bekerja di Brachylog. "Pyth,
76 byte-1 byte oleh @Sok
Pyth, yang hanya menggunakan ASCII yang dapat dicetak, ada sedikit kerugian di sini. Disandikan secara optimal ini akan menjadi
6*log(95)/log(256) = 4.927
byte, mengalahkan 05AB1E.Dijelaskan:
Coba di sini .
sumber
N
dapat ditinggalkan untuk menghemat 1 byte - semua fungsi tipe lambda menyimpulkan keberadaan variabel prinsip lambda jika ada argumen yang hilang dari akhir. Contohnya termasukm
menyimpulkand
,f
menyimpulkanT
,u
menyimpulkanG
...Jelly , 8 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Ṛ
,, daripada terbalikU
,. Perhatikan, bagaimanapun, bahwa Anda tidak perluD
karena sort,,Ṣ
diimplementasikan denganiterable(z, make_digits=True)
panggilan di dalamnya. Jadi ituAṢQṚµÞṚ
untuk 7.MathGolf ,
76 byteCobalah online! atau sebagai test suite .
Penjelasan
Setelah melihat solusi 05AB1E Emigna, saya menemukan bahwa saya tidak memerlukan operator absolut (dan jawaban saya sebelumnya sebenarnya salah karena operator itu). Sekarang perbedaan utama adalah bahwa saya mengonversi ke string dan mendapatkan karakter unik daripada menggunakan operator 1-byte di 05AB1E.
sumber
Japt , 12 byte
Semua uji kasus
Penjelasan:
sumber
Haskell ,
5452 byteCobalah online!
sumber
r=reverse
menyimpan dua byte. Kami juga mengizinkan fungsi anonim, sehinggaf=
tidak perlu dihitung.f=r$r id.nub.show;r=(reverse.).sortOn
.Stax ,
67 byteJalankan dan debug itu
sumber
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
bukan yang dimaksudkan8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
atau8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. Test case ini juga digunakan dalam contoh, dan untuk menjelaskan aturan, jadi saya akan melihatnya untuk memahaminya dengan lebih baik. Sepertinya Anda hanya mengurutkan berdasarkan satu digit terbesar satu kali, tanpa ada aturan lain?APL (Dyalog Extended) , 19 byte
Cobalah online!
Diperbaiki dengan biaya +2 byte berkat OP.
sumber
¯7738
ditempatkan sebelumnya478
, tetapi harus setelah itu: digit[8,7,4]
datang sebelum digit[8,7,3]
.C (gcc) ,
114111109 byteCobalah online!
Penjelasan:
f () menggunakan qsort () untuk mengurutkan array yang disediakan di tempat. Menggunakan fungsi perbandingan c () untuk membandingkan angka yang mengevaluasi angka menggunakan v (). v () menghitung angka yang lebih tinggi jika angka yang lebih besar ada di parameter.
[Sunting 1] Ditingkatkan sebesar 3 byte. 2 byte kredit untuk Kevin. Terima kasih
[Sunting 2] 2 byte lebih ditingkatkan. Kredit untuk gastropner. Terima kasih
sumber
n>0
untukn
saya pikir dalam loop metode Andav
.int*a,n
dapat disingkat menjadiint*a
.for(a=0;n=abs(n);
alih-alihn=n<0?-n:n;for(a=0;n;
J , 17 byte
Cobalah online!
Penjelasan:
sumber
JavaScript (SpiderMonkey) , 68 byte
Terima kasih untuk @Arnauld untuk mengingatkan saya lagi bahwa SpiderMonkey menggunakan sort yang stabil, jadi -4 byte untuk menghapus
||-1
.Cobalah online!
JavaScript (Node.js) , 72 byte
Cobalah online!
sumber
Java (JDK) , 98 byte
Cobalah online!
Penjelasan
catatan:
Saya membutuhkan cara untuk memetakan angka ke salah satu
0/1
atau0/-1
.indexOf
memiliki properti bagus yang secara konsisten dikembalikan-1
untuk karakter yang tidak ditemukan.-1
selalu bergeser ke kanan dengan nomor berapa pun-1
. Setiap angka positif yang bergeser ke kanan dengan angka yang cukup besar akan selalu menghasilkan0
.Jadi inilah kita:
sumber
>>9
alih-alih>>32
karena terbatasnya jumlah angka.Ruby , 55 byte
Cobalah online!
sumber
Perl 5
-nl
, 68 byteCobalah online!
sumber
Julia 1.0 , 50 byte
Cobalah online!
sumber
APL (NARS), 366 karakter, 732 byte
Untuk operator qsort, ini adalah salah satu traslasi dalam APL dari algo halaman 139 K&R Linguaggio C. Saya pikir di dalamnya ada menggunakan data sebagai C dengan pointer ... Test
sumber
Powershell, 44 byte
Skrip uji:
Keluaran:
sumber
PHP,
87 8684 byteJalankan dengan
-nr
atau coba online .Ganti
++$i
dengan$argc
(+1 byte) untuk menekan Pemberitahuan (dan membuat-n
usang).kerusakan
-
"lebih kecil" dari digit, jadi tidak memengaruhi penyortiran.sumber
Common Lisp, 88 byte
Cobalah online!
Good Old verbose Common Lisp!
Penjelasan:
sumber
C # (Visual C # Interactive Compiler) ,
7574 byte-1 terima kasih @ ASCII saja
Cobalah online!
Dalam C #, string dianggap "enumerables" karakter. Saya menggunakan ini untuk keuntungan saya dengan terlebih dahulu mengkonversi setiap angka menjadi string. LINQ kemudian dimanfaatkan untuk mendapatkan karakter (digit) unik diurutkan dalam urutan terbalik. Saya mengkonversi setiap array karakter yang diurutkan kembali menjadi string dan menggunakannya sebagai kunci pengurutan untuk memesan seluruh daftar.
sumber
-
, sepertinya urutan yang tidak terlalu penting?-
, test case # 2 kembali... 321 2132 ...
yang tampaknya salah?