Memasukkan:
- Array yang berisi tiga bilangan bulat:
0
,1
dan2
dalam urutan apapun (yaitu[2, 0, 1]
) - Dan string dengan panjang> = 2 hanya berisi huruf alfabet (baik huruf kecil dan besar) dan digit (yaitu
a1B2c3
)
Keluaran:
Berdasarkan array kami mengurutkan dan menampilkan string.
Bagaimana cara kerjanya?
- Array menunjukkan urutan diutamakan dari
a-z
,A-Z
dan0-9
, yang pertama0
; makhluk kedua1
; dan yang ketiga2
. - Karakter individu dari string kemudian dapat dipesan berdasarkan itu.
Contoh:
- Array:
[2, 0, 1]
- Tali:
a1B2c3
Berdasarkan array, kita tahu prioritas pesanan kita 0-9a-zA-Z
.
Berdasarkan itu, kita dapat mengkonversi dan output string: 123acB
.
Aturan tantangan:
- Untuk array, Anda dapat memilih untuk menggunakan input 0-diindeks atau 1-diindeks, demikian
[3, 1, 2]
juga input yang valid jika Anda lebih suka menggunakan array 1-diindeks. - String (input dan output) hanya berisi karakter yang valid:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. - Jika bahasa Anda tidak mendukung array (atau jika Anda memilih untuk), Anda bebas untuk menggunakan string bukan array untuk parameter pertama (yaitu
012
,[0,1,2]
, dll).
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, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
[2, 0, 1] & a1B2c3 -> 123acB
[2, 1, 0] & aAaA909UuHWw9gh2 -> 02999AAHUWaaghuw
[2, 1, 0] & 6Bx43 -> 346Bx
[1, 0, 2] & jfjf33g -> ffgjj33
[0, 2, 1] & AbC13 -> b13AC
[1, 2, 0] & Qfl0l -> Q0fll
[0, 1, 2] & 9870abcABC -> abcABC0789
[0, 2, 1] & test123 -> estt123
[2, 0, 1] & WHAT -> AHTW
[2, 0, 1] & WhAt -> htAW
[1, 0, 2] & 102BACbac -> ABCabc012
code-golf
string
array-manipulation
sorting
Kevin Cruijssen
sumber
sumber
"123"
format yang valid untuk parameter pertama?123
,012
,[0,1,2]
,[0, 1, 2]
,0;1;2
atau mana yang Anda inginkan.Jawaban:
05AB1E ,
151412 byteKode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
²
dan menggunakan₂
alih-alih26
.Python 2,
6766 byteUji di Ideone .
sumber
JavaScript (ES6), 87 byte
Jika array input memberi urutan, alih-alih diutamakan, dari tiga rentang (ini hanya membuat perbedaan untuk
[1, 2, 0]
dan[2, 1, 0]
yang efeknya ditukar) maka ini akan bekerja untuk 80 byte:Saya salah membaca pertanyaan dan masih mendapatkan 7 suara positif dengan ini. Jangan ragu untuk menghapus upvotes Anda dan berikan ke @CharlieWynn sebagai gantinya, yang datang dengan koreksi terbaik untuk pendekatan saya.
sumber
Array.sort
parameter fungsi opsional tapi ini jauh lebih baik.Jelly , 13 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Pyth,
171615 byteSuite uji.
Terima kasih kepada @FryAmTheEggman untuk byte dan @Jakube untuk yang lain!
sumber
'UT
bukans'MT
.'UT
adalah kesalahan, dan`UT
tidak menghasilkan string yang sama.Javascript es6 77 byte
sumber
?
s ke setiap regex, ini memastikan bahwa pertandingan mengembalikan hasil (sebagian besar string kosong, tetapi mereka tetap menghilang), menghindari(||[])
, sehingga menghemat 3 byte secara keseluruhan.TSQL,
199191 byteGolf:
Tidak Disatukan:
Biola
sumber
APLX , 19 byte
⎕a⎕A⎕D
digit atas bawah(
...)[a]
atur ulang menurut larik a∊
meratakan(
...)⍋s
menurut bahwa "abjad", memberikan indeks yang akan memilah-string yang ss[
...]
gunakan itu untuk menyusun ulang ssumber
⎕a
, karena itu adalah nama quad case-sensitive. Jauh lebih baik (untuk bermain golf dan secara umum) untuk apa saya melobi; untuk mendapatkan⌈
dan⌊
melipat kasing pada data karakter, seperti di K. Kemudian kita akan memiliki⌊⎕A
alih - alih⎕a
.Python 2, 121 Bytes
sumber
Clojure, 74 byte
Untuk setiap nilai dalam daftar pertama, dapatkan regex yang sesuai dan terapkan ke string input. Hasilnya adalah daftar daftar simbol yang cocok dengan regex. Kemudian mengurutkan masing-masing dan menggabungkan hasilnya menjadi satu daftar dan mengubahnya menjadi string.
Anda dapat melihatnya online di sini: https://ideone.com/dqAkxg
sumber
Retina ,
4339 byteHitungan byte mengasumsikan penyandian ISO 8859-1. Linefeed tambahan sangat penting.
Input diharapkan menjadi urutan pengurutan sebagai daftar berbasis nol tanpa pembatas pada baris pertama, dan string yang akan diurutkan pada baris kedua, misalnya
Cobalah online!
Penjelasan
Saya akan menggunakan contoh input di atas untuk memandu Anda melalui kode:
Tahap 1: Substitusi
Regex itu sendiri adil
.
(cocok dengan karakter non-linefeed apa pun), yang dikelilingi dengan!..."
. Namun, itu2=
adalah batas yang memberitahu Retina untuk menerapkan substitusi hanya pada pertandingan kedua regex. Jadi kami mendapatkan ini:Tahap 2: Transliterasi
Tahap transliterasi hanya melakukan substitusi karakter-demi-karakter. Ini
¶
mewakili umpan baris dand
diperluas ke0123456789
(meskipun kami dapat mengabaikan semua digit setelah2
). Itu berarti, transliterasi ini sesuai dengan pemetaan berikut:Di
04
depan adalah dua batas, yang bersama-sama menunjukkan bahwa hanya empat karakter pertama dari set ini yang harus ditransliterasi. Itu adalah digit di baris pertama, serta baris yang memisahkan kedua baris, jadi kita dapatkan ini:Di bagian depan string sekarang kita punya tiga pasang karakter ini:
Perhatikan bahwa karakter kedua dari pasangan hanya dalam urutan ASCII normal (dan akan selalu sama). Kami akan menggunakan ini nanti untuk mengurutkan grup karakter di input utama ke dalam urutan yang diperlukan.
Karakter pertama sedikit lebih menarik: signifikansinya adalah yang
%
datang sebelum digit pada tabel ASCII,@
datang sebelum huruf besar (tetapi setelah angka), dan^
datang sebelum huruf kecil (tetapi setelah huruf besar). Ini akan membantu kami mengelompokkan penanda posisi (yaitu karakter kedua di setiap pasangan) dengan set karakter yang tepat.Tahap 3: Sortir
Ini adalah semacam tahapan sederhana. Ini cocok dengan dua karakter jika yang pertama bukan karakter kata (dengan demikian cocok dengan ketiga pasangan yang baru saja saya bicarakan) atau satu karakter sebaliknya (cocok dengan masing-masing karakter dari input utama secara individual), dan mengurutkan string tersebut. Ini memiliki dua tujuan: itu membawa karakter dalam setiap kelompok dalam urutan yang benar (dan karena penyortiran stabil, urutan ini tidak akan kacau di tahap berikutnya), dan karena
%@^
spidol, itu memasukkan pasangan dalam posisi yang tepat:Tahap 4: Sortir
Tahap ini mengurutkan semua kecocokan dari
.\w+
regex yang, karena keserakahan, cocok dengan satu penanda posisi (yaitu salah satu dari!"#
) bersama dengan semua karakter kata setelahnya. Yaitu, ini mengurutkan tiga string ini, yang urutannya ditentukan hanya oleh karakter marker:"24! BOR #afo
Sementara ini mengacak di sekitar penanda tersebut (sambil meninggalkan tiga penanda lainnya di tempat), yang paling penting itu membawa angka dan huruf dalam urutan yang benar:
Tahap 5: Substitusi
Yang tersisa hanyalah sedikit pembersihan, tempat kami menghapus semua penanda dengan mencocokkannya dan menggantinya dengan apa pun.
sumber
JavaScript (ES6), 65
Catatan: pesanan ASCII 'alami' adalah 0-9, AZ, az, yang merupakan kebalikan dari OP 0,1,2. Begitu
sumber
Haskell,
6263 byteContoh penggunaan:
"cD12ab" # [2,0,1]
->"12abcD"
.Bagaimana itu bekerja:
Sunting: @Christian Sievers menemukan bug. Terima kasih! Diperbaiki untuk 1 byte tambahan.
sumber
Stax , 15 byte
Jalankan dan debug secara online
Pengiriman 15 byte ini dikemas ke dalam varian set karakter CP437. Representasi ascii yang sesuai membutuhkan waktu 18 byte:
Cukup yakin itu bisa dipangkas lebih lanjut.
VlVd+
bisa jugaVLA|(
, yang dibiarkan berputar0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
oleh sepuluh elemen. Seluruh kode juga bisaVlVd+26/,e@:f,{[Io
, yang membaca tumpukan input dua kali alih-alih membaca semuanya pada awal hingga tumpukan utama, dan menggunakan format input yang berbeda (lebih tradisional), seperti yang ditunjukkan dalam ini .sumber
Dyalog APL , 22 byte
(819⌶⎕A)
lipat huruf besar ke kecil(
…)⎕A⎕D[a]
Digit atas yang lebih rendah disusun ulang menurut larik a∊
meratakans⍋⍨
untuk string s , dapatkan indeks yang akan mengurutkan s menurut yang "alfabet"s[
...]
gunakan itu untuk menyusun ulang ssumber
PowerShell v2 +, 107 byte
Saya sedang mengeksplorasi algoritma menggunakan regex, tetapi sejauh ini semuanya tampak lebih panjang.
Mengambil input sebagai array eksplisit
$n
(lihat contoh di bawah) dan string$s
yang langsung dilemparkan ke array char. Kami kemudian membangun tiga elemen dari array dinamis baru, masing-masingnya dienkapsulasi dengan-join
:-
(($s=$s|sort)|?{$_-ge97})
-
($s|?{$_-in65..96})
-
($s|?{$_-lt58})
Yang pertama kita ambil
$s
dan jalankanSort-Object
. Untungnya, karena kita sudah menjadikannya sebagai char-array, ini merupakan penyortiran case-sensitive. Itu akan disimpan kembali ke$s
dan kemudian disalurkan keWhere-Object
dengan klausa lebih besar dari97
(yaitu, huruf kecil ASCIIa-z
). Yang kedua adalah untukA-Z
dan yang ketiga untuk0-9
.Jadi kita sekarang memiliki array string, di mana setiap string terdiri dari satu dari tiga tipe karakter dan diurutkan. Kami mengirisnya dengan
[$n]
lalu-join
hasilnya bersama-sama untuk membentuk string hasil akhir kami. Yang tersisa pada pipa dan pencetakan tersirat.Uji Kasus
sumber
Ruby, 56 byte
Porting dari jawaban @Dennis.
Solusi 58 byte alternatif yang saya sukai lebih baik, terinspirasi oleh @Neil dan sedikit dimodifikasi dari jawabannya.
Coba salah satu versi online! (versi komentar-keluar adalah solusi alternatif)
sumber
Kode mesin x86 32-bit, 70 byte
Dalam hex:
Prosedur ini mengharapkan urutan penyortiran kelas karakter menjadi string 3-char (0..2) NULL
ESI
dan string untuk diurutkanEDI
. Penyortiran dilakukan di tempat menggunakan versi penyortiran gelembung yang sangat sub-optimal (berdasarkan kinerja).sumber
Emacs Lisp, 183 byte
Sedikit lebih pendek dari Jawa ...
sumber
Clojure, 77 byte
Tidak sesingkat yang
re-seq
berbasis, dan saya tidak tahu bagaimana mengekspresikan "(apply str(mapcat sort(map(...))))
" itu dalam ruang yang lebih sedikit.group-by
membuat hash-peta yang dapat digunakan sebagai fungsi, ketika ditanya dengan ingeger antara 0 dan 2 mengembalikan grup yang sesuai, ini memerintahkan tiga kelas karakter yang berbeda.Ini akan lebih ringkas daripada
re-seq
solusinya jika ada lebih banyak kelas karakter untuk ditangani karena ini hanya membutuhkan 5 karakter tambahan / grup57 1,
daripada 8 untuk ekspresi seperti#"[a-z]"
.sumber
Python 2,
14011710110099 byteSemua orang berkata, "Ewww!". Setidaknya itu bisa dibaca ... batuk bukan batuk
Cobalah online
sumber
R , 101 byte
Membuat vektor dengan az, AZ dan 0-9 dalam urutan yang diberikan dan menata ulang karakter dari string input agar sesuai dengan pemesanan ini.
Cobalah online!
sumber
J, 40 byte
sumber
Java 8,
221212193156 byteTentu saja saya harus mencoba menjawab tantangan saya sendiri. :) (Dan seperti biasa di Jawa.)
-28 byte disimpan berkat @cliffroot .
Penjelasan:
Coba di sini.
sumber
[^a-z]
[^A-Z]
[^0-9]
dan Anda dapat menggunakangetBytes()
bukannyatoCharArray()
^
(tidak) cukup bodoh ..;)replaceAll
panggilan berulangString c(int[]a,String z){String r[]={"[^a-z]","[^A-Z]","[^0-9]"},o="";for(byte c[],i=0;i<3;){c=z.replaceAll(r[a[i++]],"").getBytes();java.util.Arrays.sort(c);o+=new String(c);}return o;}