पहले, मैं तो तुम, a max b
लिख सकते हैं a
और b
पूर्णांकों के लिए पहिया बदलने नहीं होता ... विधि अधिकतम पहले से ही RichInt
में परिभाषित किया गया है,।
भी
slice
इसलिए
lst.slice(0, num)
के बजाय मैं lst.take(num)
का प्रयोग करेंगे हटाई गई है,। Scala 2.8 लॉन्च होने पर बहिष्कृत विधियां शायद चली जाएंगी।
संपादित करें: दरअसल, के रूप में Daniel ने कहा, slice(Int, Int)
पदावनत नहीं है। जब मैंने शुरुआत में इसे लिखा था, तो मैं जल्दी में काफी था, और मैं slice(Int)
के बारे में सोच रहा था, जो drop(Int)
के बराबर है। मुझे अभी भी lst.take(num)
lst.slice(0, num)
से स्पष्ट होने के लिए मिल गया है :)।
(नाइटपिक) आपकी अंतिम पंक्ति संकलित नहीं होती है क्योंकि आप विपक्ष के अनुक्रम के अंत में Nil
जोड़ना भूल गए हैं। 1::2::3::4
, पर Int
पर आक्रमण करना समाप्त कर देगा, जिसमें यह विधि नहीं है। यही कारण है कि आपको Nil
अंत में जोड़ने की आवश्यकता है (::
पर Nil
पर आज़माएं)।
इसके अलावा, आपके द्वारा उपयोग किए गए एल्गोरिदम पहली नज़र में स्पष्ट नहीं है। - सूची की एक रपट खिड़की ले, कि रपट विंडो में उत्पाद की गणना और
val numbers = /*"--the string of numbers--"*/.map(_.asDigit).toList
def sliding[A](xs: List[A], w: Int): List[List[A]] = {
for(n <- List.range(0, xs.size - w))
yield xs drop n take w
}
def product(xs: List[Int]): Int = (1 /: xs) (_ * _)
sliding(numbers, 5).map(product).sort(_ > _).head
मुझे लगता है कि अंतिम पंक्ति बहुत अच्छी तरह से क्या एल्गोरिथ्म माना जाता है बताते करना है: जिस तरह से मैं यह लिखते थे इस प्रकार है तो अधिकतम गणना किए गए उत्पादों को प्राप्त करें (मैंने अधिकतम कार्य को sort(_ > _).head
आलस्य से बाहर कर दिया है, यदि प्रदर्शन महत्वपूर्ण था तो मैं ओ (एन लॉग (एन)) के बजाय कुछ ओ (एन) कर सकता था ... यह अभी भी चलता है हालांकि एक सेकंड के तहत)।
ध्यान दें कि स्लाइडिंग फ़ंक्शन स्कैला 2.8 लाइब्रेरी में होगा (Daniel's post देखें, जहां से मैं स्लाइडिंग की इस परिभाषा को लिखने में प्रेरित था)।
संपादित करें: ओह .../:
के बारे में खेद है। मैं बस इसकी संक्षिप्तता और तथ्य यह है कि गुना का प्रारंभिक तत्व सूची से पहले आता है। आप समतुल्य रूप product
निम्नलिखित के रूप में लिख सकता है, और अधिक स्पष्ट हो:
def product(xs: List[Int]): Int = xs.foldLeft(1)(_ * _)
-- Flaviu Cipcigan
धन्यवाद Flaviu, यही वह जवाब है जिसकी मुझे आशा थी। आपके समाधान को समझने में मुझे 5 मिनट लग गए, अधिकतर संक्षेप में सिंटैक्स के कारण, जिसका आप उपयोग करते हैं। मैं अभी तक ऑपरेटरों को नहीं जानता, इसलिए '1 /: xs' जैसी कुछ पहली नज़र में पूरी तरह से गुप्त है। –
खुशी मैं मदद कर सकता था। मैंने उत्पाद की कम गुप्त परिभाषा प्रदान करने के लिए पोस्ट संपादित किया है;)। –
क्या 'टुकड़ा' बहिष्कृत किया जा रहा है? मुझे 2.8 या 2.7.4 पर कोई चेतावनी दिखाई नहीं दे रही है। –