Czynnością, którą czasami robię, gdy się nudzę, jest pisanie kilku znaków w pasujących parach. Następnie rysuję linie (ponad szczytami nigdy poniżej), aby połączyć te postacie. Na przykład mógłbym napisać a następnie narysować linie jako:
Albo mógłbym napisać
Po narysowaniu tych linii próbuję narysować zamknięte pętle wokół kawałków, aby moja pętla nie przecięła żadnej z linii, które właśnie narysowałem. Na przykład w pierwszej jedyną pętlą, którą możemy narysować, jest wokół całej rzeczy, ale w drugiej możemy narysować pętlę wokół tylko s (lub wszystkiego innego)
Jeśli zastanowimy się nad tym przez chwilę, okaże się, że niektóre ciągi znaków można narysować tylko po to, aby zamknięte pętle zawierały wszystkie litery lub żadną z nich (jak w naszym pierwszym przykładzie). Nazwiemy takie ciągi dobrze połączonymi ciągami.
Pamiętaj, że niektóre ciągi znaków można narysować na wiele sposobów. Na przykład można narysować na dwa następujące sposoby (i nie uwzględniono trzeciego):
Jeśli jeden z tych sposobów można narysować w taki sposób, że można utworzyć zamkniętą pętlę zawierającą niektóre znaki bez przecinania którejkolwiek linii, łańcuch nie jest dobrze połączony. (więc nie jest dobrze powiązane)
Zadanie
Twoim zadaniem jest napisanie programu identyfikującego dobrze powiązane ciągi. Twoje dane wejściowe będą składać się z łańcucha, w którym każdy znak pojawia się parzystą liczbę razy, a twój wynik powinien być jedną z dwóch różnych spójnych wartości, jedną, jeśli łańcuchy są dobrze połączone, a drugą w przeciwnym razie.
Ponadto program musi być dobrze połączony ciąg sens
Każda postać pojawia się w twoim programie parzystą liczbę razy.
Powinien generować prawdziwą wartość po przekazaniu.
Twój program powinien być w stanie wygenerować prawidłowe dane wyjściowe dla dowolnego łańcucha składającego się ze znaków z drukowalnego ASCII lub własnego programu. Każda postać pojawia się parzystą liczbę razy.
Odpowiedzi będą oceniane jako ich długości w bajtach, przy czym mniej bajtów jest lepszym wynikiem.
Wskazówka
Ciąg nie jest dobrze połączony, jeśli istnieje ciągły niepusty pusty podciąg, tak że każdy znak pojawia się w tym podciągu parzystą liczbę razy.
Przypadki testowe
abcbac -> True
abbcac -> False
bbbb -> False
abacbc -> True
abcbabcb -> True
abcbca -> False
there
.
abcbca -> False
.