পাইথন 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 । ডায়নিকভ প্রমাণ করেছেন যে অঙ্কোটের কোনও আয়তক্ষেত্রাকার চিত্র থেকে, সরলকরণের ক্রমগুলির ক্রম রয়েছে যা তুচ্ছ চিত্রের সাথে শেষ হয়। সংক্ষেপে, অনুমোদিত পদক্ষেপের মধ্যে রয়েছে:
- চক্রাকারে উল্লম্ব (বা অনুভূমিক) বিভাগগুলিকে অনুমতি দেওয়া;
- নির্দিষ্ট কনফিগারেশন সীমাবদ্ধতার অধীনে পরপর উল্লম্ব (বা অনুভূমিক) বিভাগগুলি অদলবদল করা।
- ডায়াগ্রামের একেবারে কোণে অবস্থিত তিনটি সংলগ্ন প্রান্তকে একটি ভার্টেক্স দিয়ে প্রতিস্থাপন করা হচ্ছে।
ছবির জন্য কাগজ দেখুন। এটি সুস্পষ্ট উপপাদ্য নয়; এটি ধরে রাখে না, যদি বলুন, রিডমিস্টার মুভগুলি পরিবর্তে ক্রসিংয়ের সংখ্যা বৃদ্ধি না করে তবে ব্যবহৃত হয়। তবে উপরের বিশেষ ধরণের সরলিকরণের জন্য, এটি সত্য বলে প্রমাণিত হয়েছে।
(আমরা কেবল উল্লম্ব বিভাগগুলিকে অনুমতি দিয়ে বাস্তবায়নকে সহজতর করি, তবে পুরো গিঁটকে অনুভূমিকের সাথে অনুভূমিকভাবে আড়াআড়ি স্থানান্তরিত করার অনুমতি প্রদান করি))
ডেমো
$ 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