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 b
zostanie całkowicie usunięty z paska, iBug może uzyskać 4 części. Może również zdobyć 4 części, usuwając b
i 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).
123456789
5? A w jaki sposóbaaabcccdedaaabefda
daje 6? Dostaję odpowiednio 2 i 4 dla tych dwóch przypadków testowych.2468
, dla drugiego, usuńbd
.2,4,6,8
z pierwszego ib,d,f
drugiego.Odpowiedzi:
Haskell ,
73 7170 bajtówDzięki Laikoni za uratowanie 1 bajtu!
Wypróbuj online!
źródło
maximum$(length$words x):
można skrócić domaximum$length(words x):
.JavaScript (ES6),
10990 bajtówNieco powolny w
123456789
przypadku testowym. Poprzednia 109-bajtowa odpowiedź nie była ograniczona do!/\s/
:źródło
Python 2 ,
1119372 bajty-21 bajtów dzięki Kirill L.
Wypróbuj online!
źródło
Galaretka ,
1311 bajtówZbyt wiele 2-bajtowych instrukcji-2 dzięki Zgarb (użyj produktu zewnętrznego szybko
þ
>. <)Monadyczny link akceptujący listę znaków i zwracający nieujemną liczbę całkowitą.
Wypróbuj online!
W jaki sposób?
Dla każdego podsekwencji danych wejściowych (zestawy, które możemy usunąć plus zbędne ekwiwalenty) pobiera listę istnienia, aby zidentyfikować, które są usuwane, a następnie skutecznie określa liczbę pozostałych zer i daje maksimum. Ostatnia część działa w nieco dziwny sposób, ponieważ uważam, że jest bardziej golfowa niż bardziej naiwne alternatywy - wyszukuje przebiegi jako
[element, count]
pary, neguje identyfikowanie zer jako jedności, sumy wyszukuje maksimum, a następnie bierze głowę (suma elementów zamiast liczb ).źródło
€Đ€
może byćþ
.Ruby ,
98 89 75 6461 bajtówWypróbuj online!
mniejszy i wolniejszy niż wcześniej!
Zasadniczo port odpowiedzi JavaScript na @ Neil
Nieoznaczony i opatrzony adnotacjami
Wypróbuj online!
źródło
Łuska ,
1211 bajtówWypróbuj online! Działa to brutalną siłą i jest dość wolne. Dodaj
u
do prawego końca, aby działał szybciej, bez zmiany semantyki.Wyjaśnienie
źródło
Perl 5 , (starsze wersje)
-p -I.
,524943 bajtówLiczenie w starym stylu:
+3
dla-p
:46
bajtów (ponieważ musi być w programie, nie można go uruchomić przy użyciu-e
)barsplit.pl
:Uruchom z ciągiem na STDIN:
Wypróbuj online!
-I.
Opcja jest tam do tej pracy także na ostatnich perls gdzie domyślnie.
nie jest bardziej w@INC
. W starszych wersjach perla ta opcja nie jest potrzebna. Przetestowałem to na starszym komputerze, który wciąż miałperl 5.20
, więc wynik jest oparty na tym (w przeciwnym razie należy również liczyć się.
argument-I
)Wersja szybka (
49
bajty):źródło
Wolfram Language (Mathematica) , 77 bajtów
Wypróbuj online!
źródło