पृष्ठभूमि
एडा एक प्रोग्रामिंग लैंग्वेज है जो वास्तव में अपनी थिरता के लिए नहीं जानी जाती है।
हालांकि, इसके सरणी शाब्दिक वाक्यविन्यास सिद्धांत में काफी सरणी सरणी विनिर्देशों के लिए अनुमति दे सकते हैं। यहाँ सरणी शाब्दिक सिंटैक्स का एक सरल ईबीएनएफ विवरण है ( बॉटलकैप्स के लिए निष्क्रिय) :
array ::= positional_array | named_array
positional_array ::= expression ',' expression (',' expression)*
| expression (',' expression)* ',' 'others' '=>' expression
named_array ::= component_association (',' component_association)*
component_association ::= discrete_choice_list '=>' expression
discrete_choice_list ::= discrete_choice ('|' discrete_choice)*
discrete_choice ::= expression ('..' expression)? | 'others'
हम अपने आप को सरलता के लिए पूर्णांक के 1-आयामी सरणियों तक सीमित कर देंगे। इसका मतलब है कि हम अभिव्यक्ति मूल्यों के लिए केवल पूर्णांक का उपयोग करेंगे। शायद भविष्य की चुनौती में हम कुछ और उन्नत करने की कोशिश कर सकते हैं (जैसे कि चर और बहुआयामी सरणियों की घोषणा करना)। आप करते नहीं गोल्फ के लिए पूर्णांक शाब्दिक है ।
यहाँ एडा सरणी शाब्दिक और स्पष्टता के लिए एक पायथन-एस्क समकक्ष प्रतिनिधित्व के कुछ उदाहरण दिए गए हैं:
(1, 2, 3) = [1, 2, 3]
(1, others => 2) = [1, 2, 2, ..., 2]
(others => 1) = [1, 1, ..., 1]
(1 => 1, 2 => 3) = [1, 3]
(1|2 => 1, 3 => 2) = [1, 1, 2]
(1 => 1, 3 => 2, others => 3) = [1, 3, 2, 3, 3, ..., 3]
चुनौती
इस चुनौती का लक्ष्य किसी दिए गए इनपुट सरणी के लिए सबसे छोटा बाइट-काउंट Ada array शाब्दिक आउटपुट करना है। ध्यान दें कि जो भी सूचकांक वांछित है, उससे Ada सरणियाँ शुरू हो सकती हैं, इसलिए आप वह चुन सकते हैं जो आप चाहते हैं कि आरंभिक सूचकांक तब तक हो जब तक प्रत्येक मान अनुक्रमिक हो। इस उदाहरण में, मैं 1 पर शुरू करना चुनता हूं, जो कि Ada के लिए मुहावरेदार है, हालांकि आप किसी अन्य पूर्णांक में शुरू करना चुन सकते हैं।
इनपुट
आपके इनपुट में पूर्णांकों की एक सूची शामिल होगी, जो भी रूप में सुविधाजनक है।
उत्पादन
आपका आउटपुट कम से कम मान्य Ada सरणी शाब्दिक पाठ का एक स्ट्रिंग होगा जो इनपुट पूर्णांक की सूची का प्रतिनिधित्व करता है। आप इस सरणी पर अपनी इच्छानुसार किसी भी आरंभिक सूचकांक का उपयोग कर सकते हैं, लेकिन आपकी पसंद (जो भी हो) आपके उत्तर में निर्दिष्ट होनी चाहिए (शुरुआती सूचकांक भी गतिशील हो सकता है)।
पूर्णांक उदाहरण के रूप में, हस्ताक्षरित दशमलव संख्याओं के रूप में दर्शाए जाते हैं। यह चुनौती पूर्णांक मानों की गोल्फिंग को कवर नहीं करती है।
उदाहरण
यहाँ कुछ उदाहरण हैं:
Simple: [1, 2, 3] -> (1,2,3)
Range: [1, 1, 1, 1, 1, 1, 1,] -> (1..7=>1)
Others: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1] -> (6=>2,others=>1)
Multiple Ranges: [1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1] -> (6..10|16..20=>2,others=>1)
Tiny Ranges: [1,1,2,2,1,1,1,1,1] -> (3|4=>2,others=>1)
Far Range: [[1]*5, [2]*100, [3]*5] -> (1..5=>1,6..105=>2,others=>3)
Alternation: [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2] -> (1|3|5|7|9|11|13|15|17=>1,others=>2)
Big Number: [1234567890,1,1234567890] -> (2=>1,1|3=>1234567890)
Big-ish Number: [1234567,1,1234567] -> (1234567,1,1234567)
Solo: [-1] -> (1=>-1)
Huge Input: [[0],[1]*1000000000] -> (0,others=>1)
Positional Others: [1, 2, 3, 3, 3, 3, 3, 3] -> (1,2,others=>3)
Range and Choice, no Others: [1,1,1,12,12,3,3,3,3,3,3,3,3,3,3,4] -> (1..3=>1,4|5=>12,6..15=>3,16=>4)
न्यूनतम आवश्यकताएं
कम से कम 100 नंबरों का समर्थन और लंबाई में कम से कम 256 नंबरों का इनपुट।
ऐसे सभी इनपुट के लिए सही परिणाम तैयार करें
- अंत में 'दूसरों' को शामिल करना शामिल है
- एकल आइटम सरणियों के लिए एक इंडेक्स शामिल करना शामिल है
उपरोक्त इनपुट्स में से प्रत्येक के लिए एक मिनट में (TIO पर अधिमानतः) समाप्त करें।
बाइट्स जीत में सबसे छोटा समाधान!
संदर्भ कार्यान्वयन
यह कार्यान्वयन इनपुट को अपने सरणी के रूप में उपयोग करता है, जिसमें प्रत्येक वर्ण एक संख्या है। बड़े अक्षरों के लिए कैपिटल अक्षर विशेष स्थिरांक हैं। कार्यक्रम का तर्क उपयोग करने के लिए 'स्टार्ट इंडेक्स' है।
TIO लिंक में "कोड" अनुभाग समस्या का एक सही समाधान है, जबकि "हेडर" और "पाद" परीक्षण संरचना को लागू करते हैं।
106..110=>3,others=>2अधिक लंबा होगा) अंतिम मामले के लिए एक इंडेक्स की आवश्यकता होती है, क्योंकि व्याकरण एकल तत्व स्थितीय सरणियों की अनुमति नहीं देता है ( positional_array ::= expression ',' expression (',' expression)*)
(1|3=>1234567,2=>1)लिए एक और वैध आउटपुट है [1234567,1,1234567]?
(-1)?