ডেটা স্ট্রাকচারে কোনও রুবিক কিউবকে কীভাবে উপস্থাপন করবেন


58

আমি যদি কোনও রুবিকের কিউবকে অনুকরণ করার চেষ্টা করছি , আপনি প্রতি ঘন ঘন টাইলসের সাথে কিউবের রাজ্যের স্মৃতিতে সঞ্চয় করার জন্য কীভাবে একটি ডেটা স্ট্রাকচার তৈরি করবেন?

বিবেচনা করার বিষয়গুলি:

  • কিউব যে কোনও আকারের হতে পারে
  • এটি একটি রুবিকের কিউব, সুতরাং স্তরগুলি ঘোরানো যায়

2
বাড়ির কাজ? বা বাস্তব-বিশ্ব সমস্যা ...
এসডিজি

4
আপনি সেই রুবিকের কিউব সলভারের উত্স কোডটিতে আগ্রহী হতে পারেন ।
mouviciel

22
আমি নিশ্চিত যে কিউবের পক্ষের সংখ্যা 6 হওয়া উচিত
সাইমন বার্গোট

3
আমি রুবিকের কিউবের একটি মডেল সমতল দেখতে দেখতে আগ্রহী হব যাতে আমি একই সাথে সমস্ত পক্ষ দেখতে পারি। হুঁ, আমি এখন এটি লিখতে প্রলুব্ধ। এটি টি এর আকার হতে পারে বা যদি সম্ভব হয় তবে অবিরাম টাইলসও হতে পারে (আমি পরেটির কথা ভাবিনি)।
লি কোয়ালকভস্কি

6
আমি এরিক ইভান্স উদ্ধৃত করা, প্রলুব্ধ বোধ (উদ্ধৃতি সম্ভবত না 100% সঠিক যেমন মেমরি থেকে উদ্ধৃত করা) "মডেল তন্ন তন্ন ঠিক, কিংবা ভুল তারা কেবল বেশী বা কম দরকারী।"
পিট

উত্তর:


37

আকারের একটি সরল পুরানো অ্যারেতে কী ভুল [6X][X]? আপনাকে অভ্যন্তরীণ মিনি-কিউবগুলি সম্পর্কে জানার দরকার নেই , কারণ আপনি সেগুলি দেখেন না; তারা কিউবের রাজ্যের অংশ নয়। ইন্টারফেসটি ব্যবহার করার জন্য একটি দুর্দান্ত চেহারা এবং সাধারণের পিছনে দুটি কুরুচিপূর্ণ পদ্ধতি লুকান, ইউনিট এটি মৃত্যুর দিকে পরীক্ষা করুন এবং ভয়েলা, আপনি শেষ করেছেন!


31
এমনকি প্রকৃত রুবিকের কিউবে কোনও অভ্যন্তরীণ মিনি-কিউবস নেই
জে.কে.

8
এটি কাজ করবে তবে আপনার অ্যালগরিদম সম্ভবত এত সহজ ডেটা কাঠামো সংযোজন করার জন্য অসাধারণ জটিল হবে।
maple_shaft

6
As long as you know how the six surfaces are "threaded" together আরও শক্তিশালী ডেটা স্ট্রাকচার আপনাকে যা দেবে তা হ'ল। আমি মনে করি আমরা একই জিনিসটির জন্য তর্ক করছি। একটি অ্যারের দিক এবং একটি দিক ব্লকের একটি অ্যারে, তবে পাশগুলি এবং ব্লকগুলি সম্পর্কে অনেকগুলি আকর্ষণীয় বৈশিষ্ট্য রয়েছে যা "থ্রেডিং" শব্দটি সত্যই পছন্দ করেন না কারণ এটি বহু-থ্রেডিংয়ের সাথে বিভ্রান্ত হতে পারে; )
maple_shaft

7
@ ম্যাপেল_শ্যাফ্ট "আরও শক্তিশালী ডেটা স্ট্রাকচার আপনাকে যা দেবে ঠিক এটিই।" আমি সে সম্পর্কে জানি না: এতে আরও "স্ট্রাকচার" যুক্ত একটি ডেটা স্ট্রাকচার প্রয়োজনীয়ভাবে সেই কাঠামোর পৃথক অংশ স্থাপন, রক্ষণাবেক্ষণ এবং অ্যাক্সেস সম্পর্কিত অতিরিক্ত ঘটনামূলক জটিলতা আনবে । এর চেয়ে জটিলটি কী হতে পারে তা বলা শক্ত - কিছু কোণার ক্ষেত্রে প্লাস অ্যারেতে কুশল শিফটগুলি প্রয়োগ করে পৃথক কোষ অ্যাক্সেস করার জন্য "ফ্রি রাইড", বা কিছুটা জটিল শিফট এবং কিছুটা জটিল পাঠ সহ একটি কাঠামো।
dasblinkenlight

16
যে কেউ আসলে কোনও রুবিকের কিউবকে কাজে লাগানোর জন্য প্রোগ্রাম লিখেছেন, আমি প্রতি মুখী ছয়টি দ্বি-মাত্রিক অ্যারে ব্যবহারের সহজ পদ্ধতির গ্রহণ করেছি। এটি সত্য যে আপনাকে কিউবটিতে কিছু বিরক্তিজনক কিছু মৌলিক ক্রিয়াকলাপ বাস্তবায়ন করতে হবে, তবে এর পরে আপনি উপস্থাপনাটি ভুলে যেতে নির্দ্বিধায় রয়েছেন। এটি আমার পক্ষে কখনও সমস্যা ছিল না। আমি প্রায়শই ভাবতাম যে অন্যান্য উপস্থাপনা কীভাবে পারফরম্যান্সের দৃষ্টিকোণ থেকে কাজ করবে তবে কোডিং দৃষ্টিকোণ থেকে কখনই বোঝা বোধ করিনি।
পিটারআলেন ওয়েলব

39

এটি লক্ষ করা উচিত যে আমি একটি উত্সাহী গতির ঘনক্ষেত্র, তবে আমি কখনও কোনও অ্যালগরিদম বা ডেটা স্ট্রাকচারে কোনও রুবিকের ঘনক্ষেত্রকে প্রগতিগতভাবে উপস্থাপন করার চেষ্টা করি নি।

আমি সম্ভবত প্রতিটি কিউবের প্রতিটি ব্লকের অনন্য দিকগুলি ক্যাপচারের জন্য পৃথক ডেটা স্ট্রাকচার তৈরি করব।

একটি কিউবে 3 টি পৃথক ধরণের ব্লক রয়েছে:

  1. কর্নার ব্লক - এটিতে তিনটি রঙিন মুখ এবং তিনটি সংলগ্ন টুকরা রয়েছে যা এটি যে কোনও সময় একটি পাশ ভাগ করে নেবে।

  2. এজ ব্লক - এর দুটি রঙিন মুখ রয়েছে এবং এর সাথে 4 টি সংযুক্ত টুকরা রয়েছে যা এটি যে কোনও সময় একটি পাশ ভাগ করে নেবে। 3x3 ব্লকে এটিতে সর্বদা 2 সেন্টার টুকরা এবং 2 কোণার টুকরা থাকে।

  3. কেন্দ্র ব্লক - একটি 3x3 কিউবতে এই টুকরোটি চলনযোগ্য নয়, তবে এটি ঘোরানো যায়। এটিতে সর্বদা 4 সংলগ্ন প্রান্ত ব্লক থাকবে। বড় কিউবে একাধিক সেন্টার ব্লক রয়েছে যা অন্য সেন্টার ব্লক বা একটি প্রান্ত অংশের সাথে ভাগ করে নিতে পারে। কেন্দ্রের ব্লকগুলি কখনই কোনও কোণার ব্লকের সংলগ্ন হয় না।

এটি জানার পরে, একটি ব্লকের কাছে এটি স্পর্শ করা অন্যান্য ব্লকের উল্লেখগুলির একটি তালিকা থাকতে পারে। আমি তালিকাগুলির আরও একটি তালিকা রাখব, যা একক কিউব মুখের প্রতিনিধিত্বকারী ব্লকের একটি তালিকা এবং প্রতিটি কিউবের মুখের রেফারেন্স রাখে এমন একটি তালিকা।

প্রতিটি কিউব চেহারা একটি অনন্য মুখ হিসাবে উপস্থাপন করা হবে।

এই ডেটা স্ট্রাকচারের সাহায্যে একটি অ্যালগরিদম লিখতে পারা খুব সহজ হবে যা প্রতিটি মুখের উপর একটি ঘূর্ণন রূপান্তর সম্পাদন করে উপযুক্ত ব্লকগুলিকে উপযুক্ত তালিকাগুলিতে এবং বাইরে সরানো।

সম্পাদনা: গুরুত্বপূর্ণ নোট, এই তালিকা অবশ্যই অবশ্যই অর্ডার করা হবে তবে আমি তা উল্লেখ করতে ভুলে গেছি। উদাহরণস্বরূপ, আমি যদি ডান দিকটি ফ্লিপ করি তবে বাম কোণার ডান পাশের ব্লকটি ডান পাশের ডান কোণায় চলে আসে এবং ঘড়ির কাঁটার দিকে ঘোরানো হয়।


একমত যে প্রতিটি ব্লকের অনন্য বৈশিষ্ট্য থাকা দরকার। তবে রূপান্তরটি ক্লান্তিকর হবে না কারণ আপনাকে সংলগ্ন ব্লকগুলি এবং আপনার সম্পর্কিত রেফারেন্সগুলি আপডেট করতে হবে list of lists। আপনি যে ক্যোয়ারী করতে পারেন তার কেবলমাত্র একটি অযৌক্তিকর তালিকা থাকা আরও ভাল। আপনি যখন কোনও রূপান্তর করেন তখন আপনি সংলগ্ন ব্লক রেফারেন্সগুলি আপডেট করেন। আপনি যদি কোনও মুখের সমস্ত ব্লকের একটি তালিকা চান তবে আপনি কেন্দ্র সংলগ্ন সমস্ত সংলগ্ন ব্লকের জন্য আপনার তালিকাটি জিজ্ঞাসা করতে পারবেন, তাই না?
মেল

@ মেল এটি যেভাবেই করা সম্ভব, তবে ড্যাসব্লিংকনলাইটের সাথে কথা বলার পরে আমি আসলেই মনে করি যে তার উপায় কম জটিল হবে। আমি চাই তাঁর উত্তরটি আমার চেয়ে বেশি ভোট পেয়েছে। আমি অ্যালগরিদম এবং সবচেয়ে দক্ষ এক হিসাবে খুব ভাল না, আমি সত্যিই সত্যিই রুবিক কিউবগুলি পছন্দ করি এবং সেগুলি সংগ্রহ করি (সারা বিশ্বে 40 টিরও বেশি ধরণের)।
maple_shaft

যদিও ড্যাসব্লিংকনলাইটের সহজ সমাধানটির উত্তর দেওয়া হয়েছে, আমি আপনাকে অনুগ্রহ প্রদান করছি কারণ আপনার পছন্দটিতে এমন একটি যুক্তি রয়েছে যা এই জাতীয় ডেটা কাঠামোর জন্য প্রয়োজন এবং বিভিন্ন ব্লকের বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে
রাচেল

এই ডেটা মডেলটি বাস্তবের তুলনায় আরও সত্য তবে এটি এমন কিছু সাধারণ অপারেশন করে যা আপনি যা করা উচিত তার চেয়ে আরও বেশি কঠোর করতে চান - কেবল কিউবের অবস্থা পাওয়ার জন্য কিউবগুলির তালিকাগুলির মাধ্যমে পুনরাবৃত্তভাবে ভ্রমণ করা প্রয়োজন যা জটিল।
জিভ

@ জিভ ট্রু, তবে প্রশ্নটি ডেটা কাঠামো সম্পর্কে জিজ্ঞাসা করেছিল এবং অ্যালগরিদমগুলি সম্পর্কে অগত্যা নয়।
ম্যাপেল_শ্যাফ্ট

13

আমি যখন এই সমস্যাটির কথা ভাবি, তখন আমি একটি স্থির ঘনকটি মনে করি যার সাথে এটির রঙগুলি পরিচিত প্যাটার্নগুলিতে চলে। তাই ....

একটি কিউব অবজেক্টে 6 টি সাইড অবজেক্ট থাকে যা 0-5- তে স্থির থাকে index প্রতিটি পাশেই 9 টি পজিশন অবজেক্ট থাকে যা 0-8 স্থির করে স্থির থাকে। প্রতিটি পজিশনে একটি রঙ থাকে।

সরলতার জন্য, প্রতিটি কর্ম ত্রৈমাসিক টার্ন ইনক্রিমেন্টে পরিচালনা করুন। ঘন ঘনটিতে মোট 6 টি সম্ভাব্য ক্রিয়াকলাপের জন্য 2 টি সম্ভাব্য দিকনির্দেশে প্রতিটি ঘূর্ণনের 3 টি অক্ষ রয়েছে। এই তথ্যের সাথে, কিউবে সম্ভাব্য 6 টি ক্রিয়াকলাপ তৈরি করা মোটামুটি সহজ কাজ হয়ে যায়।

সুতরাং পাশের 6, পজিশন in এর বর্ণের সবুজ বর্ণিত পদক্ষেপের উপর নির্ভর করে অন্যদের মধ্যে 1 অবস্থান 3 বা পার্শ্ব 2 অবস্থান 7 এ সরে যেতে পারে। আমি কোনও গাণিতিক অনুবাদগুলি খুঁজে পাওয়ার জন্য এটি পর্যাপ্ত অন্বেষণ করি নি তবে প্যাটার্নগুলি সম্ভবত উদ্ভূত হবে যে আপনি কোডটিতে সুবিধা নিতে পারেন।

ডেটা স্ট্রাকচার ব্যবহার করে, নির্দিষ্ট রাজ্যে একটি নির্দিষ্ট ঘনকটি দ্রবণযোগ্য হলে আমি কীভাবে জানতে পারি? আমি নিজেই এই প্রশ্নের সাথে লড়াই করে যাচ্ছি এবং এখনও বেশিরভাগ উত্তর খুঁজে পাইনি।

এটি করার জন্য, কখনও এলোমেলো ঘনক্ষেত্রের অবস্থা দিয়ে শুরু করবেন না। পরিবর্তে, একটি সমাধান করা রাষ্ট্র দিয়ে শুরু করুন, এবং কিউবটিকে এলোমেলো শুরুর অবস্থানে আনতে প্রোগ্রামিক্যালি এন ক্রিয়া সম্পাদন করুন। যেহেতু আপনি কেবলমাত্র বর্তমান অবস্থায় যাওয়ার জন্য আইনী পদক্ষেপ নিয়েছেন তাই কিউবটি সমাধানযোগ্য able


1
ক্লাসিক "আপনি এখান থেকে শুরু করতে চান না" পরামর্শ!
এরগওয়ুন

8

আমি একটি রুজিক কিউবকে সম্বোধন করার একটি সহজ উপায় হিসাবে একটি জাইজেড কোঅর্ডিনেট সিস্টেম পেয়েছি এবং ঘূর্ণনটি ঘূর্ণনগুলি কার্যকর করার একটি সাধারণ, জেনেরিক উপায় মেট্রিক করে।

আমি পিসি ভেক্টরযুক্ত একটি পিস ক্লাস তৈরি করেছি (x, y, z)। কোনও পিস ঘূর্ণন ম্যাট্রিক্সকে তার অবস্থানে (একটি ম্যাট্রিক্স-ভেক্টর গুণ) প্রয়োগ করে ঘোরানো যেতে পারে। পিসটি এটিকে ট্রুপগুলিতে একটি রঙিন রঙে রাখে (cx, cy, cz)এবং প্রতিটি অক্ষের সাথে সামঞ্জস্যপূর্ণ রঙগুলি দেয়। যুক্তিবিজ্ঞান একটি ছোট পরিমাণ নিশ্চিত করে এই রং একটি ঘূর্ণন সময় উপযুক্তভাবে আপডেট করা হয়: XY সমতলে 90 ডিগ্রী ঘূর্ণন মানে আমরা মূল্যবোধের অদলবদল হবে cxএবং cy

যেহেতু ঘোরার সমস্ত যুক্তিই পিস শ্রেণিতে আবদ্ধ হয় তাই কিউব পিসগুলির একটি আনর্ডারড তালিকা সংরক্ষণ করতে পারে এবং ঘূর্ণনগুলি জেনেরিক ফ্যাশনে করা যেতে পারে। বাম মুখের আবর্তন করতে, -1 এর এক্স-স্থানাঙ্কের সাহায্যে সমস্ত টুকরো নির্বাচন করুন এবং প্রতিটি পিসে উপযুক্ত ঘূর্ণন ম্যাট্রিক্স প্রয়োগ করুন। পুরো কিউবটির ঘোরানোর জন্য, প্রতিটি টুকরাটিতে একই ঘূর্ণন ম্যাট্রিক্স প্রয়োগ করুন।

এই বাস্তবায়নটি সহজ এবং কয়েকটি অভিনব বৈশিষ্ট্য রয়েছে:

  1. একটি পিস বস্তুর অবস্থান পরিবর্তন হবে, তবে এর রঙগুলি পরিবর্তন করে না। এর অর্থ আপনি লাল-সবুজ টুকরো চাইতে পারেন, বস্তুটিতে ঝুলতে পারেন, কিছু আবর্তন করতে পারেন এবং একই জিনিসটি দেখতে দেখতে লাল-সবুজ টুকরাটি কোথায় শেষ হয়েছে।
  2. প্রতিটি ধরণের টুকরো (প্রান্ত, কেন্দ্র, কোণ) এর একটি অনন্য সমন্বয় বিন্যাস রয়েছে। 3x3 কিউবটির জন্য, একটি কোণার টুকরোটির অবস্থান ভেক্টর ( (-1, 1, 1)) এর কোনও জিরো নেই , একটি প্রান্তে হ'ল এক শূন্য ( (1, 0, -1)) এবং একটি কেন্দ্রের অংশে দুটি শূন্য ( (-1, 0, 0)) থাকে।
  3. একটি 3x3 ঘনক্ষেত্রের জন্য কাজ করে এমন ঘূর্ণন ম্যাট্রিকগুলি একটি এনএক্সএন কিউবের জন্য কাজ করবে।

downsides:

  1. ম্যাট্রিক্স-ভেক্টরের গুণটি অ্যারেগুলিতে অদলবদলের চেয়ে ধীর।
  2. পজিশনের দ্বারা পিসিসের জন্য লিনিয়ার-সময় অনুসন্ধানগুলি। আপনাকে টুকরোগুলি একটি বাহ্যিক ডেটা-কাঠামোয় সংরক্ষণ করতে হবে এবং স্থিরভাবে স্থির-সময় দেখার জন্য পজিশনে পর্যায়ক্রমে আপডেট করতে হবে। এটি ঘূর্ণন ম্যাট্রিক্স ব্যবহারের কিছু কমনীয়াকে পরাভূত করে এবং আপনার ঘনক শ্রেণিতে ঘূর্ণন যুক্তি ফাঁস করে। যদি আমি কোনও প্রকার অনুসন্ধান-ভিত্তিক সমাধানের বাস্তবায়ন করতাম তবে আমি অন্য বাস্তবায়ন ব্যবহার করতাম।
  3. প্যাটার্ন বিশ্লেষণ (সমাধানের সময়) এটি হিসাবে দুর্দান্ত হতে পারে না is একটি পিসের তার সংলগ্ন টুকরোগুলি সম্পর্কে কোনও জ্ঞান নেই, এবং উপরোক্ত পারফরম্যান্স সমস্যার কারণে বিশ্লেষণটি ধীর হবে।

3
আমি খুঁজে পেয়েছি যে এই ধরণের বাস্তবায়ন 3 ডি গ্রাফিক্স প্রোগ্রামে কিউবকে উপস্থাপন করতে সেরা কাজ করে। ম্যাট্রিক্সের গুণটি স্তর ঘূর্ণনগুলি অ্যানিমেটেড করা সম্ভব করে। এই পদ্ধতির উদাহরণ বাস্তবায়নের জন্য এই গিথুব রেপোটি দেখুন । আমি বিবেচনা করছি যে আমার 3 ডি কিউবে একটি দ্রাবক যুক্ত করতে, আমার অন্য একটি উত্তর থেকে একটি অ্যালগরিদম এবং ডেটা কাঠামো প্রয়োজন।
জোনাথন উইলসন

5

আপনি একটি সাধারণ অ্যারে ব্যবহার করতে পারেন (প্রতিটি উপাদানের মুখে 1 থেকে 1 ম্যাপিং করা একটি মুখের স্কোয়ারে) এবং প্রতিটি ঘূর্ণন নির্দিষ্ট অনুক্রমের সাথে অনুকরণ করতে পারেন

আপনি কেবল তিনটি প্রয়োজনীয় ক্রিয়াকলাপ দিয়ে দূরে সরে যেতে পারেন: সামনের মুখের সাথে অক্ষের সাহায্যে একটি টুকরো ঘোরান, উল্লম্ব অক্ষের চারপাশে ঘনকটি ঘোরান এবং বাম এবং ডান মুখগুলির মাধ্যমে অনুভূমিক অক্ষের উপরে ঘনকটি ঘোরান। অন্যান্য সমস্ত পদক্ষেপগুলি এই তিনটির কিছু সংক্ষেপে প্রকাশ করা যেতে পারে।

ঘনক্ষন সমাধানযোগ্য কিনা তা জানার সবচেয়ে সহজ উপায় হ'ল এটি সমাধান করা (ঘনকটি সমাধান করবে এমন ধারাবাহিক ক্রমগুলি সন্ধান করুন), আপনি যদি এমন দুটি প্রান্ত সমাপ্ত করেন যে জায়গাটি অদলবদল করে, একটি একক উল্টানো প্রান্ত, একটি ফ্লিপড কোণ বা 2 অদলবদল কোণ আপনার একটি অবিচ্ছেদ্য ঘনক্ষেত্র আছে


1
the most straightforward way of know whether a cube is solvable is to solve it। ঠিক আছে, আপনি যে মডেলটি ব্যবহার করছেন তা আমি মনে করি এটি সত্য। তবে আপনি যদি @ ম্যাপেল_শ্যাটের এবং ট্র্যাক রোটেশনের কাছাকাছি কোনও মডেল ব্যবহার করেন তবে আপনি দ্রুত পরীক্ষা করতে পারেন যে 3x3x3 কিউবটি প্রান্তের ফ্লিপ মোড 2 এর সমষ্টি যাচাই করে সমাধান করা যায় এবং 0 কোণার ঘূর্ণন 3 নং 0 হয়। তারপরে অনুমতিটির সামঞ্জস্যতা পরীক্ষা করুন প্রান্তের অদলবদল এবং কোণার অদলবদল (সমাধানের দিকে ফিরে আসার প্রয়োজন) গণনা করার জন্য, তাদের যোগফলের মোড 2 অবশ্যই 0 (মোট সমতা সমান) হওয়া উচিত। কিউব দ্রবণযোগ্য তা প্রমাণ করার জন্য এগুলি প্রয়োজনীয় এবং পর্যাপ্ত পরীক্ষা।
jimhark

3

এটি সমাধানযোগ্য হওয়ার প্রথম শর্তটি হ'ল প্রতিটি টুকরোগুলি উপস্থিত থাকে এবং প্রতিটি টুকরোতে থাকা রঙগুলি "সোভলড" কিউব একত্রিত করতে ব্যবহার করা যেতে পারে। এটি একটি অপেক্ষাকৃত তুচ্ছ অবস্থা যার সত্যতা একটি সাধারণ চেকলিস্ট দিয়ে নির্ধারণ করা যেতে পারে। "স্ট্যান্ডার্ড" কিউবে রঙিন স্কিমটি সংজ্ঞায়িত করা হয় , তবে আপনি যদি স্ট্যান্ডার্ড কিউবটির সাথে লেনদেন করেন না তবে কেবলমাত্র 6 টি থাকে! সমাধান হওয়া মুখগুলির সম্ভাব্য সংমিশ্রণগুলি।

একবার আপনার সমস্ত টুকরো এবং রং ঠিক হয়ে গেলে, কোনও প্রদত্ত শারীরিক কনফিগারেশন সমাধানযোগ্য কিনা তা নির্ধারণ করার বিষয়টি। সবগুলিই হয় না। এটি যাচাই করার সর্বাধিক নির্লজ্জ উপায় হ'ল কিউব-সমাধানের অ্যালগরিদম চালানো এবং দেখুন এটি কোনও সমাধান হওয়া কিউব দিয়ে শেষ হচ্ছে কিনা। আমি জানি না বাস্তবে কিউব সমাধানের চেষ্টা না করেই দ্রাব্যতা নির্ধারণ করার জন্য অভিনব সমন্বয় কৌশল রয়েছে কিনা।

কীসের জন্য ডেটা স্ট্রাকচার ... এটি প্রায় কোনও ব্যাপার নয়। কৌতুকপূর্ণ অংশটি রূপান্তরগুলি সঠিকভাবে পাচ্ছে এবং কিউব রাজ্যটিকে এমনভাবে উপস্থাপন করতে সক্ষম হবে যা আপনাকে সাহিত্যে উপলভ্য অ্যালগরিদমগুলির সাথে ঝরঝরেভাবে কাজ করতে দেয়। ম্যাপেল-শ্যাফ্ট ইঙ্গিত হিসাবে তিন প্রকারের টুকরা রয়েছে। রুবিকের ঘনক্ষেত্র সমাধানে সাহিত্য সর্বদা তাদের ধরণের টুকরোগুলি উল্লেখ করে। রূপান্তরগুলিও সাধারণ উপায়ে উপস্থাপন করা হয় ( সিংমাস্টার স্বরলিপিটি দেখুন )। এছাড়াও, সমস্ত সমাধান যা আমি সর্বদা দেখেছি সেগুলি এক টুকরোটিকে রেফারেন্স পয়েন্ট হিসাবে উল্লেখ করে (সাধারণত সাদা কেন্দ্রের অংশটি নীচে রাখে)।


1
পয়েন্ট 2 এর জন্য, এলোমেলো ঘনক্ষেত্র দিয়ে শুরু করার পরিবর্তে এবং এটি দ্রবণযোগ্য কিনা তা পরীক্ষা করে। আমি একটি সমাধান করা কিউব দিয়ে শুরু করব এবং কিউবটিকে এলোমেলো অবস্থায় আনতে এলোমেলো ক্রিয়া করব।
ম্যাথু ভাইনস

হ্যাঁ, একেবারে, এটি কোনও কনফিগারেশন তৈরির সবচেয়ে সহজ উপায় যা শারীরিকভাবে সমাধান করা সম্ভব। একটি স্বেচ্ছাসেবী কনফিগারেশন দিয়ে শুরু করা এবং এটি সমাধানযোগ্য কিনা তা নির্ধারণ করা অবশ্যই একটি পৃথক তবে সম্পর্কিত সমস্যা।
অ্যাঞ্জেলো

2
আপনি অনুমান করেছেন যে কোনও ঘনকটি সমাধান করা যায় কিনা তা নির্ধারণের জন্য "অভিনব কৌশলগুলি" থাকতে পারে; আসলে আছে। আপনি যদি কোন কিউবকে বিচ্ছিন্ন করে ফেলেন তবে স্টিকারগুলি চালু রাখুন এবং তারপরে কিউবটিকে পুনরায় সংশ্লেষ করতে পারেন তবে অগত্যা যে আপনি ঘননযোগ্য তা একটি ঘনকটি পাবেন না; বাস্তবে, আপনার কাছে একটি দ্রবণযোগ্য ঘনক্ষেত্রের বিপরীতে প্রতিক্রিয়া এক থেকে বারোটি । প্রান্ত এবং কোণগুলির সমতা বিশ্লেষণের মাধ্যমে আপনি যদি দ্রবণযোগ্য অবস্থায় থাকেন তবে আপনি তা নির্ধারণ করতে পারেন ; আপনাকে কিউবটি সমাধান করার চেষ্টা করতে হবে না।
এরিক লিপার্ট

1
এখানে তিন ধরণের কিউব জুটির বৈশিষ্ট্যগুলির একটি সংক্ষিপ্ত বিবরণ যা ঘনকটি দ্রবণযোগ্য হওয়ার জন্য সংরক্ষণ করতে হবে। ryanheise.com/cube/cube_laws.html
এরিক লিপার্ট

1
আমি ম্যাচ স্ট্যাকএক্সচেঞ্জ সাইটে এই প্রশ্নটি পোস্ট করেছি এবং সত্যিই খুব সুন্দর উত্তর পেয়েছি: math.stackexchange.com/questions/127577/…
মেল

3

যেহেতু আপনি ইতিমধ্যে দুর্দান্ত উত্তর পেয়েছেন, আমাকে কেবল একটি বিশদ যুক্ত করতে দিন।

আপনার কংক্রিটের উপস্থাপনা নির্বিশেষে নোট করুন যে লেন্সগুলি কিউবের বিভিন্ন অংশে "জুম ইন" করার জন্য খুব সূক্ষ্ম সরঞ্জাম। উদাহরণ হিসেবে বলা যায়, ফাংশন তাকান cycleLeftমধ্যে এই Haskell, কোড । এটি একটি জেনেরিক ফাংশন যা কোনও দৈর্ঘ্যের কোনও তালিকাকে চক্রাকারে অনুমতি দেয় the এল মুভটি সম্পাদনের জন্য কোডটি দেখতে এই জাতীয় দেখাচ্ছে:

moveL :: Aut (RubiksCube a)
moveL =
    cong cube $ cong leftCols cycleLeft
              . cong leftSide rotateSideCW

এইভাবে দেওয়া মতামতcycleLeft পরিচালনা করে leftCols । একইভাবে, rotateSideCWযা একটি জেনেরিক ফাংশন এটির একটি ঘোরানো সংস্করণকে একদিকে নিয়ে যায়, প্রদত্ত দৃশ্যে পরিচালনা করে leftSide। অন্যান্য পদক্ষেপগুলি একইভাবে প্রয়োগ করা যেতে পারে।

সেই হাস্কেল লাইব্রেরির লক্ষ্য হ'ল সুন্দর ছবি তৈরি করা। আমি মনে করি এটি সফল হয়েছে: ডায়াগ্রাম-রুবিক্স-কিউব লাইব্রেরি ক্রিয়াকলাপে


2

আপনি দুটি পৃথক প্রশ্ন জিজ্ঞাসা করা হবে বলে মনে হচ্ছে।

  1. এক্স সংখ্যার দিকের কিউবটি কীভাবে উপস্থাপন করবেন?

আপনি যদি একটি বাস্তব-বিশ্বের রুবিকের ঘনকটি অনুকরণ করতে চলেছেন তবে সমস্ত রুবিকের কিউবগুলির 6 টি দিক রয়েছে। আমি মনে করি আপনি যা বোঝাতে চাইছেন তা হচ্ছে "প্রতি পার্শ্বের প্রতিটি মাত্রায় এক্স টাইলস"। মূল রুবিকের ঘনক্ষেত্রের প্রতিটি দিক 3x3। অন্যান্য আকারের মধ্যে 4x4 (অধ্যাপকের কিউব), 5x5 এবং 6x6 অন্তর্ভুক্ত রয়েছে।

আমি "স্ট্যান্ডার্ড" কিউব সমাধানের স্বরলিপিটি ব্যবহার করে 6 টি পক্ষের সাথে ডেটা উপস্থাপন করব:

  • ফ্রন্ট: সলভারের মুখোমুখি
  • পেছনে
  • অধিকার
  • বাম
  • ইউপি
  • নীচে

প্রতিটি পক্ষই এক্স বাই বাই এক্স-এর 2-ডি অ্যারে is


আপনি একটি 17x17 কিউব কিনতে পারেন ! এটিতে কিছু যান্ত্রিক সমঝোতা রয়েছে তবে এটি আসল বিষয়টির থেকে বিচ্ছিন্ন।
RBerteig

1

আমি @ ম্যাপেল_শ্যাফ্টের ধারণাটিকে বিভিন্ন টুকরো (মিনি-কিউবস) আলাদাভাবে উপস্থাপন করতে পছন্দ করি: কেন্দ্রীয়, প্রান্ত এবং কোণার টুকরা যথাক্রমে 1, 2 বা 3 বর্ণ ধারণ করে।

আমি তাদের (পারস্পরিক সম্পর্কযুক্ত) গ্রাফ হিসাবে প্রান্তগুলিকে সংলগ্ন অংশগুলিকে সংযুক্ত করার সাথে সম্পর্কের প্রতিনিধিত্ব করব। প্রতিটি টুকরোতে প্রান্তগুলির জন্য স্লটগুলির একটি অ্যারে থাকবে (সংযোগগুলি): কেন্দ্রীয় টুকরাগুলিতে 4 স্লট, প্রান্তের টুকরোতে 4 স্লট, কোণার টুকরাগুলিতে 3 স্লট। বিকল্পভাবে, কেন্দ্রের টুকরাগুলির প্রান্ত টুকরাগুলির সাথে 4 টি এবং কোণার টুকরাগুলির জন্য পৃথকভাবে 4 টি সংযোগ থাকতে পারে, এবং / বা প্রান্তের টুকরাগুলির সাথে কেন্দ্রের টুকরাগুলির সাথে 2 এবং কোণার টুকরা পৃথকভাবে 2 সংযোগ থাকতে পারে।

এই অ্যারেগুলি যাতে অর্ডার করা হয় যাতে গ্রাফ প্রান্তগুলি দিয়ে পুনরাবৃত্তি সর্বদা 'একই' ঘূর্ণন উপস্থাপন করে, কিউবের ঘূর্ণনকে মডুলো করে। এটি হ'ল, যেমন কোনও কেন্দ্রের অংশের জন্য, আপনি যদি ঘনক্ষনটি ঘোরান যাতে এটির মুখটি শীর্ষে থাকে, সংযোগের ক্রমটি সর্বদা ঘড়ির কাঁটার দিকে থাকে। একইভাবে প্রান্ত এবং কোণার টুকরা জন্য। এই সম্পত্তিটি মুখের আবর্তনের পরে ধারণ করে (বা এটি এখন আমার কাছে মনে হয়)।

  • একটি প্রান্তের সাথে সম্পর্কিত টুকরাগুলি খুঁজে পাওয়া তুচ্ছ।
  • কোনও মুখের সাথে সম্পর্কিত টুকরোগুলি খুঁজে পাওয়া তুচ্ছ।
  • প্রদত্ত মুখ, বা বিপরীত মুখকে প্রদত্ত দিকনির্দেশে এমন মুখগুলি সন্ধান করা 2 বা 3 ভাল-সংজ্ঞায়িত লিঙ্কগুলি অনুসরণ করছে।
  • কোনও মুখ ঘোরানোর জন্য, মুখের কেন্দ্রীয় টুকরাটির সাথে সংযুক্ত সমস্ত টুকরোগুলির সংযোগগুলি আপডেট করুন।

আশা করা যায় সহজ, খুব সহজেই অবিশ্বাস্য শর্তাদি (অদলবদল / উল্টানো প্রান্ত, অদলবদল কোণ) সনাক্তকরণ, কারণ নির্দিষ্ট প্রকারের টুকরো এবং তাদের অভিযোজন খুঁজে পাওয়া সহজ।


1

নোড এবং পয়েন্টার সম্পর্কে কীভাবে?

ধরে নিই যে সবসময় 6 টি মুখ থাকে এবং সেই 1 নোডটি 1 টিতে 1 বর্গ প্রতিনিধিত্ব করে:

r , g , b
r , g , b
r , g , b
|   |   |
r , g , b - r , g , b
r , g , b - r , g , b
r , g , b - r , g , b

একটি নোডের পাশের প্রতিটি নোডের পয়েন্টার থাকে। একটি বৃত্তের আবর্তন কেবলমাত্র পয়েন্টারটি স্থানান্তর করে (নোডের সংখ্যা / মুখ সংখ্যা) -১ নোডের উপর, এই ক্ষেত্রে ২. সমস্ত ঘূর্ণন বৃত্ত ঘূর্ণন, আপনি কেবল একটি rotateফাংশন তৈরি করেন। এটি পুনরাবৃত্তিমূলক, প্রতিটি নোডকে একটি করে স্থান স্থানান্তর করে, এবং এটি তাদের যথেষ্ট পরিমাণে সরিয়ে নিয়েছে কিনা তা পরীক্ষা করে দেখায়, যেহেতু এটি নোডের সংখ্যা সংগ্রহ করবে এবং সর্বদা চারটি মুখ থাকবে। যদি তা না হয় তবে বারবার সরিয়ে নেওয়া মান এবং কলটি আবার ঘোরানো হবে incre

এটি দ্বিগুণভাবে সংযুক্ত রয়েছে তা ভুলে যাবেন না, সুতরাং নতুন পয়েন্টযুক্ত নোডগুলিও আপডেট করুন। সর্বদা নোডের প্রতি পয়েন্টার আপডেট হওয়া সাথে নোডের উচ্চতা * প্রস্থের প্রস্থ সংখ্যা থাকবে, সুতরাং উচ্চতা * প্রস্থ * 2 নম্বর পয়েন্টার আপডেট হওয়া উচিত।

যেহেতু সমস্ত নোড একে অপরের দিকে ইঙ্গিত করে, প্রতিটি নোডের কাছে আসার সাথে সাথে কেবলমাত্র নোডটিকে বৃত্তাকার আপডেট করে চলাফেরা করতে হবে।

প্রান্তের কেস বা জটিল যুক্তি ছাড়াই এটি কোনও আকারের কিউবটির জন্য কাজ করা উচিত। এটি কেবল পয়েন্টার ওয়াক / আপডেট।


-1

ব্যক্তিগত অভিজ্ঞতা থেকে কিউবের প্রতিটি ঘূর্ণন অংশ ট্র্যাক রাখতে একটি সেট ব্যবহার করে। প্রতিটি উপ কিউব তিনটি সেটে রবিক কিউবের আকারের কোনও ম্যাটার নেই। সুতরাং কোনও সাব কিউব সন্ধান করতে যেখানে রবিকের কিউবে আপনি কেবল তিনটি সেট ছেদ করে নিন (ফলাফলটি একটি সাব কিউব)। পদক্ষেপে জড়িত সেটগুলি থেকে প্রভাবিত সাব শাবুকগুলি সরিয়ে ফেলুন এবং তারপরে সেগুলিতে সেগুলিতে রাখুন যা সেগুলি সরানোর ফলস্বরূপ গ্রহণ করে।

4 বাই 4 কিউবটির 12 টি সেট থাকবে। 6 টি মুখের জন্য 6 সেট এবং কিউবের চারদিকে ছয়টি ব্যান্ডের জন্য 6 সেট। প্রতিটি মুখের 16 টি সাব কিউব এবং ব্যান্ডগুলির 12 টি 12 টি সাব কিউব রয়েছে। মোট 56 টি সাব কিউব রয়েছে। প্রতিটি উপ কিউব রঙ এবং রঙগুলির দিক সম্পর্কে তথ্য ধারণ করে। রুবিক কিউব নিজেই 4 বাই 4 বাই 4 অ্যারের সাথে প্রতিটি উপাদানের সাথে 3 সেট সমন্বিত তথ্য থাকে যা সেই জায়গায় সাব কিউব সংজ্ঞায়িত করে।

অন্যান্য 11 টি উত্তরগুলির মতো নয় এই ডেটা স্ট্রাকচারটিতে আপনি কিউবের প্রতিটি সাব ব্লকের অবস্থান নির্ধারণ করতে সেটগুলির ছেদ ব্যবহার করছেন। এটি পরিবর্তন করা হলে নিকটস্থ সাব ব্লকগুলি আপডেট করার কাজটি সংরক্ষণ করে।


এটি 11 টি পূর্ব উত্তরগুলিতে তৈরি এবং ব্যাখ্যা করা পয়েন্টগুলির চেয়ে বেশি কিছু দেওয়ার প্রস্তাব দিচ্ছে না
gnat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.