Se ordini una stringa in genere otterrai qualcosa del tipo:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
Sì, questa è stata la prima frase ordinata.
Come si può vedere, ci sono un sacco di caratteri ripetuti, aa
, eee
, ttttt
, 9 posti e così via.
Se aggiungiamo 128
al valore ASCII del primo duplicato, 256
al secondo, 384
al terzo e così via, riordiniamo di nuovo e produciamo la nuova stringa (modulo 128 per recuperare gli stessi caratteri) otteniamo la stringa:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(Nota il singolo spazio iniziale e i 4 spazi finali).
La stringa è "in sequenza ordinata" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, <space>
, <space>
.
Potrebbe essere più semplice visualizzarlo se utilizziamo una stringa con cifre al suo interno. La stringa 111222334
sarà quando "ordinato" essere: 123412312
.
Sfida:
Non sorprende, la sfida è scrivere un codice che ordina una stringa in base alla descrizione sopra.
Si può presumere che la stringa di input conterrà solo caratteri ASCII stampabili nell'intervallo 32-126 (spazio alla tilde).
Casi 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(),()()()()
Questo è code-golf , quindi il codice più breve in ogni lingua contata in byte vincerà ref .
{'S', 'g', 'i', 'n', 'r', 't'}
in Python, poiché il modo "normale" di farlo è "String"
.
{'a','b'}
non è accettato in Matlab in quanto è possibile aggiungere un carattere a ciascuno dei personaggi come questo: {'aa','b'}
. L'input e l'output devono essere nello stesso formato.