এই চ্যালেঞ্জটি সম্পূর্ণ ফাইলটিকে মেমরির মধ্যে না পড়েই সম্ভাব্য বিশাল ফাইল থেকে এলোমেলো লাইন পড়ার বিষয়ে।
ইনপুট
একটি পূর্ণসংখ্যা n
এবং একটি পাঠ্য ফাইলের নাম।
আউটপুট
n
পাঠ্য ফাইলের লাইনগুলি প্রতিস্থাপন ছাড়াই এলোমেলোভাবে পছন্দ করে।
আপনি ধরে নিতে পারেন n
ফাইলটির লাইন সংখ্যা থেকে 1 এর মধ্যে রয়েছে।
n
আপনি যে উত্তরটি পেয়েছেন তা অভিন্ন বলে পরিসীমা থেকে এলোমেলোভাবে সংখ্যার নমুনা দেওয়ার সময় সাবধান হন। rand()%n
সি উদাহরণস্বরূপ অভিন্ন নয়। প্রতিটি ফলাফল সমান সম্ভাবনা হতে হবে।
বিধি এবং বিধিনিষেধ
পাঠ্য ফাইলের প্রতিটি লাইনে একই সংখ্যার অক্ষর থাকবে এবং এটি 80 এর বেশি হবে না।
আপনার কোড অবশ্যই পাঠ্য ফাইলের যে কোনও বিষয়বস্তু পড়তে হবে না:
- এই লাইন এটি আউটপুট।
- পাঠ্য ফাইলে প্রতি লাইনে কত অক্ষর রয়েছে তা নিয়ে কাজ করার জন্য প্রথম লাইন।
আমরা অনুমান করতে পারি পাঠ্য ফাইলের প্রতিটি অক্ষর ঠিক এক বাইট লাগে takes
লাইন বিভাজকগুলি 1 বাইট দীর্ঘ বলে ধরে নেওয়া হয়। সমাধানগুলি 2 বাইট দীর্ঘ লাইন বিভাজক ব্যবহার করতে পারে কেবল যদি তারা এই প্রয়োজনটি নির্দিষ্ট করে। আপনি ধরে নিতে পারেন যে শেষ লাইনটি কোনও লাইন বিভাজক দ্বারা সমাপ্ত হয়।
আপনার উত্তরটি একটি সম্পূর্ণ প্রোগ্রাম হওয়া উচিত তবে আপনি যে কোনও উপায়ে সুবিধাজনকভাবে ইনপুট নির্দিষ্ট করতে পারেন।
ভাষা ও গ্রন্থাগার
আপনি যে কোনও ভাষা বা লাইব্রেরি পছন্দ করতে পারেন।
মন্তব্য
ফাইলটিতে রেখার সংখ্যা গণনা করার বিষয়ে উদ্বেগ ছিল। নিমিতে মন্তব্যে উল্লেখ করার সাথে সাথে আপনি ফাইলের আকার এবং লাইন অনুসারে অক্ষরের সংখ্যা থেকে এটি নির্ধারণ করতে পারেন।
প্রেরণা
আড্ডায় কিছু লোক জিজ্ঞাসা করেছিল যে এটি সত্যই "ওয়াই ছাড়াই এক্স" প্রশ্ন কিনা। বিধিনিষেধগুলি অস্বাভাবিকভাবে কৃত্রিম কিনা তা জানতে আমি এটি ব্যাখ্যা করি।
বিশাল ফাইলগুলি থেকে এলোমেলোভাবে নমুনা রেখার কাজটি অস্বাভাবিক নয় এবং বাস্তবে এটি আমাকে কখনও কখনও করতে হয়। এটি করার একটি উপায় হ'ল বাশ:
shuf -n <num-lines>
এটি যদিও পুরো ফাইলটিতে পড়ে এটি বড় ফাইলগুলির জন্য খুব ধীর।
fseek
এবং অন্যের পক্ষে অসম্ভব। অতিরিক্তভাবে, যদি n
ফাইলের লাইনের সংখ্যার চেয়ে বেশি হয় তবে কী হবে?
sum()
। মেমোরিতে কোনও ফাইল না পড়া একটি স্পষ্ট এবং ধারাবাহিক সীমাবদ্ধতা যা কোনওভাবেই স্বেচ্ছায় নয়। এটি মেমরির চেয়ে বড় ফাইলের সাথে পরীক্ষা করা যেতে পারে, যা ভাষার পার্থক্য অনুসারে কাজ করা যায় না। বাস্তব বিশ্বের অ্যাপ্লিকেশনগুলিও ঘটে (যদিও এটি কোনও গল্ফের জন্য প্রয়োজনীয় নয় ...)।