Якщо ви сортуєте рядок, ви отримаєте щось на зразок:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Так, це було перше відсортоване речення.
Як ви можете бачити, є багато символів, що повторюються, aa
, eee
, ttttt
, 9 простору і так далі.
Якщо ми додамо 128
до ASCII-значення першого дублікату, 256
до другого, 384
третього тощо, сортуємо його ще раз і виводимо нову рядок (модуль 128, щоб повернути ті самі символи назад), отримуємо рядок:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Зверніть увагу на один провідний простір та 4 проміжки).
Рядок "послідовно упорядковано" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Візуалізувати це може бути простіше, якщо ми будемо використовувати рядок з цифрами в ньому. Рядок 111222334
буде , коли «відсортоване» бути: 123412312
.
Виклик:
Не дивно, що завдання полягає в тому, щоб написати код, який сортує рядок відповідно до описаного вище.
Можна припустити, що вхідний рядок буде містити тільки друковані символи ASCII в діапазоні 32-126 (пробіл до тильди).
Тестові приклади:
**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(),()()()()
Це код-гольф , тому найкоротший код на кожній мові, що рахується в байтах, виграє посилання .
{'S', 'g', 'i', 'n', 'r', 't'}
в Python, оскільки "нормальний" спосіб це зробити "String"
.
{'a','b'}
не буває приємний у Matlab , так як ви можете додати символ до кожного з персонажів , як це: {'aa','b'}
. Введення та вихід повинні бути в одному форматі.