एक 3var दुभाषिया बनाओ!


24

3var एक प्रकार की डेडफ़िश है, जो A, B और R. A और B नामक तीन वेरिएबल्स का उपयोग करता है, जबकि संचायक होते हैं, जबकि R का उपयोग परिणाम चर के रूप में किया जाता है।

इस चुनौती में, आपको इस भाषा के एक स्ट्रिप-डाउन संस्करण के लिए एक दुभाषिया बनाने की आवश्यकता है।

आवश्यक कमांड:

i   Increments A
d   Decrements A
s   Squares A
p   Prints A
P   Prints the ASCII character of A
>   Sets A to R
a   Increments B
k   Decrements B
m   Squares B
o   Prints B
O   Prints the ASCII character of B
<   Sets B to R
+   Adds A and B, stores in R
-   Subtracts B from A, stores in R
*   Multiplies A and B, stores in R
/   Divides A by B, stores in R
w   Prints R
@   Resets A to 0
#   Resets B to 0
e   Resets R to 0

बाकी सब (व्हाट्सएप सहित) को नजरअंदाज कर दिया जाता है।

स्पष्टीकरण

  • oऔर pइसके बिना कुछ भी आउटपुट होना चाहिए।
  • विभाजन पूर्णांक विभाजन है।
  • 255 से ऊपर की संख्या और 0 से नीचे की संख्या समर्थित हैं।
  • 'w' को R के बाद स्पेस या न्यूलाइन का आउटपुट देना चाहिए
  • त्रुटियों के बिना 0 से विभाजन। (STDERR का कोई आउटपुट नहीं)
  • A, B और R शुरू में 0 हैं

नियम

  • यह इसलिए सबसे कम उत्तर जीतता है।
  • एक टाई की स्थिति में, सबसे पुराना उत्तर जीत जाता है।
  • फ़ाइल को कमांड लाइन तर्क या STDIN के माध्यम से प्रदान किया जाएगा।
  • किसी भी भाषा की अनुमति है।
  • Eval की अनुमति है।

परीक्षण के मामलों

Hello world! (Esolangs से लिया गया)

iisssaa/>e
maa->e#
aamam->e#
dddddddddddddddddddddddddPiiiiiiiiiiiiiiiiiiiiiiiii
iiiiPiiiiiiiPPiiiP
@#e
iis
aamaaaa
*>P
@#e
iisssaa/>e
maa->e#
aamam->e#
iiiiiiiiiiiiiiiiiiiiiiP
ddddddddP
iiiP
ddddddP
ddddddddP
@#e
iiss
aa*>
iP

आउटपुट 20spooky22me:

iipois+iis<-<aaaO<OkOOkkkkOP@#iippisa+<m+>PaO

आउटपुट 9P-1420 100 3Q-1 162 0:

iiispsdPkokmo/w<+w#aaaommO-w@ii*wew

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिख रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# Language Name, N bytes

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

# Ruby, <s>104</s> <s>101</s> 96 bytes

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फ़ाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक अंक अंतिम संख्या है:

# Perl, 43 + 2 (-p flag) = 45 bytes

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो लीडरबोर्ड स्निपेट में दिखाई देगा:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=63008,OVERRIDE_USER=45220;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


1
@ Sp3000 इसकी बात करें तो, मैंने हाल ही में दुभाषिया में नेस्टेड लूप बग को ठीक करने में मदद की है।
लीजनमोनमल 978

2
डेडफिश से परिचित लोगों के लिए अतिरिक्त स्पष्टीकरण: dddddp-5 में iiiisspपरिणाम और 256 में परिणाम जैसा कि आप अपेक्षा करेंगे, 0.
Sp3000

1
परीक्षण मामले में क्या खुराक rहै? अपने मान्य आदेशों की सूची में यह शामिल नहीं है
जिम्मीज़ज़क्स

1
@JimmyJazzx अब टेस्टकेस को संपादित किया गया है, लेकिन पूर्ण 3var भाषा में r सब कुछ रीसेट करता है। यह वैसा ही है @#e
डीजेगमर 9898 15:15

1
दुभाषिया शुरू होने पर A, B और R 0 से प्रारंभ होते हैं?
टोनी एननिस

जवाबों:


7

सीजेएम, 112

q{"+-*/dspP>@ikmoO<#awe"_@#\4<"X2 U|{TU :V;}P?"S/f*'T"( _*T cT;V;0)"2/f+":T;"f+_'Tf/'Uf*+"VS 0:V; "S/++=~}%Pa/0=

इसे ऑनलाइन आज़माएं

स्पष्टीकरण:

कार्यक्रम निष्पादित किए जाने वाले कोड के टुकड़ों की एक सरणी बनाता है, और प्रत्येक वर्ण के लिए संबंधित टुकड़े को निष्पादित करता है। विभाजन द्वारा शून्य से निपटना अधिक कठिन है, क्योंकि सीजेएम के पास अभी तक "ब्रेक" ऑपरेटर नहीं है। इसके बजाय, प्रोग्राम π को एक मार्कर के रूप में धकेलता है (चूंकि कोई फ़्लोटिंग पॉइंट नंबर अन्यथा प्रकट नहीं हो सकता है), और अंत में यह पहले π से पहले केवल आउटपुट रखता है।
साथ ही, प्रोग्राम A, B और R के बजाय V, T, U और V का उपयोग करता है, क्योंकि वे CJam में 0 के साथ पूर्व-निर्मित होते हैं।

q            read the input
{…}%         transform each character
  "…"        push a string with all the 3var commands, in a convenient order
  _@         duplicate the string and bring the current character to the top
  #          find the index of the character in the string (or -1 if not found)
  \          swap with the other string copy
  4<         keep only the first 4 characters ("+-*/")
  "…"        push a string that will be used for implementing those operators
  S/         split by space into ["X2" "U|{TU" ":V;}P?"]
  f*         join with each of '+', '-', '*', '/' -> 4 strings
  'T         push the 'T' character
  "…"        push a string with implementations of commands involving A
  2/         split into pieces of length 2
  f+         prepend 'T' to each piece
  ":T;"f+    append ":T;"to each piece
  _          duplicate the array (containing full A-command implementations)
  'Tf/       split each piece by the 'T' character
  'Uf*       join each split piece using the 'U' character
              practically replacing 'T' with 'U'
              to obtain B-command implementations
  +          concatenate the 2 arrays
  "…"        push a string containing implementations for "w" and "e", 
              separated by space; the string also ends with a space
  S/         split by space, obtaining the implementations for "w" and "e"
              and an empty string, for handling unrecognized characters
  ++         concatenate with the A and B command and +-*/ implementations
  =          get the corresponding string implementing the current command
              if the character was not found, -1 will get the empty string (no-op)
  ~          execute it
Pa/          split the array of results by the π separator
0=           get the first piece (before the first π, if any)

वास्तविक कमांड कार्यान्वयन (कार्यक्रम द्वारा निर्मित):

+: X2+U|{TU+:V;}P?    if (1+2)|U != 0, set V=T+U, else push π
-: X2-U|{TU-:V;}P?    if (1-2)|U != 0, set V=T-U, else push π
*: X2*U|{TU*:V;}P?    if (1*2)|U != 0, set V=T*U, else push π
/: X2/U|{TU/:V;}P?    if (1/2)|U != 0, set V=T/U, else push π
d: T( :T;             set T=T-1
s: T_*:T;             set T=T*T
p: TT :T;             push T and set T=T (no-op)
P: TcT:T;             push T converted to character and set T=T (no-op)
>: T;V:T;             push and pop T (no-op) and set T=V
@: T;0:T;             push and pop T (no-op) and set T=0
i: T):T;              set T=T+1
k: U( :U;             set U=U-1
m: U_*:U;             set U=U*U
o: UU :U;             push U and set U=U (no-op)
O: UcU:U;             push U converted to character and set U=U (no-op)
<: U;V:U;             push and pop U (no-op) and set U=V
#: U;0:U;             push and pop U (no-op) and set U=0
a: U):U;              set U=U+1
w: VS                 push V and a space
e: 0:V;               set V=0
(default): (empty)    no-op

10

जावास्क्रिप्ट (ईएस 7) 208 213 223 237 241 311

Edit3 एक दूसरे की नकल करते हुए, मैं और डेंड्रोबियम एक साथ टकरा रहे हैं।

Edit2 केवल 2 बाइट्स को बचाने के लिए EcmaScript 7 का उपयोग करके A और B को एक साथ संभालना शामिल हुआ

संपादित नियमों के परिवर्तन के बाद।

ध्यान दें, मैंने उस rकमांड को जोड़ा है जो प्रश्न में आवश्यक नहीं है, बस पुराने उदाहरण को चलाने के लिए नमस्ते दुनिया

V=p=>(o='',[for(c of'@#e'+p)eval('++x,--x,x*=x,x=R,x=0,o+=x,o+=String.fromCharCode(x),R=A+B,R=A-B,R=A*B,R=A/B|0,R=0,o+=R+` `'.replace(/x/g,(k='ids>@pP+-*/ewakm<#oO'.indexOf(c))<13?'A':'B').split`,`[k%13])],o)

// More readable
U=p=>(
  o='',
  [for(c of'@#e'+p)
   eval(
   '++x,--x,x*=x,x=R,x=0,o+=x,o+=String.fromCharCode(x),R=A+B,R=A-B,R=A*B,R=A/B|0,R=0,o+=R+` `'
   .replace(/x/g,(k='ids>@pP+-*/ewakm<#oO'.indexOf(c))<13?'A':'B')
   .split`,`[k%13])]
  ,o
)

// ES6, no array comprehension, 2 bytes more
W=p=>
  [...'@#e'+p].map(c=>
    eval(
    '++x,--x,x*=x,x=R,x=0,o+=x,o+=String.fromCharCode(x),R=A+B,R=A-B,R=A*B,R=A/B|0,R=0,o+=R+` `'
    .replace(/x/g,(k='ids>@pP+-*/ewakm<#oO'.indexOf(c))<13?'A':'B')
    .split`,`[k%13]),
    o=''
  )&&o

// Test
function test() 
{ 
  OUT.innerHTML = V(I.value) 
}

test()
textarea { width: 75%; height: 8em }
Test program <button onclick="test()">Run</button><br><textarea id=I>
iisssaa/>e
maa->e#
aamam->e#
dddddddddddddddddddddddddPiiiiiiiiiiiiiiiiiiiiiiiii
iiiiPiiiiiiiPPiiiP
@#e
iis
aamaaaa
*>P
@#e
iisssaa/>e
maa->e#
aamam->e#
iiiiiiiiiiiiiiiiiiiiiiP
ddddddddP
iiiP
ddddddP
ddddddddP
@#e
iiss
aa*>
iP
</textarea><br>Output<pre id=OUT></pre>


आप स्ट्रिंग को संसाधित करने से पहले वास्तविक 3var फ़ंक्शंस का उपयोग करके उन चर को हटाकर और सेट करके 2 बाइट्स बचा सकते हैं , जैसे :। A=B=R=0,[...'@#e'+p]
सम्मिलित

2
@insertusernamehere thx, मुझे यह बहुत पसंद है
edc65

8

जीएनयू सैड ( dcअभिव्यक्ति का मूल्यांकन करने के लिए स्पष्ट विकल्प के साथ ), 254

की एक सबसेट के लिए काफी हद तक डेडफिश नक्शे dc। तो हम उस मैपिंग को करने के लिए sed का उपयोग करते हैं:

s/^/@#e/
s/\+/AB+r/g
s/-/AB-r/g
s/\*/AB*r/g
s|/|AB/r|g
s/a/B1+b/g
s/i/A1+a/g
s/d/A1-a/g
s/s/Ad*a/g
s/p/An/g
s/P/AP/g
s/>/Ra/g
s/k/B1-b/g
s/m/Bd*b/g
s/o/Bn/g
s/O/BP/g
s/</Rb/g
s/w/Rn/g
s/@/0a/g
s/#/0b/g
s/e/0r/g
s/[ABR]/l&/g
s/[abr]/s\u&/g
s/.*/dc -e'&'/e

8

जावास्क्रिप्ट ईएस 6 ईएस 7, 217 215 213 208 बाइट्स

f=s=>(O='',[for(c of'@#e'+s)eval('v=0,++v,--v,v*=v,O+=v,O+=String.fromCharCode(v),v=R,R=0,R=A+B,R=A-B,R=A*B,R=A/B|0,O+=R+" "'.replace(/v/g,'AB'[(x='@idspP>e+-*/w#akmoO<'.indexOf(c))/13|0]).split`,`[x%13])],O)

Ungolfed

f=s=>(
    O='',                                                                   // initialize output to empty string
    [for(c of'@#e'+s)eval(                                                  // initialize A, B, and R, loop over all chars in input, eval returned function string
        'v=0,++v,--v,v*=v,O+=v,O+=String.fromCharCode(v),v=R,R=0,R=A+B,R=A-B,R=A*B,R=A/B|0,O+=R+" "' // operation list
            .replace(/v/g,'AB'[(x='@idspP>e+-*/w#akmoO<'.indexOf(c))/13|0]) // replace all instances of v with either A or B
            .split`,`[x%13])],                                              // split ops list, select corresponding function string
    O)                                                                      // return output string

1
+1 खदान से दूर नहीं, लेकिन बेहतर। अब मुझे कुछ अलग करने की कोशिश करनी होगी
edc65

1
आप स्ट्रिंग को संसाधित करने से पहले वास्तविक 3var फ़ंक्शंस का उपयोग करके उन चर को हटाकर और सेट करके 2 बाइट्स बचा सकते हैं , जैसे :। A=B=R=0,for(c of '@#e'+s)
सम्मिलित

1
@insertusernamehere अहा, बहुत चालाक, धन्यवाद!
डेंड्रोबियम

आपके उत्तर को संशोधित करते हुए, मैं देखता हूं कि आप कमांड के लिए एक नई w
पंक्ति का

@ edc65 स्पष्टीकरण गोलियों में से एक में कहा गया है कि "w 'को R के बाद एक स्थान या एक नई रेखा का उत्पादन करना चाहिए
Dendrobium

6

एपीएल, 191

{0::→⋄A B R←0⋄{⍵∊G←'aikdms<>':⍎'AB'[1+2|G⍳⍵],'+-*∘'[M],'←','112R'[M←⌈2÷⍨G⍳⍵]⋄⍵∊G←'PpOo':⍞←⎕UCS⍣(2|G⍳⍵)⊢A B[⌈2÷⍨G⍳⍵]⋄⍵∊G←'+-*/':R∘←⌊A(⍎'+-×÷'[G⍳⍵])B⋄⍵∊G←'@#e':⍎'ABR'[G⍳⍵],'∘←0'⋄⍵='w':⍞←R}¨⍵}

यह एक फ़ंक्शन है जो प्रोग्राम को तर्क के रूप में लेता है, जैसे:

      ∆3var←{0::→⋄A B R←0⋄{⍵∊G←'aikdms<>':⍎'AB'[1+2|G⍳⍵],'+-*∘'[M],'←','112R'[M←⌈2÷⍨G⍳⍵]⋄⍵∊G←'PpOo':⍞←⎕UCS⍣(2|G⍳⍵)⊢A B[⌈2÷⍨G⍳⍵]⋄⍵∊G←'+-*/':R∘←⌊A(⍎'+-×÷'[G⍳⍵])B⋄⍵∊G←'@#e':⍎'ABR'[G⍳⍵],'∘←0'⋄⍵='w':⍞←R}¨⍵}
      ∆3var 'iipois+iis<-<aaaO<OkOOkkkkOP@#iippisa+<m+>PaO'
20spooky22me

इसे एक अनाम फ़ंक्शन के रूप में उपयोग किया जा सकता है, मैंने इसे स्पष्टता के लिए एक नाम दिया है।

स्पष्टीकरण:

  • 0::→: यदि कोई त्रुटि होती है (जैसे, शून्य से विभाजन), त्रुटि संदेश को प्रिंट किए बिना रोकें
  • A B R←0: वैरिएबल को इनिशियलाइज़ करें
  • {... }¨⍵: प्रत्येक आदेश के लिए:

    • ⍵∊G←'aikdms<>': यदि कमांड एक प्रकार के var the fn (var, x) में से एक है , तो उचित fn और x ढूंढें , उन्हें विकल्प में बदलें और फिर उसका मूल्यांकन करें:
      • : मूल्यांकन करना
      • 'AB'[1+2|G⍳⍵: Aयदि की स्थिति में 'aikdms<>'भी है, Bअन्यथा।
      • '+-*∘'[M]: जोड़ने, घटाना, शक्ति, या कुछ भी नहीं, पर निर्भर करता है M(बाद में परिभाषित)
      • '←': असाइन करें
      • '112R'[M←⌈2÷⍨G⍳⍵]: 1(जोड़ने और घटाने के लिए), 2(शक्ति के लिए), और R(कुछ भी नहीं, यानी यह केवल चर सेट करता है R), इस पर निर्भर करता है M, कि क्या कमांड पहले, दूसरे, तीसरे या चौथे जोड़े से संबंधित है।
    • ⍵∊G←'PpOo'आउटपुट:
      • ⍞←: आउटपुट
      • ⎕UCS⍣(2|G⍳⍵): ASCII (अच्छी तरह से, यूनिकोड) या संख्या इस बात पर निर्भर करती है कि कमांड विषम या स्थिति में था या नहीं PpOo,
      • ⊢A B[⌈2÷⍨G⍳⍵]: Aया B, इस बात पर निर्भर करता है कि कमान पहले या दूसरे छमाही में थी या नहीं।
    • ⍵∊G←'+-*/: गणित:
      • R∘←⌊A(⍎'+-×÷'[G⍳⍵])B: Rदिए गए ऑपरेटर को Aऔर को लागू करने के परिणाम पर सेट करें B
    • ⍵∊G←'@#e': रीसेट:

      • : मूल्यांकन करना
      • 'ABR'[G⍳⍵]: सही चर का चयन करें
      • '∘←0': शून्य पर सेट
    • ⍵='w':⍞←R: यदि कमांड है w, आउटपुट R


4

सी, 253 241 बाइट्स

#define _ c--?c--?c--
k="id@s>ak#m<e+-*/wpoPO",*p;main(c,a,b,r){for(a=b=r=0;~c;c=getchar())c=strchr(k,c),c&&(c-=k,p=&a+c/5,*p=_?_?_?_?_?printf(c?c<3?"%d":"%c":"%d ",c?c%2?a:b:r):a/(b?b:exit()):a*b:a-b:a+b:0:r:b*b:0:b-1:b+1:r:a*a:0:a-1:a+1);}

यह कोड स्ट्रिंग id@s>ak#m<e+-*/wpoPOको आदेशों की तालिका के रूप में उपयोग करता है । स्ट्रिंग की गणना गणना की गई अभिव्यक्ति के गंतव्य के अनुसार की जाती है। यह सिर्फ इतना होता है कि 5 चर हैं जो प्रत्येक चर को अद्यतन करते हैं:

  • id@s> - अद्यतन करें a
  • ak#m< - अद्यतन करें b
  • e+-*/ - अद्यतन करें r
  • wpoPO- अद्यतन ... के बाद स्मृति स्थान a, bऔर r। मुझे आशा है कि यह बहुत महत्वपूर्ण नहीं है :)

इसलिए कमांड के स्ट्रिंग में इनपुट कैरेक्टर का पता लगाने के बाद, इसके इंडेक्स को बार-बार कम किया जाता है, और जब यह 0 तक पहुंचता है, तो इसके आधार पर एक एक्सप्रेशन चुना जाता है।

यदि यह 15 घटाव के बाद 0 तक नहीं पहुंचता है, तो यह printfकुछ ठीक से चुने गए तर्कों के साथ है।

इसके अलावा, विभाजित करते समय, यह कॉल करके 0 से विभाजन से बचता है exit()

इस कोड को अनुकूलन के बिना संकलित किया जाना चाहिए, क्योंकि यह मानता है कि a, bऔर rस्टैक पर आसन्न पते पर स्थित हैं (सीपीयू पंजीकरण में नहीं)।

साथ ही, इसे 32-बिट मोड में संकलित किया जाना चाहिए, क्योंकि यह पॉइंटर्स को पूर्णांक और इसके विपरीत में परिवर्तित करता है।


4

VBA, 484, 453 380 बाइट्स

जीतने के लिए लंबे समय के लिए लेकिन एक सुपर सरल तरीका है बातें, कुछ भी नहीं फैंसी सिर्फ अच्छा पुराना Select Case

इंटेगर डिवीज़न और डिव 0 एरर हैंडलिंग में बहुत सारे बाइट्स को जोड़ने से
एरर हैंडलिंग को हटा दिया जाता है क्योंकि ऐसा लगता है कि एक ही कार्यक्षमता में सामान्य त्रुटि हैंडलिंग परिणाम। उम्मीद के मुताबिक काम करने के लिए फिक्स्ड इंट डिवीजन। छोटा भी था।

Function Y(x)
For Z=1 To Len(x)
w=Mid(x,Z,1)
Select Case w
Case"i":A=A+1
Case"d":A=A-1
Case"s":A=A^2
Case"p":Y=Y &A
Case"P":Y=Y &Chr(A)
Case">":A=R
Case"a":B=B+1
Case"k":B=B-1
Case"m":B=B^2
Case"o":Y=Y &B
Case"O":Y=Y &Chr(B)
Case"<":B=R
Case"+":R=A+B
Case"-":R=A-B
Case"*":R=A*B
Case"/":R=A\B
Case"w":Y=Y &R &vbCrLf
Case"@":A=0
Case"#":B=0
Case"e":R=0
End Select
Next
End Function

31 104 बाइट बचाने के लिए हेनरिक इलगेन को धन्यवाद


2
नहीं पूरी तरह से यकीन है कि अगर (यह VB6 में करता है), लेकिन आप का उपयोग करके बाइट्स के एक झुंड को बचा सकता है VBA में इस काम करता है DefInt A-Z, जिससे स्पष्ट रूप से घोषित करने की जरूरत को छोड़ते हुए A, Bऔर Rके रूप में Integer: DefInt A-Z:Dim A, B, R। यह घोषणा के बिना, बस उन्हें असाइन करने के लिए काम कर सकता है A=0:B=0:R=0:। गणना को वेरिएंट पर भी काम करना चाहिए
हेनरिक इलगन

@HenrikIlgen धन्यवाद बहुत DefIntकुछ, मैं रोजाना इस्तेमाल होने वाली चीज़ के बारे में नहीं भूलता लेकिन भविष्य में सुपर उपयोगी गोल्फिंग VBA होने जा रहा हूं। अफसोस की बात A=0यह है कि यह मेरे परीक्षणों से दोहरे की तरह काम करेगा। वहाँ iiiaa/wएक दशमलव परिणाम का उत्पादन करने के लिए बल्कि एक पूरी।
जिम्मीजैक्स

1
पूर्णांक विभाजन के लिए प्रयास करें;)
हेनरिक इलगेन

1
आप इसे 405 बाइट्स तक सीमित कर सकते हैं यदि आप इसे एक फंक्शन बनाते हैं और रिजल्ट को "बिल्ड" करने के लिए रिटर्न वैल्यू का उपयोग करते हैं, तो आपको लगता है कि आपको वास्तव में परिणाम प्रिंट नहीं करना है :)
हेनरिक इलगेन

3

PHP, 310 बाइट्स

मेरे जीवन में पहली बार का उपयोग कर eval:

for($A=$B=$R=0;$c=$argv[1][$i++];)eval([i=>'++$A',d=>'--$A',s=>'$A*=$A',p=>'echo$A',P=>'echo chr($A)','>'=>'$A=$R',a=>'++$B',k=>'--$B',m=>'$B*=$B',o=>'echo$B',O=>'echo chr($B)','<'=>'$B=$R','+'=>'$R=$A+$B','-'=>'$R=$A-$B','*'=>'$R=$A*$B','/'=>'$R=$A/$B',w=>'echo$R','@'=>'$A=0','#'=>'$B=0',e=>'$R=0'][$c].';');

पहली कमांड लाइन इनपुट लेता है:

php 3var.php "iipois+iis<-<aaaO<OkOOkkkkOP@#iippisa+<m+>PaO"

उदाहरण से आउटपुट:

नमस्ते दुनिया!
20spooky22me


3

सी, 357

मैक्रों FTW!

(मैं कौन मज़ाक कर रहा हूँ - c यह कभी नहीं जीतेगा)

#define X(p,e) case p:e;break;
#define Y(p,a,b,c,d,e,f) X(a,p++)X(b,p--)X(c,p*=p)X(d,printf("%d",p))X(e,printf("%c",p%256))X(f,p=R)
A,B,R;main(int C,char**V){for(;*V[1];)switch(*V[1]++){Y(A,'i','d','s','p','P','>')Y(B,'a','k','m','o','O','<')X('+',R=A+B)X('-',R=A-B)X('*',R=A*B)X('/',R=A/(B?B:exit(0),1))X('w',printf("%d",R))X('@',A=0)X('#',B=0)X('e',R=0)}}

2

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

f=x=>(o="",a=b=r=0,p=String.fromCharCode,[...x].map(c=>{if(eval(`m={i_a++,d_a--,s_a*=a,p_o+=a,P_o+=p(a),">"_a=r,a_b++,k_b--,m_b*=b,o_o+=b,O_o+=p(b),"<"_b=r,"+"_r=a+b,"-"_r=a-b,"*"_r=a*b,"/"_r=a/b|0,w_o+=r,"@"_a=0,"#"_b=0,e_r=0}[c]`.replace(/_/g,":_=>")))m()}),o)

प्रयोग

f(`iisssaa/>e
maa->e#
aamam->e#
dddddddddddddddddddddddddPiiiiiiiiiiiiiiiiiiiiiiiii
iiiiPiiiiiiiPPiiiP
@#e
iis
aamaaaa
*>P
@#e
iisssaa/>e
maa->e#
aamam->e#
iiiiiiiiiiiiiiiiiiiiiiP
ddddddddP
iiiP
ddddddP
ddddddddP
@#e
iiss
aa*>
iP`)

=> "Hello world!"

व्याख्या

भाषा का कुछ विवरण है कि मैं अनिश्चित (पूर्णांक आकार, अपरिचित वर्णों से निपटने, आदि) के बारे में अनिश्चित हूं, लेकिन यह समाधान पर्याप्त रूप से काम करता है और परीक्षण के मामले में नई लाइनों की तरह व्हाट्सएप वर्णों की उपेक्षा करता है।

f=x=>(
  o="",                           // o = output string
  a=b=r=0,
  p=String.fromCharCode,
  [...x].map(c=>{                 // iterate through each character
    if(                           // if used for NOP characters (whitespace)

      // Functions:
      eval(`m={
        i_a++,
        d_a--,
        s_a*=a,
        p_o+=a,
        P_o+=p(a),
        ">"_a=r,
        a_b++,
        k_b--,
        m_b*=b,
        o_o+=b,
        O_o+=p(b),
        "<"_b=r,
        "+"_r=a+b,
        "-"_r=a-b,
        "*"_r=a*b,
        "/"_r=a/b|0,
        w_o+=r,
        "@"_a=0,
        "#"_b=0,
        e_r=0
      }[c]`.replace(/_/g,":_=>")) // dynamically add common characters

    )m()                          // execute the function
  }),
  o                               // return the output string
)

1
मुझे लगता है कि आप सभी :$=>को बदलने के साथ एक eval के भीतर शब्दकोश को संलग्न करके कुछ बाइट्स बचा सकते हैं $, फिर स्ट्रिंग के लिए एक प्रतिस्थापन जोड़ सकते हैं।
कॉनर ओ'ब्रायन

2

सिंप्लेक्स v.0.8 , 211 बाइट्स

(UTF-8 एन्कोडेड)

h@u]u2ƒ§I]ƒ§M]ƒ§^O]ƒ§o]ƒ§s]ƒ§@]ƒ§Ah]ƒ§Sh]ƒ§Mh]ƒ§Vh]ƒ§&oh]ƒðI]ƒðM]ƒð^O]ƒðo]ƒðs]ƒð@]ƒðAh]ƒðSh]ƒðMh]ƒðVh]ƒð&oh]ƒ§z]ƒðz]ƒuz@]{"idspP>akmoO<+-*/w@#e"RlyG^u·u†vøÏ}

व्याख्या

चूँकि यह अब तक का सबसे लंबा सिम्पलेक्स प्रोग्राम है, इसलिए मैं आमतौर पर समझाता हूँ कि यह बुलेट पॉइंट्स में कैसे काम करता है।

  • h@u] - मैक्रो को परिभाषित करता है। 0. यह मैक्रो केवल रजिस्टर में लिखता है और लंबोदर को कुछ नहीं देता है।
  • u2- उपरोक्त पट्टी पर जाता है और वर्तमान बाइट को 2 पर सेट करता है; यह परिभाषित किए जाने वाले लंबोदर की शुद्धता को परिभाषित करता है।
  • ƒ- लैम्ब्डा अभिव्यक्ति शुरू करें; एक बार पूरा होने के बाद ], लैम्ब्डा फ़ंक्शन को लैम्ब्डा स्टैक पर धकेल देगा। यह पॉइंटर से कोशिकाओं को अपने स्थानीय पट्टी में ले जाने (एरीटी) द्वारा कार्य करता है, और पूरा होने के बाद, अपनी स्थानीय पट्टी को ले जाने वाली कोशिकाओं में सेट कर देगा, जब तक कि वर्तमान बाइट अलिखित नहीं है। सूचक प्रभावित नहीं होता है। मैक्रो 0 एक फ़ंक्शन को स्ट्रिप में कुछ भी संशोधित किए बिना वापस जाने की अनुमति देता है।
  • §- वर्तमान पट्टी में पहले लिखित सेल में ले जाता है यानी A
  • ð- वर्तमान पट्टी में अंतिम लिखित सेल में ले जाता है यानी B
  • ... {"idspP>akmoO<+-*/w@#e"RlyG^u·u†vøÏ}
    • {...Ï} इनपुट स्टैक खाली होने तक दोहराएं
    • "idspP>akmoO<+-*/w@#e" - आज्ञा
    • Rly - पट्टी को टुपल में डालें
    • G^u - टपल में इनपुट का सूचकांक
    • ·- लैम्बडा मूल्यांकनकर्ता में वर्तमान बाइट वें को लोड करें
    • uRL- पट्टी धारण करने के लिए चला जाता है Aऔर B(राईट Aऔर Bअगर वे ऐसा नहीं करते मौजूद हैं)
    • - लैम्ब्डा निष्पादित करता है (यह लैम्ब्डा मूल्यांकनकर्ता है)
    • - पट्टी के नीचे रीसेट करता है

ओफ़्फ़ मैं प्रभावित हूँ। यह सिम्पलेक्स के लिए लंबा है, लेकिन बाकी सब के लिए छोटा है।;)


2

मिंकोलंग 0.11 , 222 बाइट्स

मुझे यकीन है कि इसे आगे बढ़ाया जा सकता है, लेकिन यह मजेदार था। इसके अलावा, दूसरी भाषा का पहला मिन्कोलैंग दुभाषिया!

>I3&000V$Vod?.45*[di1q=5&]x00wx1i2+kw
idspP>akmoO<+-*/w@#e
vr1+r
vr1-r
vr2;r
v0c1$((dl%"0"+$rl:d)$Ok
v0cO
vrx0cr
v1g1+1G
v1g1-1G
v1g2;1G
v1c1$((dl%"0"+$rl:d)$Ok
v1cO
v1gxd1G
vx$d+
vx$d-
vx$d*
vx$dd?.:
vdN
vrx0r
v1gx01G
vx0

इसे यहाँ आज़माएँ।

व्याख्या

>I3&000                    Initializes A, B, and R if they don't already exist.
V$V                        An idiom that ensures no time-travel.
od?.                       Reads in a character and halts if input is empty.
45*[di1q=5&]               Looks through the second row for a matching character.
            x00w           Jumps back to beginning if no match.
                x1i2+kw    Jumps to corresponding line upon match.

बाकी रेखाएं बहुत सरल हैं, शायद उन लोगों के अपवाद के साथ 1$((dl%"0"+$rl:d)$Ok, जो एक मुहावरा है जो एक निशान वाली जगह के बिना एक नंबर प्रिंट करता है। (मैंने अभी तक कन्वर्ट-इस-टू-द-टू-स्ट्रिंग कार्यक्षमता को लागू नहीं किया है, जो होगा 1Z।) ओह, हाँ, वे सभी vशुरुआत में हैं, जो इसे शुरुआत में वापस ले जाता है।


2

GNU Sed (dc अभिव्यक्ति का मूल्यांकन करने के लिए स्पष्ट विकल्प के साथ), 289

डिजिटल ट्रॉमा से प्रेरित, जो उदास रूप से यह महसूस करने में विफल रहा कि ए) अवैध पात्रों को नजरअंदाज करने की जरूरत है, बी) डीसी को एक तर्क में पूरे परिवर्तित कार्यक्रम की आवश्यकता है और 0 से विभाजन) को त्रुटि के बिना कार्यक्रम को समाप्त करना चाहिए।

यदि ये सभी नियम लागू नहीं होंगे, तो मेरा समाधान केवल 235 बाइट्स लंबा होगा;)

H
$!d
x
s/^/@#e/
s:[^-a><de/+i*k@w#opsmOP]::g
s:[e@#]:0&:g
s:[-*+/pPid]:Q&:g
s:[-kaoO*+/]:H&:g
s:[><w]:Z&:g
s:[diak]:1&:g
s:s:Q2^>:g
s:m:H2^<:g
s:[-+*/]:&e:g
s:[ia]:+&:g
s:[dk]:-&:g
y:Oop:Pnn:
s:w:n32P:g
s:[id>@]:sq:g
s:e:sz:g
s:[#<ka]:sh:g
s:[QHZ]:l\l&:g
s:/:d0=t/:g
s/.*/dc -e'[q]st&'/e

2

AWK, 311 309

func p(z,f,x){if(c~z)printf"%"f,x}BEGIN{FS=z}{for(i=0;++i<=NF;){c=$i;A=c~/i/?A+1:c~/d/?A-1:c~/s/?A*A:c~/@/?0:c~/>/?R:A;p("p","d",A);p("P","c",A);B=c~/a/?B+1:c~/k/?B-1:c~/m/?B*B:c~/#/?0:c~/</?R:B;p("o","d",B);p("O","c",B);R=c~/+/?A+B:c~/-/?A-B:c~/*/?A*B:c~/e/?0:R;if(c~"/")if(B)R=A/B;else exit;p("w","d ",R)}}

प्रिंट के आसपास टीआईएल कोष्ठक की जरूरत नहीं थी। 2 बाइट बचाई!

आसान पढ़ने के लिए अनप्लग्ड संस्करण:

func p(z,f,x) {
    if(c~z) printf "%"f,x
}

BEGIN {
    FS=z
}

{
    for(i=0;++i<=NF;){
        c=$i;
        A=c~/i/?A+1:c~/d/?A-1:c~/s/?A*A:c~/@/?0:c~/>/?R:A;
        p("p","d",A);
        p("P","c",A);
        B=c~/a/?B+1:c~/k/?B-1:c~/m/?B*B:c~/#/?0:c~/</?R:B;
        p("o","d",B);
        p("O","c",B);
        R=c~/+/?A+B:c~/-/?A-B:c~/*/?A*B:c~/e/?0:R;
        if(c~"/")if(B)R=A/B;else exit;
        p("w","d ",R)
    }
}

1

अजगर 2, 272

import sys;a,b,r=0,0,0;exec';'.join(filter(None,map(dict(x.split(':')for x in"a:b+=1|@:a=0|#:b=0|/:r=a/b|d:a-=1|PXchr(a)|i:a+=1|-:r=a-b|k:b-=1|*:r=a*b|m:b*=b|oXb|pXa|s:a*=a|OXchr(b)|wXr|+:r=a+b|e:r=0|<:b=r|>:a=r".replace('X',':print ').split('|')).get,sys.stdin.read())))

यह काम नहीं करता है। आपके printकथनों में एक अनुगामी न्यूलाइन शामिल है।
ग्रिफिन

1

रूबी, 199 बाइट्स

a=b=r=0
$<.read.chars{|c|eval %w{a+=1
a-=1
a*=a
$><<a
$><<a.chr
a=r
b+=1
b-=1
b*=b
$><<b
$><<b.chr
b=r
r=a+b
r=a-b
r=a*b
b==0&&exit||r=a/b
puts\ r
a=0
b=0
r=0
p}["idspP>akmoO<+-*/w@#e".index(c)||-1]}

5 बाइट्स .readको दूसरी पंक्ति से हटाकर बचाया जा सकता है, अगर आप रूबी के नए संस्करण पर stderr पर मुद्रित होने वाली चेतावनी को सहन कर सकते हैं।



1

प्रोलॉग, 759 बाइट्स

सबसे छोटा कार्यक्रम नहीं, लेकिन कम से कम यह संरचित और पठनीय है।

q(A,B,R,i,X,B,R):-X is A+1.
q(A,B,R,d,X,B,R):-X is A-1.
q(A,B,R,s,X,B,R):-X is A*A.
q(_,B,R,>,R,B,R).
q(A,B,R,a,A,X,R):-X is B+1.
q(A,B,R,k,A,X,R):-X is B-1.
q(A,B,R,m,A,X,R):-X is B*B.
q(A,_,R,<,A,R,R).
q(A,B,_,+,A,B,X):-X is A+B.
q(A,B,_,-,A,B,X):-X is A-B.
q(A,B,_,*,A,B,X):-X is A*B.
q(_,0,_,/,_,_,_):-!,1=2.
q(A,B,_,/,A,B,X):-B>0,X is A/B.
q(_,B,R,@,0,B,R).
q(A,_,R,#,A,0,R).
q(A,B,_,e,A,B,0).
q(A,B,R,p,A,B,R):-write(A).
q(A,B,R,'P',A,B,R):-A>0,format('~c',A).
q(A,B,R,'P',A,B,R):-write(A).
q(A,B,R,o,A,B,R):-write(B).
q(A,B,R,'O',A,B,R):-format('~c',B).
q(A,B,R,'O',A,B,R):-write(B).
q(A,B,R,w,A,B,R):-write(R),nl.
q(A,B,R,_,A,B,R).
f([],_,_,_).
f([H|T],A,B,R):-q(A,B,R,H,X,Y,Z),f(T,X,Y,Z),!.
p(X):-atom_chars(X,Y),f(Y,0,0,0).

उदाहरण इनपुट

p('iipois+iis<-<aaaO<OkOOkkkkOP@#iippisa+<m+>PaO').

इसे यहाँ ऑनलाइन देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.