W tym wyzwaniu otrzymasz ciąg alfabetyczny jako dane wejściowe. Zdefiniujemy „anti-string” danego wejścia, który będzie łańcuchem, a wielkość liter wszystkich liter będzie odwrócona. Na przykład
AaBbbUy -> aAbBBuY
Powinieneś napisać program, który pobiera ciąg jako dane wejściowe i szuka najdłuższego ciągłego podciągu, którego anty-ciąg jest również ciągłym podciągiem. Dwa podciągi nie powinny się pokrywać.
Jako przykład, jeśli podano ci ciąg
fAbbAcGfaBBagF
Pogrubione fragmenty byłyby najdłuższą parą anty-sznurkową.
Twój program powinien po znalezieniu pary zwinąć je w osobne znaki. Powinien to zrobić, usuwając wszystkie oprócz pierwszego znaku każdego podłańcucha. Na przykład ciąg powyżej
fAbbAcGfaBBagF
stanie się
fAcGfagF
Twój program powinien następnie powtarzać ten proces, aż najdłuższa para przeciwdziałająca strunom będzie miała jeden znak lub będzie krótsza.
Na przykład praca z tym samym łańcuchem to nowa najdłuższa para po zwinięciu
fAcGfagF
Więc ponownie zwiniemy ciąg
fAcGag
Teraz łańcuch nie może być dalej zwinięty, więc powinniśmy go wyprowadzić.
W przypadku remisu między parami kandydatów (przykład AvaVA
) możesz dokonać redukcji ( AaA
lub AvV
, ale nie Aa
).
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Motywacje
Chociaż ten problem może wydawać się arbitralny, w rzeczywistości jest to problem, który napotkałem podczas tworzenia kodu do przetwarzania podstawowych wielokątów. Ten proces można wykorzystać do zredukowania podstawowego wielokąta do mniejszego n- gona. Po wypróbowaniu pomyślałem, że będzie to fajny mały golf.
źródło
aaaAAAaaa -> aAaaa
?Odpowiedzi:
Perl,
6461 bajtówObejmuje
+1
dlap
źródło
JavaScript (ES6), 200 bajtów
Wykorzystuje tablice znaków dla I / O.
Wypróbuj online!
źródło
Siatkówka , 119 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Zduplikuj dane wejściowe i odwróć obudowę pierwszej kopii.
Jeśli w ogóle nie ma żadnych napisów, usuń odwrócony duplikat.
Wymień wszystkie możliwe zwinięte anty-stringi.
Posortuj je według długości, wybierz najkrótszą (tj. Najdłuższą anty-strunę) i powtarzaj, aż wszystkie anty-struny zostaną zwinięte.
źródło
Python 3 ,
189181 bajtówPodziękowania dla Jonathana Frecha za uczynienie go czystym jedno-liniowym.
Wypróbuj online!
Moja własna wersja, teraz przestarzała (189 bajtów):
Wypróbuj online!
any()
wczesne wykrywanie zagnieżdżonych pętli iset()
modyfikowalny globalny obiekt użyteczny w zrozumieniu. Reszta to po prostu prosta implementacja wymagaństr.swapcase
.Python 2 , 160 bajtów
Wypróbuj online!
Okazuje się, że regularne zagnieżdżanie dla pętli z wczesnym przełamywaniem
return
jest znacznie krótsze niż „sprytna” sztuczkaany
.źródło
set
jako domyślna funkcja nie będzie kolidować z kolejnymi wywołaniami, ponieważ myślę, że Twój kod w pełni wyrzuca zestaw, aby był pusty.x
to nie pozostanie puste. W tej chwili myślę, że jest zgodny.C (gcc) ,
240238227225222216 bajtówjedenaścietrzynaście bajtów; grałb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
w golfab|=abs(S[p+m]-S[q+m])-32
dob|=32-S[p+m]+S[q+m]&63
.for(...;...;p++)S[p+1]=S[p+L];
w golfafor(...;...;S[++p]=S[p+L]);
.Wypróbuj online!
źródło
Python 2 , 180 bajtów
Wypróbuj online!
źródło
Stax , 30 bajtów
Uruchom i debuguj
Odpowiada to reprezentacji ascii tego samego programu.
Wykorzystuje podejście wyrażenia regularnego. Wielokrotnie zastępuje ciąg znaków regularnych. Buduje je z każdego ciągłego podciągu bieżącej wartości. Na przykład dla danych wejściowych
fAbbAcGfaBBagF
jednym z podciągów jestAbbA
, w którym to przypadku wyrażenie regularneAbbA(.*)aBBa
zostanie zastąpione przezA$1a
.źródło
Wolfram Language (Mathematica) , 148 bajtów
Wypróbuj online!
źródło
Japt
-h
, 33 bajtySpróbuj
źródło