Se você classificar uma string, normalmente obterá algo como:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Sim, essa foi a primeira frase classificada.
Como você pode ver, há um monte de caracteres repetidos, aa
, eee
, ttttt
, 9 espaços e assim por diante.
Se adicionarmos 128
ao valor ASCII da primeira duplicata, 256
da segunda e 384
da terceira e assim por diante, classificá-la novamente e emitir a nova string (módulo 128 para recuperar os mesmos caracteres), obteremos a string:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Observe o espaço à esquerda e os 4 espaços à direita).
A string é "sequencialmente ordenados" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Talvez seja mais fácil visualizar isso se usarmos uma string com dígitos. A corda 111222334
vai quando "ordenada" ser: 123412312
.
Desafio:
Para nenhuma surpresa, o desafio é escrever um código que classifique uma string de acordo com a descrição acima.
Você pode assumir que a sequência de entrada conterá apenas caracteres ASCII imprimíveis no intervalo 32-126 (espaço para til).
Casos de teste:
**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(),()()()()
Isso é código-golfe , então o código mais curto em cada idioma contado em bytes ganhará ref .
{'S', 'g', 'i', 'n', 'r', 't'}
em Python, já que a maneira "normal" de fazê-lo é "String"
.
{'a','b'}
não é aceito em Matlab, pois você pode adicionar um personagem para cada um dos personagens como este: {'aa','b'}
. Sua entrada e saída devem estar no mesmo formato.