इस चुनौती में, आपको एक सूची को विभाजित करने की आवश्यकता है, जहां विभाजन का अधिकतम आकार, न्यूनतम आकार और एक पसंदीदा आकार है। मैं (min,pref,max)
इस चुनौती में आकारों को इंगित करने के लिए नोटेशन का उपयोग करूंगा ।
विभाजन से अपरिचित लोगों के लिए, निम्नलिखित सूची को 3 भागों में विभाजित किया गया है:
[0..9] -> [[0,1,2],[3,4,5],[6,7,8]]
जब सूची समान रूप से विभाज्य नहीं होती है, तो आपको विभाजन को यथासंभव पसंदीदा आकार के करीब होना चाहिए [0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]
:। यह विभाजन बेहतर है [[0,1,2,3],[4,5,6,7],[8,9]]
, भले ही उत्तरार्द्ध की पसंदीदा लंबाई अधिक हो। औपचारिक रूप से, हमें (partitionLength-preferredSize)^2
प्रत्येक विभाजन के योग को कम करने की आवश्यकता है ।
विभाजन की लंबाई का क्रम मायने नहीं रखता है: के लिए [0..5], (2,3,3)
, या तो [[0,1,2],[3,4]]
या [[0,1],[2,3,4]]
काम करता है। यदि कोई विभाजन संभव नहीं है, तो खाली सरणी लौटाएँ [0..7], (4,4,5) -> []
:।
आप यह मान सकते हैं 1<=min<=pref<=max
, और यह कि आपके पास दिया गया सरणी पूर्णांक का एक गैर-रिक्त सरणी है। सरणी हमेशा पहला तर्क होगी। आप किसी भी क्रम में और टपल के रूप में या अलग-अलग तर्कों के रूप में न्यूनतम, अधिकतम और प्रीफ़ स्वीकार कर सकते हैं।
आपका कार्यक्रम कुछ सेकंड के लिए चलना चाहिए। मूल रूप से, सीमा के भीतर हर संभव विभाजन आकार के माध्यम से पुनरावृत्ति की अनुमति नहीं है।
परीक्षण के मामलों:
[1], (1,3,4) -> [[1]]
[100], (1,2,3) -> [[100]]
[1,2], (1,1,2) -> [[1],[2]]
[1,2], (1,2,2) -> [[1,2]]
[1,2], (1,3,3) -> [[1,2]]
[1,2,3], (1,2,3) -> [[1,2],[3]] or [[1,2,3]]
[1,2,3,4], (1,3,4) -> [[1,2,3,4]]
[1,2,3,4,5], (3,3,4) -> []
[1,2,3,4,5], (2,2,2) -> []
[1,2,3,4,5], (3,3,5) -> [[1,2,3,4,5]]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49], (2,6,6) -> [[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29],[30,31,32,33,34],[35,36,37,38,39],[40,41,42,43,44],[45,46,47,48,49]]
यह एक कोड-गोल्फ है , इसलिए अपनी पसंदीदा भाषा में यथासंभव कम बाइट्स का लक्ष्य रखें!
[a..b]
शामिल किए जानेa
और बहिष्कृत करने की सूचनाb
, सही है?