iBug niedawno dostał długi pasek wykonany z kompozytowych, ale cennych materiałów. Pasek jest tak długi, że iBug nie może łatwo sprzedać go za kredyty, więc chce go zmniejszyć. Pręt jest wykonany z tak delikatnych i magicznych materiałów, że jeśli część zostanie złamana, wszystkie części pręta wykonane z tego samego materiału również pękną, co utrudni dowolne cięcie.
iBug chce pokroić pasek na jak najwięcej elementów. Uwielbia także bardzo krótkie programy i grę w golfa, więc dokonał abstrakcyjnej analizy swojego problemu.
Magiczny pasek iBuga jest reprezentowany jako ciąg (lub tablica lub sekwencja znaków, jeśli wolisz):
aaabbccccccbbbaaacccccaabbbaaaaa
Każda litera w ciągu reprezentuje jeden magiczny materiał. Pasek zawsze odpowiada RegEx ^\w*$, więc w pasku może znajdować się do 63 materiałów. „Część” to kolejna sekwencja dowolnych znaków, które nie są oddzielone spacjami.
iBug chce, abyś napisał program, który oblicza maksymalną liczbę części, jakie mógłby uzyskać, jeśli zero lub więcej zestawów znaków zostanie całkowicie usuniętych (zastąpionych spacjami), i powie iBug tę liczbę.
Przykład 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Opis: Jeśli bzostanie całkowicie usunięty z paska, iBug może uzyskać 4 części. Może również zdobyć 4 części, usuwając bi c, jak pokazano poniżej
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
I to jest maksymalna liczba części, które iBug może uzyskać z tego paska
Przykład 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Opis: Usuwając tylko podkreślenie, iBug może uzyskać 6 części z paska i to jest maksimum.
Przykład 3:
In: __________
Out: 1
Opis: Co? Chcesz to wyciąć? Można uzyskać tylko 1 część, jeśli w ogóle jej nie wycinasz.
Przykład 4:
In:
Out: 0
Opis: Nie ma co wycinać, więc zero.
Istnieją również pewne zasady, które iBug chce, aby programy były przestrzegane:
iBug nie lubi standardowych luk i są one zabronione.
Tak długo, jak działa, nie musi być pełnym programem. Akceptowana jest również funkcja, która pobiera dane wejściowe z parametru i podaje dane wyjściowe za pomocą wartości zwracanej.
Dozwolone są elastyczne wejścia i wyjścia. Twój program lub funkcja może przyjmować ciąg znaków, tablicę znaków lub cokolwiek, co uważasz za najłatwiejsze w obsłudze. Możesz podać dane wyjściowe, drukując numer lub zwracając go.
Przykładowe przypadki testowe (ale nie tylko)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Ponieważ jest to golf golfowy , wygrywa najkrótszy program (w bajtach) w każdym języku!
Dodatkowy
iBug bardzo docenia, czy możesz wyjaśnić swój program, nawet jeśli nie wpływa to na twoją punktację (nadal ma długość w bajtach).
2468, dla drugiego, usuń bd.
2,4,6,8z pierwszego i b,d,fdrugiego.
1234567895? A w jaki sposóbaaabcccdedaaabefdadaje 6? Dostaję odpowiednio 2 i 4 dla tych dwóch przypadków testowych.