এই কোড-চ্যালেঞ্জের জন্য ধারণাটি সহজ: একটি পূর্ণসংখ্যার একটি ম্যাট্রিক্স দেওয়া হয়েছে, আসুন এটি রুবিক-স্টাইলের গতিবিধি প্রয়োগ করে বাছাই করুন। এর অর্থ হ'ল আপনি একটি একক সারি বা কলাম নির্বাচন করতে পারেন এবং এর উপাদানগুলিকে যে কোনও দিকে ঘোরান:
[1, 3, 2, 4] => [3, 2, 4, 1] (rotate left for rows/up for columns)
[1, 3, 2, 4] => [4, 1, 3, 2] (rotate right for rows/down for columns)
সুতরাং, কোনও মাত্রার পূর্ণসংখ্যার একটি ম্যাট্রিক্স দেওয়া হয়েছে, কেবলমাত্র এই রুবিক-শৈলীর রূপান্তরগুলি প্রয়োগ করে এর উপাদানগুলিকে সাজান। একটি ম্যাট্রিক্স
এর উপাদানগুলি নিম্নলিখিত সীমাবদ্ধতা মেনে চললে বাছাই হিসাবে বিবেচিত হবে:
ইনপুট / আউটপুট
- ইনপুটটি কোনও পুনরাবৃত্ত মানের সাথে ধনাত্মক পূর্ণ সংখ্যার ম্যাট্রিক্স হবে।
- আউটপুট এটি বাছাই করার জন্য প্রয়োজনীয় গতিবিধি হবে। যেহেতু এটি কোনও কোড গল্ফ চ্যালেঞ্জ নয় এবং আপনার দৈর্ঘ্যের বিষয়ে আপনাকে চিন্তা করার দরকার নেই, তাই প্রতিটি আন্দোলনের প্রস্তাবিত ফর্ম্যাটটি
#[UDLR]
যেখানে#
সারি করার জন্য সারি বা কলামের সংখ্যা (0-সূচিযুক্ত) এবং সেটিতে[UDLR]
একটি একক চরিত্র is সীমা যে সারণি উপরে / নিচে (কলামগুলির জন্য) বা বাম / ডান (সারিগুলির জন্য) রয়েছে তা নির্দিষ্ট করে। সুতরাং1U
"1 তম কলামটি উপরের দিকে সরানো" অর্থ1R
হবে তবে "1-তম সারিকে ডানদিকে সরানো" হবে। আন্দোলন, কমা চিহ্ন দ্বারা বিভাজিত করা হবে যাতে একটি সমাধান এই মত প্রকাশ করা হবে:1R,1U,0L,2D
।
স্কোরিং
এই পদ্ধতিতে ম্যাট্রিক্সকে বাছাই করার চেষ্টা করা ব্যয়বহুল হতে পারে কারণ প্রচুর চলার সংমিশ্রণ প্রচুর পরিমাণে রয়েছে এবং চলনগুলির প্রচুর সম্ভাব্য তালিকাও রয়েছে যা এটি বাছাই করতে পারে, সুতরাং লক্ষ্যটি এমন কিছু কোড লিখুন যা এন * কে বাছাই করে নীচে এন ম্যাট্রিক্স। স্কোরটি সবচেয়ে বড় আকারের এন হবে যা আপনি 1 টি ত্রুটি ছাড়াই যুক্তিসঙ্গত পরিমাণে সমাধান করতে পারেন (ম্যাট্রিক্সের আকারটি যত বেশি সমাধান করা যায় তত ভাল)। টাই হওয়ার ক্ষেত্রে টাই-ব্রেকারটি আপনার পাওয়া পথে চলার সংখ্যা হবে (পথটি ছোট হবে, আরও ভাল) the
উদাহরণ: যদি কোনও ব্যবহারকারী এন = 5 এর জন্য সমাধান এবং বি এন এর জন্য সমাধান খুঁজে পায় 6, বি উভয় পথের দৈর্ঘ্য নির্বিশেষে জয়ী হয়। যদি তারা উভয়ই এন = 6 এর সমাধান খুঁজে পান তবে এ দ্বারা পাওয়া সমাধানটির 50 টি পদক্ষেপ এবং বি এর সমাধানের 60 টি পদক্ষেপ রয়েছে, একটি জেতে।
আপনার কোড কীভাবে কাজ করে সে সম্পর্কে ব্যাখ্যাগুলি অত্যন্ত উত্সাহিত হয় এবং দয়া করে পাওয়া সমাধানগুলি পোস্ট করুন যাতে আমরা সেগুলি পরীক্ষা করতে পারি । সমাধানগুলি খুব বড় হলে আপনি পেস্টাবিন বা অনুরূপ সরঞ্জাম ব্যবহার করতে পারেন । এছাড়াও, আপনার সমাধানগুলি খুঁজে পেতে আপনার কোড দ্বারা ব্যয় করা সময়ের একটি অনুমান প্রশংসা করা হবে।
পরীক্ষার মামলা
নিম্নলিখিত ম্যাট্রিকগুলি ( আরও অনুলিপি-পেস্টেবল সংস্করণের জন্য পেস্টবিন লিঙ্ক ) ইতিমধ্যে সাজানো ম্যাট্রিকগুলি থেকে 10 কে এলোমেলোভাবে, রুবিক-স্টাইলের গতিবিধিতে স্ক্র্যাম্বিং করে তৈরি করা হয়েছে:
বাদী পরীক্ষার কেস:
[[8, 5, 6], [11, 10, 1], [3, 15, 13]]
[[21, 10, 12, 16], [17, 6, 22, 14], [8, 5, 19, 26], [13, 24, 3, 1]]
[[1, 13, 8, 16, 5], [9, 40, 21, 26, 22], [11, 24, 14, 39, 28], [32, 19, 37, 3, 10], [30, 17, 36, 7, 34]]
[[34, 21, 40, 22, 35, 41], [18, 33, 31, 30, 12, 43], [19, 11, 39, 24, 28, 23], [44, 1, 36, 5, 38, 45], [14, 17, 9, 16, 13, 26], [8, 3, 47, 6, 25, 4]]
[[20, 36, 17, 1, 15, 50, 18], [72, 67, 34, 10, 32, 3, 55], [42, 43, 9, 6, 30, 61, 39], [28, 41, 54, 27, 23, 5, 70], [48, 13, 25, 12, 46, 58, 63], [52, 37, 8, 45, 33, 14, 68], [59, 65, 56, 73, 60, 64, 22]]
[[85, 56, 52, 75, 89, 44, 41, 68], [27, 15, 87, 91, 32, 37, 39, 73], [6, 7, 64, 19, 99, 78, 46, 16], [42, 21, 63, 100, 4, 1, 72, 13], [11, 97, 30, 93, 28, 40, 3, 36], [50, 70, 25, 80, 58, 9, 60, 84], [54, 96, 17, 29, 43, 34, 23, 35], [77, 61, 82, 48, 2, 94, 38, 66]]
[[56, 79, 90, 61, 71, 122, 110, 31, 55], [11, 44, 28, 4, 85, 1, 30, 6, 18], [84, 43, 38, 66, 113, 24, 96, 20, 102], [75, 68, 5, 88, 80, 98, 35, 100, 77], [13, 21, 64, 108, 10, 60, 114, 40, 23], [47, 2, 73, 106, 82, 32, 120, 26, 36], [53, 93, 69, 104, 54, 19, 111, 117, 62], [17, 27, 8, 87, 33, 49, 15, 58, 116], [95, 112, 57, 118, 91, 51, 42, 65, 45]]
আপনি যদি সেগুলির সমাধান করেন তবে দয়া করে আরও জিজ্ঞাসা করুন। :-) এবং স্যান্ডবক্সে থাকাকালীন যারা আমাকে এই চ্যালেঞ্জটি পরিমার্জন করতে সহায়তা করেছেন তাদের অনেক ধন্যবাদ ।
1 একটি যুক্তিসঙ্গত সময়: আপনার সমাধান পরীক্ষা করার সময় যে পরিমাণ পরিমাণ আমাদের ধৈর্যকে ক্ষুন্ন করে না। নোট করুন যে টিআইও কেবলমাত্র 60 সেকেন্ডের জন্য কোড চালায়, সেই সীমা ছাড়িয়ে যে কোনও সময় সময় আমাদের মেশিনে কোডটি পরীক্ষা করে তুলবে। উদাহরণ: আমার পরিবর্তে অদৃশ্য অ্যালগরিদমটি 3x3 এবং 4x4 অর্ডারটির ম্যাট্রিকগুলি সমাধান করতে কয়েক মিলি সেকেন্ড সময় নেয়, তবে আমি কেবল এটি 5x5 ম্যাট্রিক্স দিয়ে পরীক্ষা করেছি এবং এটি সমাধান করতে 317 সেকেন্ড সময় নিয়েছে (5 মিলিয়নেরও বেশি আন্দোলনে, আমরা যদি এটি বিবেচনা করি তবে খুব মজার সমাধানের ম্যাট্রিক্সটি কেবল 10K বার স্ক্র্যাম্বল হয়েছিল )। আমি চলাফেরার সংখ্যা 10 কে এর চেয়ে কম করার চেষ্টা করেছি তবে কোডটি কার্যকর করার 30 মিনিটের পরে আমি আত্মসমর্পণ করেছি।
O(input size)
তখন ইনপুট-আকারটি কী হবে ? 5x5 ম্যাট্রিক্সের জন্য এটি হবে O(25)
? এটি অত্যন্ত দ্রুত বলে মনে হচ্ছে, সুতরাং আমি সেই অ্যালগরিদম বা আপনার বাস্তবায়ন দেখতে খুব আগ্রহী হব। সম্পাদনা: আপনি কি বুঝতে পেরেছেন যে আমরা 'স্ক্যাম্বলড' ম্যাট্রিক্স এবং আউটপুট আন্দোলনগুলি ঠিক করি? প্রায় অন্য উপায় না.