Spędziłem trochę czasu na tej stronie i zacząłem cieszyć się możliwie najkrótszym czasem. To może być powód, dla którego ostatnio jestem obrażony ciągami zawierającymi te same znaki więcej niż jeden raz. Twoim zadaniem jest napisanie funkcji lub programu, który skondensuje dany ciąg znaków zgodnie z następującymi zasadami:
Rozpocznij od 0-kondensacji , czyli poszukaj pierwszej (najbardziej lewej) pary tych samych znaków z 0 innymi znakami między nimi. Jeśli taka para zostanie znaleziona, usuń jeden z dwóch znaków i ponownie uruchom algorytm, wykonując kolejną 0-kondensację . Jeśli nie znaleziono takiej pary, przejdź do następnego kroku. Przykłady:
programming-C0->programing
aabbcc-C0->abbcc
test-C0->testNastępnie wykonaj 1-kondensację , czyli poszukaj pierwszej pary takich samych znaków z 1 inną postacią między nimi. Jeśli taka para zostanie znaleziona, usuń jedną z nich i wszystkie znaki między nimi i uruchom ponownie z zerową kondensacją . Jeśli nie znaleziono takiej pary, przejdź do następnego kroku. Przykłady:
abacac-C1->acac
java-C1->jaKontynuuj od 2-kondensacji i tak dalej do n-kondensacji, gdzie n jest długością oryginalnej struny, za każdym razem, gdy wznawia się po kondensacji, usuwa niektóre litery. Przykłady:
programing-C2-> -C3-praming
abcdafg>afg
Powstały ciąg jest nazywany skondensowanym i zawiera każdy znak maksymalnie raz.
Wkład:
Ciąg małych liter znaków drukowalnych ascii.
Wydajność:
Skondensowane ciąg według powyższych zasad.
Przykłady:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
Szczegółowe przykłady wyjaśniające, jak działa algorytm:
fnabnfun -C0-> fnabnfun -C1-> fnabnfun -C2-> fnfun -C0-> fnfun -C1-> fun -C0-> fun
-C1-> fun -C2-> ... -C8-> fun
abcbaccbabcb -C0-> abcbacbabcb -C0-> abcbacbabcb -C1-> abacbabcb -C0-> abacbabcb
-C1-> acbabcb -C0-> acbabcb -C1-> acbcb -C0-> acbcb -C1-> acb -C0-> acb
-C1-> ... -C12-> acb
Twoje podejście nie musi implementować algorytmu z góry, o ile rozwiązanie i algorytm zwracają ten sam wynik dla wszystkich dozwolonych danych wejściowych. To wyzwanie dla golfa .
Dzięki @Linus za pomocne komentarze w piaskownicy!