Если вы сортируете строку, вы обычно получаете что-то вроде:
':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'}
. Ваш ввод и вывод должны быть в одном формате.