গাঁটের কাঠামোর উপর ভিত্তি করে গিঁটের 2-ডি চিত্র আঁকার জন্য একটি প্রোগ্রাম লিখুন। গিঁটটি যা শোনাচ্ছে ঠিক তেমনই: বাঁধা দড়িটির একটি লুপ। গণিতে, একটি গিঁট চিত্রটি দেখায় যেখানে গিঁটটি তৈরি করার জন্য একটি টুকরো টুকরো নিজের উপরে বা নীচে পেরিয়ে যায়। কয়েকটি গিঁটের চিত্র নীচে দেখানো হয়েছে:
লাইনে একটি ব্রেক রয়েছে যেখানে দড়িটি নিজের উপর দিয়ে গেছে।
ইনপুট: গিঁট বর্ণনকারী ইনপুটটি পূর্ণসংখ্যার একটি অ্যারে। একটি গিঁট যেখানে দড়ি নিজের উপর n বার অতিক্রম করে তাকে এন ইন্টিজারের অ্যারে হিসাবে উপস্থাপন করা যেতে পারে , প্রতিটি মানের মধ্যে [0, n-1]। আসুন এই অ্যারে কে কল করুন ।
অ্যারে একটি গিঁট বর্ণনাকরন করতে, n-1 এর মাধ্যমে 0 টি বিভাগের প্রতিটি নম্বর করুন। সেগমেন্ট 0 এর সাথে বিভাগ 1 টিতে নেতৃত্ব দেওয়া উচিত, যা বিভাগ 2-এর দিকে পরিচালিত হওয়া উচিত, যা খণ্ড 3-এ নিয়ে যাবে এবং সেগমেন্ট এন -1 টি পিছনে ফিরে আসা এবং সেগমেন্ট 0-এ পৌঁছানো পর্যন্ত একটি অংশটি শেষ হয় যখন দড়িটির অন্য একটি বিভাগটি তার উপর দিয়ে যায় ( চিত্রের রেখায় বিরতি দ্বারা প্রতিনিধিত্ব করা হয়েছে)। আসুন সহজ গিঁটটি দেওয়া যাক - ট্র্যাফয়েল নট। আমরা সেগমেন্টগুলি সংখ্যাযুক্ত করার পরে, বিভাগটি 0 শেষ হবে যখন বিভাগটি 2 এর উপর দিয়ে যাবে; বিভাগটি 1 শেষ হয় যখন বিভাগ 0 এর উপর দিয়ে গেছে; এবং বিভাগ 2 শেষ হবে যখন বিভাগ 1 তার উপর দিয়ে যাবে। সুতরাং, গিঁটকে বর্ণনা করে এমন অ্যারে হ'ল [2, 0, 1]। সাধারণভাবে, সেগমেন্ট এক্স শুরু হয় যেখানে বিভাগ -1-মোড এন ছেড়ে গেছে এবং যেখানে সেগমেন্ট কে [এক্স] এর উপর দিয়ে গেছে সেখানে শেষ হবে।
নীচের চিত্রটি নট চিত্রগুলি দেখায়, লেবেলযুক্ত বিভাগগুলি এবং নটকে বর্ণনা করে এমন সম্পর্কিত অ্যারেগুলি সহ।
শীর্ষ তিনটি চিত্র সঠিক নট, যখন নীচের তিনটি রশি এর লুপ যা তাদের নিজের উপর দিয়ে গেছে তবে আসলে গিঁটে নেই (তবে এখনও এর সাথে সংশ্লিষ্ট কোড রয়েছে)।
আপনার কাজটি এমন একটি ফাংশন লিখুন যা পূর্ণসংখ্যার কে এর অ্যারে নেয় (আপনি এটিকে কিছু আলাদা বলতে পারেন) যা কোনও গিঁট (বা দড়িটির লুপ যা আসলে গিঁটে না) বর্ণনা করে এবং যা উপরের বর্ণনায় বর্ণিত অনুরূপ নট ডায়াগ্রাম তৈরি করে উদাহরণ। যদি আপনি পারেন তবে আপনার কোডের একটি বর্ণহীন সংস্করণ বা ব্যাখ্যা সরবরাহ করুন এবং আপনার কোডের নমুনা আউটপুট সরবরাহ করুন। একই নট প্রায়শই একাধিক বিভিন্ন উপায়ে প্রতিনিধিত্ব করা যেতে পারে, তবে যদি নট ডায়াগ্রামটি আপনার ফাংশন আউটপুট সন্তুষ্ট করে তবে এর সম্ভাব্য উপস্থাপনাগুলির একটি হিসাবে ইনপুট থাকে, আপনার সমাধানটি বৈধ।
এটি কোড-গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম কোড। দড়ির প্রতিনিধিত্বকারী রেখার দৈর্ঘ্য 1 পিক্সেল হতে পারে, তবে নীচে এবং ওভারস্রোসিংগুলি অবশ্যই স্পষ্টভাবে পৃথক করতে হবে (দড়ির বিরতির আকার দুটি পাশের কমপক্ষে একটি পিক্সেলের দ্বারা দড়িটির বেধের চেয়ে বেশি হওয়া উচিত) ।
আমি উত্তরগুলিকে উজ্জীবিত করব যা অন্তর্নির্মিত নট তত্ত্বের ক্ষমতার উপর নির্ভর করে, তবে শেষ পর্যন্ত যেটি নির্বাচিত হয় সে অন্তর্নির্মিত নট তত্ত্বের ক্ষমতাগুলিতে নির্ভর করতে পারে না।
আমার স্বীকৃতি সম্পর্কে আমি যা জানি তা: আমি বিশ্বাস করি যে এখানে মানগুলির ক্রম রয়েছে যা কোনও গিঁট বা অচেনা মেলেনি বলে মনে হয়। উদাহরণস্বরূপ, ক্রম [2, 3, 4, 0, 1] আঁকানো অসম্ভব বলে মনে হচ্ছে।
এর বাইরে, ধরুন যে আপনি একটি ক্রসিং নিয়ে এসেছেন এবং সেই ক্রসিং থেকে শুরু করে, দড়িটির পথটি এক দিকে অনুসরণ করুন এবং প্রতিটি লেবেলযুক্ত ক্রসিং লেবেল করুন যা আপনি সফলভাবে বৃহত্তর অবিচ্ছেদ্য মানগুলি নিয়ে এসেছেন। বিকল্প নটগুলির জন্য, আমার স্বরলিপিটি এ জাতীয় লেবেলিংয়ে রূপান্তর করার জন্য একটি সহজ অ্যালগরিদম রয়েছে এবং গিঁটকে পরিবর্তিত করার জন্য গিঁটের কোডে এই লেবেলটিকে রূপান্তর করা নিতান্ত পরিবর্তনযোগ্য:
template<size_t n> array<int, 2*n> LabelAlternatingKnot(array<int, n> end_at)
{
array<int, n> end_of;
for(int i=0;i<n;++i) end_of[end_at[i]] = i;
array<int, 2*n> p;
for(int& i : p) i = -1;
int unique = 0;
for(int i=0;i<n;i++)
{
if(p[2*i] < 0)
{
p[2*i] = unique;
p[2*end_of[i] + 1] = unique;
++unique;
}
if(p[2*i+1] < 0)
{
p[2*i+1] = unique;
p[2*end_at[i]] = unique;
++unique;
}
}
return p;
}
template<size_t n> auto GetGaussCode(array<int, n> end_at)
{
auto crossings = LabelAlternatingKnot(end_at);
for(int& i : crossings) ++i;
for(int i=1;i<2*n;i+=2) crossings[i] = -crossings[i];
return crossings;
}
KnotData
ম্যাথমেটিকায় ব্যবহার করতে পারি না ...: '(
Knot
! ব্যবহারের উদাহরণ: << Units`; Convert[Knot, Mile/Hour]
ফলন 1.1507794480235425 Mile/Hour
। (আমি মনে করি এটি সত্য বা মিথ্যা নির্বিশেষে এটি মজাদার; তবে এটি সত্যই সত্য))