व्याख्या दोहराव!


11

यह चुनौती दोहराव के बारे में दो-चुनौती श्रृंखला में पहली है। दूसरा जल्द उठ जाएगा।

पुनरावृत्ति नामक एक भाषा में (जिसे मैंने अभी-अभी बनाया है), इसमें हमेशा के लिए दोहराने के 12345678901234567890...साथ एक अनंत स्ट्रिंग होती 1234567890है।

निम्नलिखित सिंटैक्स आउटपुट नंबरों के लिए उपलब्ध है:

  • +-*/: यह ऑपरेटर को दोहराए जाने वाले अंकों की स्ट्रिंग में सम्मिलित करता है।
    • उदाहरण:
      • +-> 1+2= 3( +एक आवेषण +के बीच 1और 2)
      • +*-> 1+2*3= 1+6= 7(जैसा कि ऊपर कहा गया है, दो ऑपरेटरों को छोड़कर अब उपयोग किया जाता है)
      • /-> 1/2= 0(पुनरावृत्ति पूर्णांक विभाजन का उपयोग करता है)
      • //-> 1/2/3= 0/3= 0(पुनरावृत्ति कई घटाव और विभाजन के साथ "बाएं संघ" का उपयोग करता है)
    • प्रत्येक ऑपरेटर को डाला जाता है ताकि उसके बाईं ओर एक अंक हो, जब तक कि c(नीचे देखें) न हों।
  • c: स्ट्रिंग में अगले अंक के साथ संबंधित है।
    • उदाहरण:
      • c+-> 12+3= 15( c"जारी है" 1और इसे अगले अंक के साथ समेटता है 2, बनाने के लिए 12)
      • +c-> 1+23=24
      • ccc -> 1234
  • (): प्रसंस्करण संख्या के लिए ब्रैकेट।
    • उदाहरण:
      • (c+)*-> (12+3)*4= 15*4= 60(दोहराव संचालन के क्रम का उपयोग करता है)
      • (c+)/c-> (12+3)/45= 15/45=0
      • (cc+c)/-> (123+45)/6= 168/6=28
  • s: एक संख्या छोड़ें (अनंत स्ट्रिंग से संख्या हटाता है)।
    • s+-> 2+3= 5( sस्किप्प 1)
    • csc-> 124(प्रथम cconcats 1और 2, sछोड़ने 3, और अंतिम cconcats 12लिए 4)
    • +s+-> 7(प्रथम +कहते हैं 1और 2बनाने के लिए 3, sछोड़ने 3, और अंतिम +कहते हैं 3करने के लिए 4बनाने के लिए 7)
    • cs*(++)-> 12*(4+5+6)= 12*15=180

ऊपर के उदाहरणों में, अनंत स्ट्रिंग में केवल परिमित मात्राओं का उपयोग किया जाता है। उपयोग किए गए अंकों की संख्या के बराबर है number of operators, concats and skips + 1

आपका कार्य, जब पुनरावृत्ति कोड की एक स्ट्रिंग दी जाती है, तो परिणाम को आउटपुट करता है।

इनपुट और आउटपुट के उदाहरण हैं:

++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180

यह कोड गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है!

चश्मा:

  • आपको गारंटी दी जाती है कि परिणाम कभी ऊपर नहीं जाएगा 2^31-1
  • आपको यह भी गारंटी है कि इनपुट केवल प्रतीकों से मिलकर बनेगा +-*/cs()
  • एक खाली प्रोग्राम आउटपुट देगा 1

~एस के बारे में क्या ? हमें फांसी मत छोड़ो।
रॉबर्ट फ्रेजर

@RobertFraser वूप्स, वह एक गलती थी - c मूल रूप से ~ था, लेकिन ऐसा प्रतीत होता है कि मैंने इसे पूरी तरह से ठीक नहीं किया है।
क्लिस्मिक

1
@ टोनहॉउस ऊह, आपको वहां एक अच्छा बिंदु मिला है। "S" प्रतीक अनिवार्य रूप से उस संख्या को हटा देता है जिसे वह अनंत स्ट्रिंग से पूरी तरह से जुड़ा हुआ है, इसलिए यह दोनों परिदृश्यों के लिए हां है।
clismique

2
आपका विनिर्देश हालांकि कहता s+है 2+3कि इसका पहला उदाहरण है। और अभी भी sमुझे गुस्सा दिलाता रहता है। मुझे आश्चर्य है कि कैसे +s()+फैलता है। अगर ऐसा है 1+(2)+4तो (पहले भी आता है, 2लेकिन sइससे पहले भी लगता है कि (अभी भी रुकता है 3, नहीं 2। यदि परिणाम 1+(3)+4फिर भी होता है, तो उसके बाद आने वाले परिणाम sपर निर्भर करता है (तुलना के साथ +s+)
टन हास्पेल

1
scहै 23और s+है 1+3? करता है sको छोड़ 1अब या 2? सभी उदाहरण ऑपरेंड पर पहले ऑपरेशन का उपयोग करते हैं 1और 2... ऐसा scहोना चाहिए 13
टाइटस

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 110 बाइट्स

s=>eval((" "+s)[R='replace'](/[^\)](?!\()/g,x=>x+i++%10,i=1)[R](/c| (\ds)+|s\d/g,"")[R](/\d+\/\d+/g,"($&|0)"))

बहुत सरल, लेकिन पूर्णांक विभाजन 25 बाइट्स जोड़ता है। किसी कारण के लिए जेएस में एक रेक्सक्स एक स्ट्रिंग और पहले चरित्र की शुरुआत दोनों से मेल नहीं खा सकता है, इसलिए कुछ बाइट्स भी जोड़ता है।

यह काम किस प्रकार करता है

  1. इनपुट के लिए एक स्थान तैयार करें।
  2. प्रत्येक वर्ण के लिए अगला अंक जोड़ें (सिवाय इसके )) जो तुरंत पहले नहीं है (
  3. प्रत्येक c, sशुरुआत में एक अंक + ( 1s2-> 2) निकालें , और प्रत्येक s+ एक अंक ( 3s4-> 3)।
  4. प्रत्येक डिवीजन ऑपरेशन को इंट-डिवीजन ( 1/2-> (1/2|0)) में बदल दें।
  5. मूल्यांकन और वापसी।

ठीक है ... आपके कार्यक्रम में एक बग है ... ss+रिटर्न 6, जब इसे वापस करने का मतलब है 7(दो sका स्किप 1और 2, इसलिए +जोड़ता है 3और 4)।
clismique

@ Qwerp-Derp धन्यवाद, निश्चित।
ETHproductions

कुछ ऐसा /^|,|$/gहोगा जो शुरुआत में केवल एक बार मैच करेगा क्योंकि दोनों मैचों में एक ही सूचकांक होगा। $एक ही समस्या नहीं है क्योंकि मैच में किसी भी अन्य संभावित मैच की तुलना में अधिक सूचकांक है।
नील

0

बैच, 332 बाइट्स

@echo off
set s=
set e=
set d=
set r=
set/ps=
:d
set/ad=-~d%%10
:l
if "%s%"=="" goto g
set c=%s:~0,1%
set s=%s:~1%
if %c%==( set e=%e%(&goto l
if %c%==) set r=%r%)&goto l
if %c%==s goto d
if %c%==c set c=
if "%r%"=="" set/ar=d,d=-~d%%10
set e=%e%%r%%c%
set/ar=d
goto d
:g
if "%r%"=="" set/ar=d
cmd/cset/a%e%%r%

इस का व्यवहार sबहुत अजीब बनाता है। (हो सकता है कि csकरने के लिए मूल्यांकन करना चाहिए 13और -sकरने के लिए -2?) चर:

  • s इनपुट स्ट्रिंग (यदि आप कुछ भी इनपुट नहीं करते हैं तो सेट / पी परिवर्तनशील नहीं है क्योंकि स्पष्ट रूप से खाली हो गया है)
  • eसामान्य पूर्णांक अंकगणित में आंशिक अभिव्यक्ति (जिसे हम set/aएक रूप में पास कर सकते हैं eval)
  • d अंकों के अनंत स्ट्रिंग से अगला अंक
  • rनवीनतम ऑपरेटर का दाहिना हाथ। हम इसे तुरंत समाप्त नहीं कर सकते क्योंकि (पहले आने की जरूरत है, लेकिन हमें इसे स्टोर करने की आवश्यकता है ताकि sयह वृद्धि न हो। सौभाग्य से यह )थोड़ा आसान की हैंडलिंग को समाप्त करता है।
  • c वर्तमान चरित्र।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.