गूढ़ प्रोग्रामिंग भाषा में घुंघराले, कार्यक्रमों में केवल घुंघराले ब्रेसिज़ {}
और अर्धविराम शामिल हैं ;
। इस विनम्र टूलसेट के बावजूद, कर्ली के पास ऐसे शाब्दिक हैं जो किसी भी अप्रतिष्ठित पूर्णांक का प्रतिनिधित्व कर सकते हैं। हालांकि, बिन बुलाए पढ़ने के लिए प्रारूप थोड़ा कठिन है, इसलिए चलो हमारे लिए रूपांतरण करने के लिए कुछ कोड लिखें।
संख्या का प्रारूप
निम्नलिखित नियमों के अनुसार घुंघराले नंबर संरचित हैं:
- एक अर्धविराम जोड़ना संख्या में एक जोड़ता है।
- घुंघराले ब्रेसिज़ में संलग्न एक संख्या को चार से गुणा किया जाता है।
- घुंघराले-ब्रेस समूहों को घोंसला बनाया जा सकता है, लेकिन समवर्ती नहीं। ब्रेसिज़ ठीक से मेल खाना चाहिए।
- घुंघराले ब्रेसिज़ के एक सेट के बाहर अर्धविराम बाद में आना चाहिए, पहले नहीं।
- पार्सिंग में अस्पष्टता से बचने के लिए, एक संख्या को हमेशा एक घुंघराले ब्रेस के साथ शुरू करना चाहिए।
कुछ उदाहरण:
{;;} 2*4 = 8
{{;};}; (1*4+1)*4+1 = 21
{};;; 0*4+3 = 3
(ध्यान दें कि नियम 5 का अर्थ है 0 से 3 की संख्या एक खाली जोड़ी वाले घुंघराले ब्रेस के साथ शुरू होनी चाहिए।)
और कुछ अमान्य उदाहरण:
{{;}{;;}} Curly brace groups side-by-side, not nested
{;}} Unmatched brace
{;{;}} Semicolon before curly-brace group
;;; Number does not start with curly brace
यहाँ घुंघराले संख्या के लिए एक BNF व्याकरण है:
<number> ::= "{" <inner> "}" <semis>
<inner> ::= <semis>
| <number>
<semis> ::= ";" <semis>
| ""
संख्याएं {;;;;}
(एक पंक्ति में 3 से अधिक अर्धविराम) या {{};}
(अनावश्यक खाली ब्रेस समूह) को अनुचित कर्ली संख्या कहा जाता है । वे उपरोक्त व्याकरण का पालन करते हैं और सामान्य तरीके से मूल्यांकन किया जा सकता है, लेकिन वे छोटे अभ्यावेदन (उपरोक्त उदाहरणों के लिए, {{;}}
और {;}
क्रमशः) में भी सक्षम हैं ।
चुनौती
एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट / एक स्ट्रिंग प्राप्त करता है। यदि स्ट्रिंग एक nonnegative दशमलव पूर्णांक है, तो उस पूर्णांक के लिए उचित (यानी कम से कम संभव) घुंघराले प्रतिनिधित्व को आउटपुट / वापस करें । यदि स्ट्रिंग एक घुंघराले नंबर है, तो आउटपुट / उसका दशमलव प्रतिनिधित्व लौटाता है।
इनपुट STDIN, कमांड-लाइन तर्क या फ़ंक्शन पैरामीटर के माध्यम से प्राप्त किया जा सकता है। यह एक तार होना चाहिए; यह है, आप एक फ़ंक्शन नहीं लिख सकते हैं जो घुंघराले संख्याओं के लिए तार को स्वीकार करता है लेकिन दशमलव संख्या के लिए पूर्णांक।
आउटपुट को STDOUT में प्रिंट किया जा सकता है या फ़ंक्शन से लौटाया जा सकता है। एक फ़ंक्शन उपयुक्त होने पर पूर्णांक लौटा सकता है, या यह सभी स्थितियों में स्ट्रिंग लौटा सकता है।
आपके प्रोग्राम को खराब इनपुट (घुंघराले नंबर जो कि फॉरमेटिंग रूल्स को तोड़ते हैं, फ्लोटिंग पॉइंट नंबर, नेगेटिव पूर्णांक, रैंडम टेक्स्ट) को हैंडल करने की आवश्यकता नहीं है, और अनुचित कर्ली नंबर (लेकिन नीचे देखें) को संभालने की आवश्यकता नहीं है। इनपुट में केवल मुद्रण योग्य ASCII वर्ण शामिल होंगे।
स्कोरिंग
बाइट्स में सबसे छोटा कोड जीतता है। यदि आपका प्रोग्राम निम्न में से दोनों कर सकता है :
- सही ढंग से अनुचित घुंघराले संख्या को संभाल, और
- जब एक घुंघराले नंबर दिया जाता है, तो किसी भी अतिरिक्त वर्णों को अनदेखा करें जो कि नहीं हैं
{};
फिर अपने स्कोर से 10% घटाएं। (इंटेगर इनपुट में कभी भी बाहरी अक्षर नहीं होंगे, यहां तक कि बोनस के लिए भी।)
परीक्षण के मामलों
Input Output
{;;} 8
{{;};}; 21
{};;; 3
{{{{;}}};} 260
{} 0
4 {;}
17 {{;}};
1 {};
0 {}
96 {{{;};;}}
बोनस के लिए:
{};;;;; 5
{{;;;;};;} 72
c{u;r;l}y;! 9
42{;} ;;;; 8
नोट: कर्ली अभी तक लागू नहीं हुआ है। लेकिन अगर यह सवाल अच्छा है, तो मैं इसे और विकसित कर सकता हूं।