Si ordena una cadena, generalmente obtendrá algo como:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Sí, esa fue la primera oración ordenada.
Como se puede ver, hay una gran cantidad de caracteres repetidos, aa
, eee
, ttttt
, 9 espacios y así sucesivamente.
Si agregamos 128
al valor ASCII del primer duplicado, 256
al segundo, 384
al tercero y así sucesivamente, ordénelo nuevamente y genere la nueva cadena (módulo 128 para recuperar los mismos caracteres) obtenemos la cadena:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Tenga en cuenta el espacio inicial único y los 4 espacios finales).
La cadena se "ordenadas secuencialmente" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Puede ser más fácil visualizar esto si usamos una cadena con dígitos. La cadena 111222334
será cuando "ordenados" ser: 123412312
.
Reto:
Para sorpresa, el desafío es escribir un código que clasifique una cadena de acuerdo con la descripción anterior.
Puede suponer que la cadena de entrada contendrá solo caracteres ASCII imprimibles en el rango 32-126 (espacio para tilde).
Casos de prueba:
**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(),()()()()
Este es el código de golf , por lo que el código más corto en cada idioma contado en bytes ganará ref .
{'S', 'g', 'i', 'n', 'r', 't'}
en Python, ya que la forma "normal" de hacerlo es "String"
.
{'a','b'}
no se acepta en Matlab ya que se puede añadir un carácter a cada uno de los personajes como este: {'aa','b'}
. Su entrada y salida deben estar en el mismo formato.