Si vous triez une chaîne, vous obtiendrez généralement quelque chose comme:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Oui, c'était la première phrase triée.
Comme vous pouvez le voir, il y a beaucoup de caractères répétés, aa
, eee
,ttttt
, 9 places et ainsi de suite.
Si nous ajoutons 128
à la valeur ASCII du premier doublon, 256
au second, 384
au troisième et ainsi de suite, trions-le à nouveau et sortons la nouvelle chaîne (module 128 pour récupérer les mêmes caractères), nous obtenons la chaîne:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Notez le seul espace de tête et les 4 espaces de fin).
La chaîne est "ordonnée de manière séquentielle" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Il pourrait être plus facile de visualiser cela si nous utilisons une chaîne contenant des chiffres. La chaîne 111222334
sera quand « triée » être: 123412312
.
Défi:
Sans surprise, le défi est d'écrire un code qui trie une chaîne selon la description ci-dessus.
Vous pouvez supposer que la chaîne d'entrée ne contiendra que des caractères ASCII imprimables compris entre 32 et 126 (espace au tilde).
Cas de test:
**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(),()()()()
Il s'agit de code-golf , donc le code le plus court dans chaque langue compté en octets gagnera ref .
{'S', 'g', 'i', 'n', 'r', 't'}
en Python, car la façon "normale" de le faire est "String"
.
{'a','b'}
ne sont pas acceptés dans Matlab puisque vous pouvez ajouter un caractère à chacun des personnages comme celui - ci: {'aa','b'}
. Vos entrées et sorties doivent être au même format.