আপনি আপনার 2 অন্যান্য সেরা বন্ধুদের সাথে বসবাস করছেন এক তরুণ প্রোগ্রামিং গীক। প্রতি সপ্তাহে, আপনারা একজনকে বাড়ির সমস্ত কাজ করতে হবে এবং আপনি লাঠি বাছাই করে সিদ্ধান্ত নিন যে এটি কার পালা। যিনি সংক্ষিপ্ততম লাঠিটি তুলেছেন তিনি সমস্ত কাজকর্ম হারিয়ে ফেলে।
আপনারা সবাই প্রোগ্রামার এবং ধাঁধা তৈরি করতে পছন্দ করায় আপনি কম্পিউটারের ধাঁধাতে "সবচেয়ে ছোট স্টিকটি বেছে নিন" পরিবর্তন করেছেন।
এখানে ধাঁধা নিয়ম।
- আপনাকে একটি 2 ডি ম্যাট্রিক্স দেওয়া হবে, যেখানে প্রতিটি কলাম একটি কাঠি উপস্থাপন করে।
- প্রতিটি কলামে, 1 স্টিকের একটি অংশ উপস্থাপন করে এবং 0 খালি স্থান space
- প্রতিটি কলামে উপর থেকে নীচে যাওয়ার সময়, শুরুতে আপনার কাজ হবে
0
এবং আপনি যখনই আঘাত করবেন1
, লাঠিটি শুরু হয়ে গেছে এবং বাকি কলামটি1
কেবল পূর্ণ হবে will - একটি কলাম বেছে নিতে আপনি নিজের প্রোগ্রামটি লিখতে পারেন। সেই কলামের স্টিকের আকারটি বিজয়ী / হারাতে হবে। স্টিকের আকার == এই কলামে 1 টি সংখ্যা।
- তবে, সেই প্রোগ্রামটিতে কেবলমাত্র লিনিয়ার সবচেয়ে খারাপ ক্ষেত্রে সময় জটিলতা থাকতে পারে।
আপনারা সবাই প্রোগ্রামার হিসাবে, আপনি অন্য কারও প্রোগ্রামের সময় জটিলতার সীমাটি শুট করছেন কিনা তা আপনি জানতে পারবেন।
আপনার কাজটি হ'ল:
- এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা 2D ফর্ম্যাট বা স্ট্রিংগুলির অ্যারেতে ইনপুট গ্রহণ করে।
- ইনপুটটি STDIN / প্রম্পট / কনসোল বা কোনও ফাংশন আর্গুমেন্ট থেকে নেওয়া যেতে পারে।
- আপনি যদি এসটিডিআইএন / প্রম্পট থেকে ইনপুটটি পড়ছেন তবে আপনি ধরে নিতে পারেন ইনপুট পড়তে এবং এটিকে অ্যারে রূপান্তর করতে 0 সময় লাগে (যদিও কোডটি আপনার উত্তরটিতে থাকতে হবে)
- এটিতে দীর্ঘতম কাঠি সহ কলামটি নির্ধারণ করুন।
- আউটপুট ফাংশনের রিটার্ন মান বা STDOUT / কনসোল / সতর্কতা হতে পারে।
- প্রোগ্রাম / ফাংশনে অবশ্যই লিনিয়ার সবচেয়ে খারাপ ক্ষেত্রে সময় জটিলতা থাকতে হবে,
O(m+n)
যেখানেm
সারিগুলিরn
সংখ্যা এবং কলামগুলির সংখ্যা।
ইনপুট নিম্নলিখিত ফর্ম্যাটগুলির মধ্যে একটি হতে পারে:
2 ডি অ্যারে:
[ [0, 0, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 1] ]
স্ট্রিংগুলির অ্যারে:
[ "0000", "1000", "1101", "1111" ]
ইনপুটটিতে নিম্নলিখিত বৈশিষ্ট্য থাকবে:
- অ্যারের আকার অজানা, যে কোনও আকারের একটি আয়তক্ষেত্র ধরে নিন
- যে কোনও কলামে, উপরে নীচে আসছে, আপনি যদি 1 টি দেখেন, তবে নীচের সমস্ত কিছু এক হবে
- খালি কলাম (অর্থাত 0-দৈর্ঘ্য) লাঠি হয় মঞ্জুরিপ্রাপ্ত।
এটি একটি কোড-গল্ফ তাই সংক্ষিপ্ততম কোড জয় !
দয়া করে আপনার কোডটি ব্যাখ্যা করুন, বা প্রত্যাশিত দুটি ইনপুট ফর্ম্যাটগুলির মধ্যে কোনটি দিয়ে অবরুদ্ধ সংস্করণটি (সময়ের জটিলতা যাচাই করতে) দিন।
আপডেটের লিনিয়ার সময় জটিলতার অর্থ এখানে ও (এন + মি) যেখানে n কলামের আকার এবং মিটি সারির আকার। (যারা অস্পষ্ট ছিল তাদের জন্য)
আপডেট 2 এই হ 'ল পারেন রৈখিক সময়ের মধ্যে সম্পন্ন করা হবে। এবং যদি আপনি উত্তর পোস্ট করে থাকেন তবে নির্দ্বিধায় লড়াইয়ের জন্য কয়েক দিন সময় করে লজিক / অ্যালগরিদম পোস্ট করতে দেরি করুন :)
আপডেট 3 আমি সময়ের জটিলতা এবং প্রোগ্রামটি যাচাই করতে কয়েক ঘন্টার মধ্যে সমস্ত উত্তর দিয়ে যাব :)
1
সর্বশেষ সেলটি রয়েছে then এটি সম্পূর্ণ ইনপুট পড়া প্রয়োজন। এমনকি যদি কোনও ভাষার স্ট্যান্ডার্ড লাইব্রেরি স্টিডিনে এলোমেলো অ্যাক্সেস নষ্ট করে, দৃশ্যের আওতায় এটি এটি বাফার করে এবং তাই নেওয়া সময়টি ওমেগা (এন * মি) হয়।