Latar Belakang
Dalam C, ada fungsi untuk argumen command-line membantu parse: getopt
.
Getopt mengambil jumlah argumen ( argc
), daftar argumen ( argv
), dan string yang mewakili opsi yang harus diambil oleh program (optstring
).
String pilihan (optstring
) adalah serangkaian karakter opsi yang masing-masing diikuti oleh satu titik dua (untuk opsi yang membutuhkan argumen), dua titik dua (untuk opsi dengan argumen opsional), atau nol titik dua (untuk opsi tanpa argumen).
Sebagai contoh: seseorang dapat menggunakan string opsi berikut untuk widget baru perusahaan mereka.
"v::x:hy:S:G::dns:f::"
Tapi itu terlihat mengerikan! Pilihannya semua dicampur bersama! String opsi ini akan terlihat jauh lebih baik jika diurutkan:
"f::G::v::S:s:x:y:dhn"
Spesifikasi
Input akan berupa string yang cocok dengan ekspresi reguler
([A-Za-z]:{0,2})+
Anda harus mengambil input sebagai string atau daftar karakter.
Anda harus menampilkan string yang diurutkan dengan metode yang dirinci di bawah ini.
Anda tidak perlu menangani input kosong.
Anda tidak perlu menangani input dengan opsi berulang dari jenis yang sama (
"aa"
tidak valid, tetapi"aa:a::"
valid).
Metode Penyortiran
Dalam string opsi yang diurutkan:
Karakter diikuti oleh dua titik dua didahulukan, disortir berdasarkan abjad, dengan huruf besar sebelum huruf kecil masing-masing (yaitu "aBb", bukan "Bab").
Kemudian adalah karakter dengan satu titik dua, diurutkan berdasarkan abjad, dengan huruf besar sebelum huruf kecil masing-masing.
Terakhir adalah karakter tanpa titik dua, diurutkan berdasarkan abjad, dengan huruf besar sebelum huruf kecil masing-masing.
Aturan
- Celah Standar dilarang.
Mencetak gol
Ini adalah kode-golf , jadi jawaban terpendek dalam byte di setiap bahasa akan menang.
Contohnya
# "input" => "output"
"v::x:hy:S:G::dns:f::" => "f::G::v::S:s:x:y:dhn"
"aa:a::" => "a::a:a"
"B:" => "B:"
"Confusio:n::" => "n::o:Cfinosu"
"Confusio:n:" => "n:o:Cfinosu"
"m:qW:X:xc:vViI" => "c:m:W:X:IiqVvx"
"V:omo:V" => "o:V:moV"
"agg:ra:va::ting::" => "a::g::a:g:aginrtv"
"input" => "inptu"
Kasing panjang (312 karakter)
Input Tidak Valid (Anda tidak harus menangani):
"gg" (duplicated option)
"" (empty string)
":w:" (first colon isn't after a character)
"x:y:0:fhn" ('0' is not alphabetic)
"A:::" (3 colons is invalid)
agg:ra:va::ting::
Hancurkan milikku heh ... Ironis.Jawaban:
Sekam , 11 byte
Cobalah online!
Penjelasan
sumber
Retina , 47 byte
Cobalah online!
Bagian tersulit sebenarnya adalah pengurutan huruf, karena fitur "sort-by" Retina tidak memiliki jenis case-insensitive (jadi secara default ia mengurutkan huruf besar di depan semua huruf kecil). Untuk mengatasi ini, saya harus memasukkan salinan huruf kecil dari setiap karakter untuk melakukan penyortiran dan kemudian menyingkirkannya lagi.
sumber
tEsTiNg
dengan metode penyortiran Anda di atas mengurutkan pasangan hurufeEggiinNsstTtt → EgiNsTt
bukaneEggiinNsstttT → EgiNstT
(huruf besar selalu ditempatkan sebelum huruf kecil).Python 2 ,
10090 byteCobalah online!
sumber
Jelly , 14 byte
Cobalah online!
Program lengkap.
sumber
Japt ,
1716 byteUji secara online!
Bagaimana itu bekerja
Katakanlah string input
v:vg::G:G::o:
. Bagian pertama dari kode,,f".:*"
menemukan semua kecocokan dari regex/.:*/g
, yang cocok dengan karakter yang diikuti oleh sejumlah titik dua. Ini membagi input menjadi[v:, v, g::, G:, G::, o:].
The
ñ
metode pada array macam setiap array seakan perubahan tertentu diterapkan, tanpa benar-benar menerapkan mereka (sepertisorted(array, key=<whatever>)
di Python). Jadi kita perlu mengurutkan:Z{ZiZéJ v}
adalah cara terpendek yang dapat saya temukan untuk melakukan ini:Ini paling mudah dipahami dengan beberapa contoh:
Nilai asli kemudian diurutkan secara leksikografis oleh tombol-tombol ini. Hasilnya adalah yang
::gG::
diurutkan ke depan, lalu::gg::
, dan seterusnya, memberi kita[G::, g::, G:, o:, v:, v]
, yang kemudian bergabung denganq
dan dikeluarkan.sumber
JavaScript (ES6), 93 byte
sumber
Perl 5 , 69 + 1 (
-n
) = 70 byteCobalah online!
sumber
=~/A-Z/
ke==/A-Z/
harus memperbaiki masalah.Haskell , 124 byte
Cobalah online!
sumber
Bash,
232213 bytecoba online
sumber
C # (.NET Core) , 152 byte
Cobalah online!
Tidak Disatukan:
Ide dasarnya adalah untuk mengulangi semua 156 opsi yang mungkin dan memeriksa keberadaannya. Jika ditemukan, tambahkan ke output, dan hapus dari input.
sumber