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 128do wartości ASCII pierwszego duplikatu, 256do drugiego, 384do 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 111222334bę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.