Diberikan bilangan bulat positif, kita dapat membentuk angka baru yang dijelaskan dengan digitnya yang diambil secara berpasangan (dengan 0 terkemuka ditambahkan untuk angka dengan jumlah ganjil digit).
Untuk mis .:
1234 dapat dibaca sebagai satu 2, tiga 4s - jadi, output untuk 1234 adalah 2444.
643 memiliki jumlah digit ganjil, jadi nol depan ditambahkan untuk membuatnya genap. Kemudian, 0643 dapat dibaca sebagai: nol 6s, empat 3s, maka outputnya adalah 3333.
(Ini adalah OEIS A056967 ).
Tugas: Diberikan array bilangan bulat positif, urutkan berdasarkan nilai digit-pasangan yang dijelaskan, dalam urutan menaik. Urutan tidak masalah antara nomor input yang mengarah ke nilai yang sama.
Input : array / daftar / set bilangan bulat positif. Angka nol di input tidak diperbolehkan, dan input sebagai string / daftar digit / dll. tidak diizinkan - input harus sedekat mungkin dengan tipe integer / numerik karena bahasa Anda mampu digunakan.
Output : array diurutkan dengan cara yang disebutkan di atas, dikembalikan dengan cara biasa (nilai pengembalian fungsi / STDOUT / berteriak ke dalam kekosongan / dll.) Anda dapat mencetaknya secara individual, mengembalikannya sebagai angka, string, atau daftar digit.
Uji kasus
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(Dalam test case ke-4, 1, 4, dan 5 semuanya dievaluasi menjadi 0, dan dengan demikian dapat disortir di antara mereka dalam urutan apa pun. Demikian pula dalam case test kelima, 10 dan 1 keduanya dievaluasi menjadi 0s, dan dengan demikian dapat diurutkan dalam salah satu pesanan.)
(Terkait: Katakan apa yang Anda lihat , Satu 1, Dua 1, Satu 2 Satu 1
Terima kasih kepada Kevin Cruijssen untuk bantuan mengklarifikasi pertanyaan di Sandbox.
strtoi
mengembalikan integer - benar? Jika demikian, itu baik-baik saja, itu sah.Jawaban:
APL (Dyalog) , 26 byte
Terima kasih ngn untuk menghemat 1 byte :)
Cobalah online!
Inspirasi diambil dari dzaima & ngn
sumber
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
bekerja untuk 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 byte
Cobalah online!
Jawaban yang agak melelahkan - tetapi bekerja pada semua kasus uji. Membangun output digit-pasangan dan mengurutkan input sesuai dengan ini.
sumber
v
untuk variabel dari jawaban Anda yang lain - Saya tidak pernah menggunakanv
sebelumnya. Dan penggunaan yang bagusintToUtf8
!R , 120 byte
Cobalah online!
Kode tidak dikunci dengan penjelasan:
sumber
[!1:0]
trick real nice - tidak pernah melihat itu sebelumnya.[!1:0]
itu menyembunyikan sesuatu yang rapi. Saya sedang bermain-main dengan ini dan tips tentang golf R, mencoba untuk mendapatkan nomor dari angka secara hitung (tanpaas.double
), tetapi hanya muncul dengan versi 132 byte: TIOPyth , 14 byte
Coba di sini! | Suite uji! | 12 byte dengan daftar angka I / O
Bagaimana itu bekerja?
sumber
Jelly , 10 byte
Cobalah online!
Lihatlah suite tes!
Bagaimana itu bekerja
sumber
2537
dan3725
tidak mewakili angka yang sama.[2537, 3725]
,. Saya tidak pernah meragukan bahwa ini adalah suatu kebetulan, maka saya memasukkan catatan itu ke jawabannyaPerl 6 , 53 byte
Cobalah online!
Anonim Apapun lambda yang mengambil daftar nilai dan mengurutkannya dengan apa yang digambarkan pasangan angka.
Dalam hal ini, saya membalikkan angka, lalu
rotor
memasukkan daftar dengan dua untuk mendapatkan setiap pasangan angka. Ini akan mengecualikan digit pertama untuk jumlah panjang ganjil, tetapi karena itu diterjemahkan ke0
kali angka itu, tidak apa-apa. Plus, itu berbaris nilai-nilai untuk digunakan[x]
dengan benar.sumber
Python 2 ,
8074 byteCobalah online!
sumber
Haskell ,
8988 byteMenyimpan satu byte berkat ovs
Baris terakhir mendefinisikan fungsi anonim yang dapat digunakan seperti:
Fungsionalitas inti disediakan oleh operator infiks
(?)
yang melacak pengalim
,, dan input RLE yang tersisan
.(?)
terus mengurangi 10 darin
sementara ada puluhan digit untuk dikurangkan dari, dan saat itu melakukannya mendorong salinan lain dari digit akhir ke depan output (melalui pengalim
, yang meningkat 10 setiap kali). Ketika puluhan tempat habis, dua digit terakhir dibuang dan proses berulang hingga jumlahnya dikurangi menjadi 0. Akhirnya, kami menggunakan operator (dengan pengali awal 1) sebagai kunci pengurutan.sumber
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
byte lebih pendek.Sekam , 10 byte
Cobalah online!
Penjelasan
sumber
Dyalog APL,
41393635313029 byteCobalah online!
-2 terima kasih kepada Sapi dukun
-4 (ditambah -4 untuk ide konversi dasar) terima kasih kepada ngn
-2 terima kasih H.PWiz
sumber
⊃,/
dapat menjadi∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
sebagai⊂⌷¨⍨∘⍋F
C (gcc) (sistem 32bit),
188177176 byteCobalah online!
pada
amd64
add flag-m32
untuk dikompilasi.Penggunaan : di
s(x,n);
manax
menunjuk ke array bilangan bulat untuk disortir dann
panjang array itu.Test case kedua memberikan hasil yang salah karena mengkonversi
25257
memberikan2222277777
yang melebihi integer 32bit - menambahkan test case ke-5 tanpa nomor itu.Penjelasan:
sumber
d()
panjang karena string dan fungsi yang terkait dengannya, Anda dapat menyimpan banyak byte hanya dengan membaca 2 digit terakhir dan membangun output seperti ini:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
Anda juga akan menyimpan byte dengan menghindari mendeklarasikan dan menginisialisasichar
s.b-~sprintf(b+1,"%d",x)%2
alih-alihb+!(sprintf(b+1,"%d",x)&1)
x/10%10
bukannyax%100/10
Python 2 ,
10210197101 byteCobalah online!
sumber
Brachylog , 18 byte
Cobalah online!
Penjelasan
Banyak hal kecil yang diperlukan untuk menjelaskan tiga kasus yang berbeda: jumlah ganjil, sepasang 0 kali jumlah, dan pasangan normal.
sumber
|Ȯt
itu tidak perlu, dan pada kenyataannya membuatnya agak salah: itu setara dengan padding dengan 1 bukannya 0, jadi mengingat [125, 26, 1], ketik sebagai [1, 26, 125] alih-alih [1 , 125, 26].Perl 5 , 76 byte
Fungsi alih-alih satu baris untuk sekali.
Cukup mudah:
g
mengurutkan input secara numerik, gunakanh
untuk mengonversi angka.h
melakukan ini dengan menggunakan regexs/(.)(.)/$2x$1/gre
(yang mungkin cukup mudah dibaca). Dan0
bantalan-kiri dilakukan dengan0 x("@_"=~y///c%2)."@_"
(di manay///c
cara penulisan singkatlength
,x
adalah operator pengulangan dan.
penggabungan).Cobalah online!
Saya berharap untuk melihat beberapa jawaban Perl pendek!
sumber
Retina , 44 byte
Cobalah online! Menghasilkan kunci sortir pada awal baris lebih sulit tetapi tahap sortir pendek menghasilkan penghematan 3 byte secara keseluruhan. Penjelasan:
Terapkan dua tahap pertama pada setiap baris secara individual.
Cocokkan dan salin jumlah digit trailing yang genap.
Ganti setiap pasangan digit dengan nilainya yang dijelaskan. The
\G\d
menyebabkan pertandingan berhenti di ruang.Sortir secara numerik.
Hapus tombol sortir.
sumber
05AB1E ,
2019 byteBug-diperbaiki untuk +1 byte, dan kemudian di-golf dengan -2 bytes berkat @sundar .
Cobalah secara online atau verifikasi semua kasus uji .
Pasti bisa main golf .. Tidak terlalu senang tentang itu tbh ..
Penjelasan:
sumber
Attache , 50 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES8),
7270 byteCobalah online!
sumber
Japt, 13 byte
Cobalah atau jalankan semua test case
Penjelasan
sumber
Jelly , 14 byte
Cobalah online!
sumber
Ruby , 71 byte
Cobalah online!
sumber
Java 11,
204189 byteMengambil Daftar Long sebagai parameter dan mengurutkan input-Daftar ini (tanpa mengembalikan Daftar baru).
Cobalah online (CATATAN:
String.repeat(int)
ditiru sebagairepeat(String,int)
karena Java 11 belum menggunakan TIO. Penghitungan byte tetap sama.)Penjelasan:
sumber
+""
untuk mengubah angka menjadi String. Harus diperbaiki sekarang. :)