पायथन 3, 457 316 306 बाइट्स
E=enumerate
V={'+'}
Q=[[(-j,i,k)for i,u in E(open(0))for j,v in E(u)for k in[{v}&V,'join'][u[j:j+2]=='|-']]]
while Q:
a,b,c,d,*e=A=tuple(x//2for y,x in sorted((y,x)for x,y in E(Q.pop())));e or exit('NOT')
if{A}-V:V|={A};Q+=[[c,d,a,b]+e,A,A[2:]+A[:2]][a<c<b<d:][c<a<d<b:]
if b==d:Q=[[a,c]+e]
exit('KNOT')
है ना?
कार्यक्रम पहले गाँठ को एक आयताकार आरेख में परिवर्तित करता है, जिसमें निम्नलिखित प्रतिबंध हैं:
- कोई भी दो ऊर्ध्वाधर या क्षैतिज खंड एक ही रेखा पर नहीं होते हैं।
- क्षैतिज खंड पर कोई ऊर्ध्वाधर खंड पार नहीं होता है।
उदाहरण के लिए, पहला परीक्षण मामला निम्नलिखित आयताकार आरेख में बदल जाता है:
+-----------+
| |
| | +-------+
| | | |
| +-------+ | | |
| | | | | |
| | +---+ | |
| | | | | |
| | | +---+ |
| | | |
| | | +-------+
| | | | | |
+-----+ | | | |
| | | | | |
| +---+ | | |
| | | | | |
| | +-------------+ | |
| | | | | |
| | | +---+ |
| | | | | |
| | | | +---+
| | | |
+-+ | |
| |
+-+
जो हम ऊर्ध्वाधर खंडों के y निर्देशांक के क्रम से विशिष्ट रूप से प्रतिनिधित्व करते हैं, दाएं से बाएं
(5,10, 1,9, 8,10, 9,12, 5,12, 1,4, 0,3, 2,4, 3,7, 6,8, 7,11, 2,11, 0,6)
इसके बाद इवान डायनिकोव में वर्णित आयताकार आरेख के सरलीकरण की खोज करता है , “लिंक की आर्क-प्रस्तुतियाँ। मोनोटोनिक सरलीकरण ”, 2004 । डायनिकोव ने साबित किया कि अनकॉट के किसी भी आयताकार आरेख से, सरल चालों का एक क्रम होता है जो तुच्छ आरेख पर समाप्त होता है। संक्षेप में, अनुमत चालों में शामिल हैं:
- ऊर्ध्वाधर (या क्षैतिज) खंडों को चक्रीय रूप से अनुमति देना;
- निश्चित कॉन्फ़िगरेशन बाधाओं के तहत लगातार ऊर्ध्वाधर (या क्षैतिज) सेगमेंट को स्वैप करना।
- तीन आसन्न सिरों को बदलना जो आरेख के बहुत कोने में एक शीर्ष के साथ स्थित हैं।
तस्वीरों के लिए पेपर देखें। यह एक स्पष्ट प्रमेय नहीं है; यह कहना नहीं है कि, क्या कहते हैं, Reidemeister चलता है कि क्रॉसिंग की संख्या में वृद्धि नहीं होती है इसके बजाय इसका उपयोग किया जाता है। लेकिन ऊपर दिए गए विशेष प्रकार के सरलीकरण के लिए, यह सच हो जाता है।
(हम केवल ऊर्ध्वाधर खंडों को अनुमति देकर कार्यान्वयन को सरल बनाते हैं, लेकिन पूरे गाँठ को ऊर्ध्वाधर से क्षैतिज रूप से स्थानांतरित करने की अनुमति देते हैं।)
डेमो
$ python3 knot.py <<EOF
+-------+ +-------+
| | | |
| +---|----+ +-------+
| | | | | |
+-------|------------|---+
| | | |
+---+ +---+
EOF
KNOT
$ python3 knot.py <<EOF
+----------+
| |
| +--------------+
| | | |
| | +-|----+ |
| | | | | |
| +-----+ | |
| | | |
| +------|---+
| |
+---------------+
EOF
NOT
$ python3 knot.py <<EOF # the Culprit
+-----+
| |
+-----------+ |
| | | |
| +-+ | +---|-+
| | | | | | | |
| +-|-------+ | |
| | | | | | | |
+-|-+ | | +---+ |
| | | |
+---|---------+
| |
+-+
EOF
NOT
$ python3 knot.py <<EOF # Ochiai unknot
+-----+
| |
+-|---------+
| | | |
| | +-+ | |
| | | | | |
+-|-|---|-|-+ |
| | | | | | | |
| | | +---|---+
| | | | | |
+-------+ | |
| | | |
| +-------+
| |
+-------+
EOF
NOT
$ python3 knot.py <<EOF # Ochiai unknot plus trefoil
+-----+ +-----+
| | | |
+-|---------+ |
| | | | | |
| | +-+ | +---+ |
| | | | | | | |
+-|-|---|-|-+ +---+
| | | | | | | |
| | | +---|-----+
| | | | | |
+-------+ | |
| | | |
| +-------+
| |
+-------+
EOF
KNOT
$ python3 knot.py <<EOF # Thistlethwaite unknot
+---------+
| |
+---+ +---------+
| | | | | |
| +-------+ | |
| | | | | |
| | | +---+ |
| | | | | |
| | +-------+ |
| | | | | |
| +-------+ | |
| | | | | |
+-----------+ | | | |
| | | | | |
| +-----------+ | | |
| | | | | |
| | +-------------+ |
| | | |
| | +-----+
| | | |
| | +---+
| | | |
+---------------------+ |
| |
+---------------------+
EOF
NOT
$ python3 knot.py <<EOF # (−3,5,7)-pretzel knot
+-------------+
| |
+-|-----+ |
| | | |
+-|-+ +-------+ |
| | | | | |
+-|-+ +---+ +---+
| | | | | |
| | +---+ +---+
| | | | | |
| | +---+ +---+
| | | | | |
| +---+ +---+
| | | |
| | +---+
| | | |
| | +---+
| | | |
| +---+
| |
+-----+
EOF
KNOT
$ python3 knot.py <<EOF # Gordian unknot
+-------------+ +-------------+
| | | |
| +---------+ | | +---------+ |
| | | | | | | |
| | +-------------+ +-------------+ | |
| | | | | | | | | | | |
| | | +---------+ | | +---------+ | | |
| | | | | | | | | | | | | | | |
| +-------+ | +-------+ +-------+ | +-------+ |
| | | | | | | | | | | | | | | |
+-------+ | +-------+ | | +-------+ | +-------+
| | | | | | | | | | | | | | | |
| +-------+ | | | | | | | | +-------+ |
| | | | | | | | | | | | | | | |
+-------+ | | | | | | | | | | +-------+
| | | | | | | | | | | | | | | |
| +-----+ | | | | | | +-----+ |
| | | | | | | | | | | |
+---------+ | | | | +---------+
| | | | | | | |
+---------+ | | +---------+
| | | | | | | |
| | +-----------------+ | |
| | | | | |
| +---------------------+ |
| | | |
+-----------+ +-----------+
EOF
NOT