Jika Anda mengurutkan string, Anda biasanya akan mendapatkan sesuatu seperti:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Ya, itu adalah kalimat pertama yang disortir.
Seperti yang Anda lihat, ada banyak karakter berulang, aa
, eee
, ttttt
, 9 ruang dan sebagainya.
Jika kita menambah 128
nilai ASCII dari duplikat pertama, 256
ke yang kedua, 384
ke yang ketiga dan seterusnya, urutkan lagi dan hasilkan string baru (modulus 128 untuk mendapatkan karakter yang sama kembali) kita mendapatkan string:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Perhatikan satu spasi utama dan 4 spasi tambahan).
String "berurutan diurutkan" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Mungkin lebih mudah untuk memvisualisasikan ini jika kita menggunakan string dengan angka di dalamnya. String 111222334
akan ketika "diurutkan" menjadi: 123412312
.
Tantangan:
Tidak mengherankan, tantangannya adalah menulis kode yang mengurutkan string sesuai dengan deskripsi di atas.
Anda dapat mengasumsikan bahwa string input hanya akan berisi karakter ASCII yang dapat dicetak dalam kisaran 32-126 (ruang untuk tilde).
Kasus uji:
**Test cases:**
*:Tacest*es*s*
If you sort a string you'll typically get something like:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
Hello, World!
!,HWdelorlol
#MATLAB, 114 bytes
#,14ABLMTbesty 1A
f=@(s)[mod(sort(cell2mat(cellfun(@(c)c+128*(0:nnz(c)-1),mat2cell(sort(s),1,histc(s,unique(s))),'un',0))),128),''];
'()*+,-0128:;=@[]acdefhilmnoqrstuz'(),0128@acefilmnorstu'(),12celmnostu'(),12celnstu(),clnst(),cls(),cs(),()()()()
Ini adalah kode-golf , jadi kode terpendek di setiap bahasa yang dihitung dalam byte akan memenangkan ref .
{'S', 'g', 'i', 'n', 'r', 't'}
dalam Python, karena cara "normal" untuk melakukannya adalah "String"
.
{'a','b'}
tidak diterima di Matlab karena Anda dapat menambahkan karakter untuk masing-masing karakter seperti ini: {'aa','b'}
. Input dan output Anda harus dalam format yang sama.