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.
aaaAAAaaa -> aAaaa
?