এই ধাঁধাটির উদ্দেশ্য হ'ল 52 টি কার্ডের ডেক নেওয়া এবং এটিকে সাফল্য দেওয়া যাতে প্রতিটি কার্ড একটি এলোমেলো অবস্থায় থাকে।
প্রদত্ত:
deck
কার্ডগুলির প্রতিনিধিত্ব করে 52 স্বতন্ত্র পূর্ণসংখ্যার একটি অ্যারে । আপনি যখন শুরু করেন,deck
কোনও কোনও অজানা ক্রমে প্রতিটি কার্ডের মধ্যে একটি করে অন্তর্ভুক্ত থাকে।- একটি ক্রিয়াকলাপ,
int rand(min, max)
যা ইনটmin
এবং সমেতের মধ্যে একটি এলোমেলো পূর্ণসংখ্যা প্রদান করেmax
। আপনি ধরে নিতে পারেন যে এই ফাংশনটি সত্যই এলোমেলো। - একটি ফাংশন,
void swap(x, y)
যা ডেকে দুটি কার্ড অদলবদল করে। আপনি যদি কল করেনswap(x, y)
তবে কার্ডগুলি পজিশনে রয়েছেx
এবংy
স্থানগুলি স্যুইচ করবে।
কখন:
- প্রোগ্রাম কল করে
shuffle()
(বাshuffle(deck)
বাdeck.shuffle()
তবে আপনার প্রয়োগটি চালানো পছন্দ করে),
তারপর:
deck
নিখুঁতভাবে এলোমেলো ক্রমে প্রতিটি কার্ডের মধ্যে একটি করে থাকা উচিত।
ক্যাচ:
আপনি কোনও ভেরিয়েবল ঘোষণা করতে পারবেন না। কল করুন swap
এবং rand
আপনার পছন্দ মতো, তবে আপনি নিজের কোনও ভেরিয়েবল ঘোষণা করতে পারবেন না। এর মধ্যে for
লুপ কাউন্টার অন্তর্ভুক্ত রয়েছে - এমনকি এর মতো অন্তর্নিহিত বিষয়গুলিও foreach
।
ব্যাখ্যা:
- আপনি আপনার পছন্দসই ভাষার সাথে মানিয়ে নিতে ছোটখাটো বিশদ পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, আপনি
swap
রেফারেন্স দ্বারা দুটি পূর্ণসংখ্যার পরিবর্তন করতে লিখতে পারেন। পরিবর্তনগুলি আপনার ভাষা দিয়ে তৈরি করা উচিত, ধাঁধাটি সহজ করার জন্য নয়। deck
গ্লোবাল ভেরিয়েবল হতে পারে বা আপনি এটি প্যারামিটার হিসাবে নিতে পারেন।- আপনি যে বিষয়বস্তুতে চান
deck
তা করতে পারেন তবে আপনি এর দৈর্ঘ্য পরিবর্তন করতে পারবেন না। - আপনার কার্ডগুলি 0-51, 1-52, বা আপনার পছন্দ মতো কিছুতে নম্বর দেওয়া যেতে পারে।
- আপনি এটি যে কোনও ভাষায় লিখতে পারেন, তবে আপনার ভাষার অন্তর্নির্মিত
shuffle
কার্যের সাথে কোনও প্রতারণা নেই । - হ্যাঁ, আপনি একই লাইনে 52 বার লিখতে পারেন। কেউ মুগ্ধ হবে না।
- মৃত্যুদন্ড কার্যকর করার সময়টি কোনও ব্যাপার নয়, তবে সত্যিকারের এলোমেলো করে।
- এটি আসলে কোড গল্ফ নয়, তবে আপনার কোডটি ছোট / নিঃসরণে নির্দ্বিধায়।
সম্পাদনা করুন: বয়লারপ্লেট কোড এবং ভিজ্যুয়ালাইজার
যদি আপনি। নেট বা জাভাস্ক্রিপ্ট ব্যবহার করেন তবে এখানে কয়েকটি পরীক্ষার কোড আপনাকে দরকারী মনে করতে পারেন:
javascript:
- কফিস্ক্রিপ্ট উত্স সহ দ্রুত এবং নোংরা জাভাস্ক্রিপ্ট ভিজ্যুয়ালাইজার: https://gist.github.com/JustinMorgan/3989752bdfd579291cca
- চলমান সংস্করণ (কেবল আপনার
shuffle()
ফাংশনে পেস্ট করুন ): http://jsfiddle.net/4zxjmy42/
সি #:
- সি # কোডবিহাইড সহ এএসপি.নেট ভিজ্যুয়ালাইজার: https://gist.github.com/JustinMorgan/4b630446a43f28eb5559
- কেবলমাত্র
swap
এবংrand
ইউটিলিটি পদ্ধতি সহ স্টাব : https://gist.github.com/JustinMorgan/3bb4e6b058d70cc07d41
এই কোডটি ডেককে কয়েক হাজার বার সাজিয়ে তোলে এবং এলোমেলো করে তোলে এবং কিছু বুনিয়াদি পরীক্ষা করে তোলে: প্রতিটি শিফেলের জন্য এটি যাচাই করে যে ডেকের মধ্যে ঠিক 52 টি কার্ড নেই যার পুনরাবৃত্তি নেই। তারপরে ভিজ্যুয়ালাইজার একটি গ্রেস্কেল তাপের মানচিত্র প্রদর্শন করে ডেকের প্রতিটি জায়গায় শেষ হওয়া প্রতিটি কার্ডের ফ্রিকোয়েন্সি প্লট করে।
ভিজ্যুয়ালাইজারের আউটপুটটি কোনও আপাত বিন্যাস ছাড়াই তুষারের মতো হওয়া উচিত। অবশ্যই এটি সত্য এলোমেলো প্রমাণ করতে পারে না, তবে এটি স্পট-চেক করার একটি দ্রুত এবং সহজ উপায়। আমি এটি বা এটির মতো আরও কিছু ব্যবহার করার পরামর্শ দিচ্ছি, কারণ বদলানো অ্যালগরিদমের কিছু ভুলের ফলে আউটপুটে খুব স্বীকৃতি পাওয়া যায়। দুটি বাস্তবায়ন থেকে প্রাপ্ত ফলাফলের একটি উদাহরণ এখানে রয়েছে, একটি সাধারণ ত্রুটিযুক্ত:
ত্রুটিযুক্ত সংস্করণ আংশিকভাবে ডেকে বদল করে, তাই আপনি হাতের সাহায্যে অ্যারে পরীক্ষা করে নিলে সূক্ষ্ম দেখাতে পারে। ভিজ্যুয়ালাইজার কোনও প্যাটার্নটি লক্ষ্য করা সহজ করে তোলে।
deck
নিজে ছাড়া অন্য কোনও পরামিতি ছাড়াই করা যায়।
swap
যতটা বাস্তবায়ন পছন্দ করেন ততক্ষণ ধরে নিতে পারবেন , যতক্ষণ না এটি এর মূল উদ্দেশ্যটি পূরণ করে। আমার swap
প্রদত্ত হওয়ার কারণগুলির একটি অংশটি ছিল যাতে লোকেরা এটিকে 'যাদু' হিসাবে বিবেচনা করতে পারে এবং তাদের পছন্দের ভাষায় কাজ করার বিষয়ে চিন্তা না করেই মূল সমস্যাটিতে মনোনিবেশ করতে পারে। আপনি হয় তা করতে পারেন বা নিজের লিখতে পারেন swap
, এটি আপনার উপর নির্ভর করে।