Jeśli posortujesz ciąg, zwykle otrzymasz coś takiego:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Tak, to było pierwsze posortowane zdanie.
Jak widać, istnieje wiele powtarzających się znaków aa
, eee
, ttttt
, 9 miejsc i tak dalej.
Jeśli dodamy 128
do wartości ASCII pierwszego duplikatu, 256
do drugiego, 384
do trzeciego i tak dalej, posortuj go ponownie i wyślij nowy ciąg (moduł 128, aby odzyskać te same znaki), otrzymamy ciąg:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Zwróć uwagę na pojedynczą spację wiodącą i 4 spacje końcowe).
Łańcuch jest "sortowane kolejno" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Wizualizacja tego może być łatwiejsza, jeśli użyjemy łańcucha z cyframi. Ciąg 111222334
będzie gdy „posortowane” być: 123412312
.
Wyzwanie:
Nic dziwnego, że wyzwaniem jest napisanie kodu sortującego ciąg zgodnie z powyższym opisem.
Możesz założyć, że ciąg wejściowy będzie zawierał tylko drukowalne znaki ASCII w zakresie 32-126 (spacja do znaku tyldy).
Przypadki testowe:
**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(),()()()()
Jest to kod-golf , więc najkrótszy kod w każdym języku liczona w bajtach wygra ref .
{'S', 'g', 'i', 'n', 'r', 't'}
w Pythonie, ponieważ „normalnym” sposobem na to jest "String"
.
{'a','b'}
nie jest akceptowana w Matlab ponieważ można dodać znak do każdego z bohaterów, takich jak ten: {'aa','b'}
. Twoje dane wejściowe i wyjściowe muszą być w tym samym formacie.