Tutti sanno cos'è la codifica run-length. È già stato oggetto di molte sfide di code-golf. Vedremo una certa variazione.
Esempio
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
Il numero tra parentesi indica il numero di volte in cui si è verificato il simbolo precedente. Nell'esempio, sono state codificate solo sequenze di 5 o più caratteri. Questo perché la codifica di corse di 4 o meno non migliora il conteggio dei caratteri.
Sfida
Scrivi una funzione / programma che implementa questa variazione della codifica della lunghezza della corsa, ma può anche codificare le corse di due simboli. Anche le serie di due simboli devono essere racchiuse tra parentesi. Un gruppo verrà inoltre racchiuso tra parentesi. Il programma deve accettare una stringa come input e generare la stringa modificata con modifiche che accorciano la stringa.
Esempio
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Appunti
111
non è stato codificato perché codificarlo (1(3)
) non è più breve.- La stringa si
444111
presenta 3 volte, quindi è codificata. 676767
non è stato codificato perché((67)(4))
è più lungo di prima.222222277777222222277777
non è stato codificato come((222222277777)(2))
. Perché? Perché222222277777
se stesso può essere ridotto a2(7)7(5)
.123123123123
non è codificato perché il tuo programma dovrebbe gestire corse di due simboli, non tre.
Questo è code-golf, quindi vince il codice più breve. Il pareggio è una presentazione anticipata.
Se ho perso qualcosa o se non sei sicuro di qualcosa, ti preghiamo di avvisarmi nei commenti.
441444144414
-> ((4414)(3))
?
4414
è tecnicamente una serie di 4. La mia formulazione è semplicemente pessima.
111111111
essere codificato come (1)(9)
?
67
s.