Recentemente iBug ha ottenuto una lunga barra in materiale composito, ma prezioso. Il bar è così lungo che iBug non può facilmente venderlo per i crediti, quindi vuole tagliarlo. La barra è realizzata con materiali così fragili e magici che, se una parte viene rotta, anche tutte le parti della barra realizzate con lo stesso materiale si rompono, rendendo difficile il taglio arbitrario.
iBug vuole tagliare la barra in più pezzi possibili. Ama anche programmi molto brevi e code-golf, quindi ha fatto un'analisi astratta del suo problema.
La barra magica di iBug è rappresentata come una stringa (o una matrice o una sequenza di caratteri se preferisci), in questo modo:
aaabbccccccbbbaaacccccaabbbaaaaa
Ogni lettera nella stringa rappresenta un materiale magico. La barra corrisponde sempre a RegEx ^\w*$
, quindi potrebbero esserci fino a 63 materiali nella barra. Una "parte" è una sequenza consecutiva di tutti i caratteri che non sono separati da spazi.
iBug vuole che tu scriva un programma che calcoli il numero massimo di parti che potrebbe ottenere, se zero o più set di caratteri vengono completamente rimossi (sostituiti da spazi) e comunichi a iBug quel numero.
Esempio 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Descrizione: se b
viene completamente rimosso dalla barra, iBug potrebbe ottenere 4 parti. Può anche ottenere 4 parti rimuovendo b
e c
, come mostrato di seguito
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
E questo è il numero massimo di parti che iBug può ottenere da questa barra
Esempio 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Descrizione: Rimuovendo solo il trattino basso, iBug può ottenere 6 parti dalla barra e questo è il massimo.
Esempio 3:
In: __________
Out: 1
Descrizione: cosa? Vuoi tagliare questo? È possibile ottenere 1 parte solo se non la si taglia affatto.
Esempio 4:
In:
Out: 0
Descrizione: Non c'è niente da tagliare, quindi zero.
Ci sono anche alcune regole a cui iBug vuole che i programmi obbediscano:
a iBug non piacciono le scappatoie standard e sono vietate.
Finché funziona, non è necessario che sia un programma completo. È accettata anche una funzione che accetta input da un parametro e fornisce output tramite il valore di ritorno.
Sono consentiti input e output flessibili. Il tuo programma o funzione può prendere una stringa, o una matrice di caratteri, o qualunque cosa tu trovi più facile da gestire. È possibile fornire l'output stampando il numero o restituendolo.
Esempi di casi di test (ma non limitati a questi)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Dato che si tratta di un codice-golf , vince il programma più breve (in byte) in ogni lingua!
Extra
iBug apprezza molto se puoi fornire una spiegazione per il tuo programma, anche se non influenza il tuo punteggio (è ancora lunghezza in byte).
2468
, per il secondo, rimuovi bd
.
2,4,6,8
dal primo e b,d,f
dal secondo.
123456789
5? E come faaaabcccdedaaabefda
6? Ottengo 2 e 4 rispettivamente per questi due casi di test.