आप अपने 2 अन्य सबसे अच्छे दोस्तों के साथ रहने वाले एक युवा प्रोग्रामिंग गीक हैं। हर हफ्ते, आप में से किसी को घर के सभी काम करने होते हैं और आप तय करते हैं कि किसकी बारी है छड़ी लेकर। जो सबसे छोटी छड़ी चुनता है वह खो देता है और सभी काम करता है।
जैसा कि आप सभी प्रोग्रामर हैं और पहेलियां बनाना पसंद करते हैं, आपने "सबसे छोटी छड़ी उठाओ" को कंप्यूटर पहेली में बदल दिया है।
यहाँ पहेली के नियम हैं।
- आपको एक 2 डी मैट्रिक्स दिया जाएगा, जहां प्रत्येक स्तंभ एक छड़ी का प्रतिनिधित्व करता है।
- प्रत्येक कॉलम में, 1 स्टिक के एक हिस्से का प्रतिनिधित्व करता है और 0 एक खाली जगह है
- प्रत्येक स्तंभ में ऊपर से नीचे जाने पर, शुरू में आपके पास है
0
और जैसे ही आप एक हिट करते हैं1
, छड़ी शुरू हो गई है और बाकी कॉलम1
केवल भर जाएगा - आप एक कॉलम चुनने के लिए अपना प्रोग्राम लिख सकते हैं। उस कॉलम में छड़ी का आकार विजेता / हारने वाला निर्धारित करता है। छड़ी का आकार == उस कॉलम में 1s की संख्या।
- हालाँकि, उस प्रोग्राम में केवल एक रैखिक सबसे खराब समय जटिलता हो सकती है।
जैसा कि आप सभी प्रोग्रामर हैं, आपको पता होगा कि क्या किसी और का कार्यक्रम समय जटिलता सीमा की शूटिंग कर रहा है।
आपका काम है:
- एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट को या तो 2 डी प्रारूप या स्ट्रिंग के सरणी में स्वीकार करता है।
- इनपुट STDIN / प्रॉम्प्ट / कंसोल या एक फ़ंक्शन तर्क से लिया जा सकता है।
- यदि आप STDIN / प्रॉम्प्ट से इनपुट पढ़ रहे हैं तो आप मान सकते हैं कि इनपुट को पढ़ने और इसे किसी अरै में परिवर्तित करने में 0 समय लगता है (भले ही ऐसा करने के लिए कोड आपके उत्तर में हो)
- इसमें सबसे लंबी छड़ी के साथ कॉलम का निर्धारण करें।
- आउटपुट फ़ंक्शन का रिटर्न मान या STDOUT / कंसोल / अलर्ट हो सकता है।
- कार्यक्रम / फ़ंक्शन में रैखिक सबसे खराब स्थिति वाला समय जटिलता होना चाहिए,
O(m+n)
जहांm
पंक्तियोंn
की संख्या और स्तंभों की संख्या है।
इनपुट निम्नलिखित स्वरूपों में से एक हो सकता है:
2D सरणी:
[ [0, 0, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 1] ]
स्ट्रिंग्स की सरणी:
[ "0000", "1000", "1101", "1111" ]
इनपुट में निम्नलिखित गुण होंगे:
- सरणी का आकार अज्ञात है, किसी भी आकार की आयत मान लें
- किसी भी कॉलम में, नीचे की ओर आते हुए, यदि आपको 1 दिखाई देता है, तो नीचे सब कुछ एक होगा
- खाली-कॉलम (यानी 0-लंबाई) स्टिक की अनुमति है।
यह एक कोड-गोल्फ है इसलिए सबसे छोटा कोड जीतता है ! "
कृपया अपने कोड की व्याख्या करें, या अनगुल्ड संस्करण (समय जटिलता को सत्यापित करने के लिए) के साथ दो इनपुट स्वरूपों की अपेक्षा करें।
UPDATE रैखिक समय की जटिलता का अर्थ है O (n + m) जहां n स्तंभ आकार है और m पंक्ति आकार है। (उन लोगों के लिए जो अस्पष्ट थे)
अद्यतन 2 यह निश्चित रूप से रैखिक समय में किया जा सकता है। और यदि आप एक उत्तर पोस्ट कर रहे हैं, तो एक निष्पक्ष लड़ाई के लिए कुछ दिनों तक तर्क / एल्गोरिथ्म पोस्ट करने में देरी महसूस करें :)
अद्यतन 3 मैं समय की जटिलता और कार्यक्रम को मान्य करने के लिए कुछ घंटों में सभी उत्तरों पर जाऊंगा :)
1
इनपुट में एकमात्र अंतिम सेल है संपूर्ण इनपुट को पढ़ना आवश्यक है। भले ही भाषा का मानक पुस्तकालय स्टड के लिए यादृच्छिक अभिगम करता हो, दृश्यों के तहत यह इसे बफर कर रहा है और इसलिए लिया गया समय ओमेगा (n * m) है।