Napisz program, który przetwarza graficzną reprezentację splątanego łańcucha ASCII i decyduje, czy można go rozplątać w prostej pętli. Plątanina jest reprezentowana za pomocą znaków -
oraz |
do reprezentowania poziomych i pionowych segmentów oraz +
do reprezentowania narożników. Miejsca, w których ciąg przechodzi nad sobą, są reprezentowane w następujący sposób:
| |
------- ---|---
| |
(Horizontal segment on top) (Vertical segment on top)
Końce sznurka są połączone ze sobą; nie ma luźnych końców.
Jeśli twój program zdecyduje, że łańcucha nie można rozplątać w prostej pętli, powinien wypisać słowo KNOT
. W przeciwnym razie powinien wypisać słowo NOT
.
Jest to wyzwanie dla golfa , więc wygra najkrótsza ważna odpowiedź (mierzona w bajtach kodu źródłowego).
Granice
Wejście ASCII będzie się składać z maksymalnie 25 wierszy po 80 znaków. Możesz założyć, że wszystkie linie są wypełnione spacjami na tej samej długości.
Przykłady
Wejście:
+-------+ +-------+
| | | |
| +---|----+ +-------+
| | | | | |
+-------|------------|---+
| | | |
+---+ +---+
Wynik:
KNOT
Wejście:
+----------+
| |
| +--------------+
| | | |
| | +-|----+ |
| | | | | |
| +-----+ | |
| | | |
| +------|---+
| |
+---------------+
Wynik:
NOT
Bibliografia
źródło
Odpowiedzi:
Python 3,
457316306 bajtówCo?
Program najpierw przekształca węzeł w prostokątny schemat, który ma następujące ograniczenia:
Na przykład pierwszy przypadek testowy jest konwertowany na następujący prostokątny schemat:
które jednoznacznie reprezentujemy przez ciąg współrzędnych y segmentów pionowych od prawej do lewej:
Następnie szuka uproszczeń na prostokątnym schemacie, jak opisano w Iwan Dynnikow, „Prezentacje łuków linków. Monotoniczne uproszczenie ”, 2004 . Dynnikow udowodnił, że z dowolnego prostokąta schematu unknot jest sekwencja upraszczających ruchów, która kończy się na trywialnym schemacie. W skrócie, dozwolone ruchy obejmują:
Zobacz papier do zdjęć. To nie jest oczywiste twierdzenie; nie ma zastosowania, jeśli, powiedzmy, zastosowane zostaną ruchy Reidemeister, które nie zwiększają liczby przejść. Ale w przypadku powyższych rodzajów uproszczeń okazuje się to prawdą.
(Upraszczamy implementację, dopuszczając tylko segmenty pionowe, ale także umożliwiając transpozycję całego węzła w celu zamiany poziomej na pionową.)
Próbny
źródło