Data una stringa, il tuo compito è comprimerlo in una struttura a zig-zag come descritto di seguito.
Piegare in uno zigzag
Prenderemo la stringa "Mississippi"come esempio:
Innanzitutto, genera il prefisso più lungo composto solo da caratteri univoci:
MisQuando si raggiunge il primo carattere duplicato C , ignorarlo e generare il prefisso più lungo costituito da caratteri univoci della stringa rimanente (
issippi) in verticale, sotto la prima occorrenza di C :Mis i sRipetere il processo, alternando la continuazione orizzontale e verticale. Ma ora fai attenzione (al passaggio 1) per continuare a emettere in orizzontale dall'ultima occorrenza del carattere duplicato, che non è necessariamente l'ultimo, come in questo caso:
Mis i sip ----- Mis i sip i
Regole
- La stringa conterrà solo caratteri ASCII stampabili, ma non conterrà alcun tipo di spazio bianco.
- Puoi competere in qualsiasi linguaggio di programmazione e prendere input e fornire output attraverso qualsiasi metodo standard e in qualsiasi formato ragionevole 1 , tenendo presente che queste scappatoie sono vietate per impostazione predefinita. Questo è code-golf , quindi vince l'invio più breve (in byte) per ogni lingua .
- 1 Input: String / Elenco di caratteri / qualunque altra cosa la tua lingua usi per rappresentare le stringhe. Output: stringa multilinea, elenco di stringhe che rappresentano linee o elenco di elenchi di caratteri / stringhe di lunghezza 1, ma, se possibile, includi una versione stampata del codice nella tua risposta.
- Per quanto riguarda gli spazi aggiuntivi, l'output può contenere:
- Newline leader / finali
- Spazi finali su ogni riga / alla fine
- Un numero consistente di spazi iniziali su ogni riga
- Devi iniziare a produrre in orizzontale, potresti non iniziare in verticale.
Casi test
ingressi:
"Perfetto" "Mississippi" "stranezze" "Trivialities" "Cthulhu" "PPCG" "POpOpOpOpOpOp" "ABCCCE" "ABCCCECCEEEEC" "Abcdcebffg" "ABCA" "AAAAAAAA"
Uscite corrispondenti:
Perf c t
Mis
io
sorso
io
od ies t
Triv un' l ies t
Cthul u
P C sol
pO Opo pop p
ABC C E
ABC CCE E CE
abcd e B fg
abc
UN aa UN
ABCcde
"A" ≠ "a". L'uscita per ABCcdesarebbe soloABCcde
AAAAAAAA
b, dato che dovresti considerare solo i duplicati nella stringa rimanente , cioè dopo "branching". Una volta raggiunto il secondoc, si genera il prefisso più lungo di caratteri univoci della stringa rimanente , che èebffg(quindi in uscita inebfverticale e proseguendo in senso orizzontale dopo quello), quindi non è necessario preoccuparsi dei caratteri della parte della stringa che era già stato emesso prima di cambiare orientamento. Se ti sembra ancora poco chiaro, farò un altro esempio dettagliato con questo test.