Terinspirasi oleh pertanyaan Stack Overflow ini: Menyortir daftar: angka dalam naik, huruf dalam turun . Tugas Anda adalah untuk memecahkan masalah berikut ini dan, karena ini adalah kode-golf , Anda harus melakukannya sesedikit mungkin dalam byte.
Anda harus mengambil daftar objek sebagai masukan yang mengandung huruf (bentuk yang wajar: string
, char
, dll) dan angka. Anda kemudian harus mengurutkan angka ke dalam urutan menaik dan huruf ke urutan menurun. Namun, Anda harus menyimpan huruf di posisi huruf dan angka di posisi angka. Misalnya, jika daftar adalah:
[L, D, L, L, D, L]
Daftar keluaran harus dalam bentuk:
[L, D, L, L, D, L]
Bekerja melalui
Memasukkan: ['a', 2, 'b', 1, 'c', 3]
- Sortir angka ke dalam urutan menaik:
[1, 2, 3]
- Urutkan surat ke dalam urutan menurun:
['c', 'b', 'a']
- Bergabunglah dengan mereka kembali tetapi tetap urutannya sama:
['c', 1', 'b', 2, 'a', 3]
Aturan
- Daftar ini hanya akan berisi huruf dan angka.
- Daftarnya mungkin kosong.
- Daftar ini hanya dapat berisi huruf atau hanya digit.
- Jika bahasa Anda tidak mendukung array tipe campuran, Anda dapat menggunakan karakter digit alih-alih angka. Perhatikan bahwa jika bahasa Anda mendukung ini, Anda harus menggunakan jenis campuran.
- Surat hanya akan menjadi
[a-z]
atau[A-Z]
, Anda dapat memilih yang mana. - Surat diurutkan sebagai
a
yang terendah,z
yaitu yang tertinggi yaitua = 1, z = 26
. - Celah standar dilarang.
- I / O dapat dengan sarana standar termasuk sebagai string.
Uji kasus
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Karena ini adalah kode-golf , jawaban terpendek dalam byte menang!
code-golf
array-manipulation
sorting
TheLethalCoder
sumber
sumber
Jawaban:
Retina , 10 byte
Cobalah online!
The
O
tahap dalam Retina dapat langsung melakukan jenis penyortiran selektif dibutuhkan oleh tantangan ini.Di sini baris pertama mengurutkan digit sedangkan baris kedua mengurutkan non-digit secara terbalik.
sumber
Python 2 ,
5352 byte-2 byte berkat g.rocket
-1 byte terima kasih kepada Jonathan Frech
Cobalah online!
The
sorted
daftar akan memiliki angka pertama dan kemudian karakter seperti[3, 5, 6, 'a', 'b', 'x']
, kemudian gunakane<x
untuk menyaring apa yang jumlah dan apa yang char, di python sejumlah kurang dari daftar (input) dan daftar kurang dari string.sumber
IndexError: pop index out of range
. Solusi pertama berhasil.1-(e<'`')
seharusnya(e<'`')-1
. Anda hanya menempatkan mereka dalam urutan yang salah. BTW, Anda ninja kan: / Saya punya inie>x
APL (Dyalog) ,
2726 byteDiharapkan karakter menjadi huruf besar
Cobalah online!
Ini hanya dua aplikasi formulir
f@g
, menerapkan fungsif
pada item yang ditunjukkan olehg
.Untuk pertama aplikasi kita gunakan:
f
:⍒⊃¨⊂
nilai-nilai menurun (⍒
) masing-masing pick (⊃¨
) dari seluruh argumen (⊂
).g
:(e←∊∘⎕A)
anggota (∊
) dari (∘
) lfabet A (⎕A
), dan menyimpan (←
) fungsi ini sebagaie
.Untuk kedua aplikasi yang kami gunakan:
f
:⍋⊃¨⊂
nilai-nilai ascending (⍋
) masing-masing pick (⊃¨
) dari seluruh argumen (⊂
).g
:(~e)
not (~
) anggota alfabet (e
; fungsi yang kami simpan sebelumnya)sumber
83=⎕DR¨⍵
3=10|⎕DR
untuk bilangan bulat?⌊0.1×⎕DR
memberi Anda jumlah bit yang digunakan untuk mewakili setiap skalar, kecuali untuk pointer, yang bergantung pada arsitektur tetapi selalu 326. Dengan demikian, semua angka adalah2|⎕DR
.JavaScript (ES6),
715147 byteDisimpan 20 byte hanya dengan menggunakan
sort()
, seperti yang disarankan oleh @JustinMarinerDisimpan 4 byte lagi berkat @CraigAyre
Menggunakan pendekatan yang mirip dengan jawaban Rod's Python :
Uji kasus
Tampilkan cuplikan kode
sumber
sort
fungsi dan hanya menggunakannyasort()
sendiri? Tampaknya mengurutkan dengan cara yang sama tanpa fungsi (di Chrome / FF / Edge).sort()
akan gagal. Tetapi karena kami terbatas pada angka, Anda benar: itu berfungsi. Terima kasih!a.sort()
setiap loop bukan menugaskan kex
:.map(n=>a.sort()[1/n?'shift':'pop']())
+n
dapat digunakan sebagai ganti1/n
R ,
8376 byte-7 byte berkat Miff
Ini sama dengan di bawah ini, tetapi memungkinkan input tipe campuran sebagai
list
bukanatomic
vektor (yang akan typecast semuanya sebagai karakter dengan tipe campuran).Cobalah online!
R ,
6861 byte-7 byte berkat Miff
Fungsi anonim. Semua digit dilemparkan ke karakter dalam kasus ini.
n[-d]
adalah array tanpa angka. MengembalikanNULL
(daftar kosong) pada input kosong.Cobalah online!
sumber
d=n%in%0:9
Japt ,
1815 byteTerima kasih @Shaggy untuk -3 byte dan untuk bantuan memperbaiki array dengan
0
s.Baris pertama sengaja dikosongkan.
Cobalah online! gunakan
-Q
untuk melihat array yang diformat.Penjelasan
Baris pertama kosong untuk menghindari menimpa array input.
[5, 'a', 'x', 3, 6, 'b']
Buat salinan dengan meratakan (
c
) array input, lalu urutkan (ñ
) dengan string yang diwakili oleh kode karakter mereka (c
). Ini disimpan diV
.[3, 5, 6, 'a', 'b', 'x']
Kemudian memetakan array input dengan fungsi ...
Ubah angka menjadi string biner (kebenaran) atau string menjadi
""
(falsy) (¤
). Jika benar, hapus dari awalV
(v
), jika tidak hapus dari akhir (o
).sumber
Vo
danVv
berkeliling. Saya yakin harus ada jalan yang lebih pendek, tanpa terner.o
bisa menghapus dari awal dengan nilai negatif atau sesuatu ...JavaScript,
164162158142 bytesunting 1: 2 byte lebih sedikit setelah menghapus penugasan berlebihan v.
sunting 2: 4 byte lebih sedikit berkat TheLethalCoder.
sunting 3: 16 byte lebih sedikit berkat petunjuk brilian dari Justin Mariner
Ini pertama kalinya saya bermain golf kode, jadi pasti bisa ditingkatkan ... Tapi tetap, patut dicoba.
Program melakukan varian pemilihan jenis, yang hanya memperhitungkan nilai-nilai dari jenis yang sama dengan yang sekarang (hanya menukar angka dan angka, atau huruf dan huruf)
Formulir yang dapat dibaca:
sumber
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
dan hapus kenaikan di lingkaran luar.j
seperti yang saya sarankan, saya tidak melihat Anda menggunakani
lebih jauh hanya mengubahx[i]=x[m]
jugax[i++]=x[m]
x[i++]=x[m]
... Terima kasih!C ++ 17 (gcc) , 219 byte
Cobalah online!
Hampir tidak kompetitif. Tetapi saya harus mendukung array tipe campuran? BAIK.
Menerima serangkaian varian dalam rentang gaya, dan memodifikasinya di tempat. Menyalin input ke dalam dua set yang diurutkan, dan kemudian kembali ke array input / output.
sumber
void *
di C;) Tapi, ya, menarik untuk melihat solusi melompat melalui lingkaran seperti itu.#include
sMathematica, 203 byte
Cobalah online!
sumber
Jelly , 14 byte
Cobalah online!
Pada dasarnya port solusi Rod's Python .
sumber
Pyth ,
1211 byteCobalah online! atau Coba Test Suite.
Penjelasan
sumber
Python,
145139130 byte6 byte disimpan berkat @officialaimm
9 byte disimpan berkat @Chris_Rands
Cobalah online!
sumber
type(x)==str
akan menghemat beberapa byte menggunakanisinstance(...)
i think05AB1E , 17 byte
Cobalah online!
Menggunakan penutupan berdasarkan jenis sebenarnya lebih buruk:
Σ©Ç®ai0<*}}¹SaJsvyay.;
sumber
Python 3, 77 byte
Jawaban ini didasarkan pada komentar yang mengatakan Anda dapat menggunakan '1', '2', dll jika karakter dan angka tidak sebanding dalam bahasa. 'a' dan 1 tidak dapat dibandingkan dalam Python 3.
sumber
q / kdb +,
5453 byteLarutan:
Contoh:
Penjelasan:
Temukan karakter dalam daftar, urutkan menurun, temukan panjang dalam daftar, urutkan, naik, bergabung untuk mendapatkan daftar, misalnya
("x";"b";"a";3;5;6)
, lalu tetapkan nilai yang diurutkan kembali ke posisi semula di daftar, misalnya di0 3 4 1 2 5
.Golf hanya mengganti q kata kunci (
each
,where
dannot
) untukk
padanannya (yang mengharuskan mereka untuk dibungkus dengan tanda kurung).Suntingan
desc
sumber
C (gcc) ,
125113110 byteCobalah online!
Dijelaskan:
Surat diharapkan dalam huruf besar.
sumber
PHP, 66 byte:
mengambil input dari argumen baris perintah, mencetak string. Jalankan dengan
-nr
atau coba online .Menghasilkan peringatan di PHP 7.1; ganti
a&
dengan""<
untuk memperbaiki.sumber
Mathematica, 107 byte
sumber
C # (.NET Core) , 171 byte
Hitungan byte juga mencakup:
Cobalah online!
Penjelasan:
sumber
Perl 5 , 107 + 1 (-n) = 108 byte
Cobalah online!
sumber
Ruby , 265 byte
Cobalah online!
Timer pertama di sini, solusi saya pasti bukan yang terbaik. Tetapi karena ini adalah jawaban pertama saya, saya berpikir untuk memposting hanya untuk bersenang-senang saja.
Mencari foward untuk melihat jawaban Ruby yang lebih baik, untuk melihat apa pendekatan terbaik. Saya harap saya meningkatkan jawaban di masa mendatang =)
Dapat dibaca
sumber
Haskell, 108 byte
Mungkin ada cara yang lebih pendek, tetapi saya hanya harus mencobanya dengan
Lens
perpustakaan.Saya bisa mendefinisikan
f
hanya menjadi komposisi dari duai
doa, tetapi saya masih harus menerapkannyax
untuk menghindari kesalahan jenis dari pembatasan monomorfisme. Perhatikan bahwa jenisf
iniTraversable t => t Char -> t Char
sehingga dapat digunakan denganString
s yang daftarChar
s serta dengan arrayChar
s.Berikut adalah contoh-contoh tesnya:
sumber
Python 3, 91 byte
sumber
Clojure, 151 byte
Contoh:
Ini menghitung
jumlahkumulatif bilangan bulat dan karakter, dan menggunakannya untuk mencari elemen yang benar dari daftar elemen elemen yang diurutkan.sumber
APL (Dyalog) , 26 byte
(menggunakan
⎕IO=1
)Cobalah online!
sumber