स्ट्रिंग हेरफेर दुभाषिया


11

सारांश

केवल पात्रों का उपयोग करके एक नई स्ट्रिंग हेरफेर भाषा बनाई गई है $+#-!*|@>! आपका कार्य संभव है कि इसके लिए कुछ बाइट्स में एक दुभाषिया लागू किया जाए।

इनपुट

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

उत्पादन

जो भी भाषा का उत्पादन होगा, नीचे विनिर्देशन। आपको एक स्ट्रिंग को किसी भी उचित तरीके से (स्टडआउट, फंक्शन आउटपुट, आदि) या एक वैरिएबल वैल्यू में आउटपुट करना होगा। जब भाषा स्पष्ट रूप से आउटपुट करती है, तो इसे stdout में जाना चाहिए । मानक खामियों पर रोक लगाई जाती है।

भाषा विनिर्देश

प्रसंस्करण और सिंटेक्स

भाषा में प्रसंस्करण का एक बहुत ही सरल रूप है क्योंकि यह केवल स्ट्रिंग हेरफेर करता है: यह एक खाली स्ट्रिंग ( "") के साथ शुरू होता है , और प्रत्येक शब्द के साथ इसे बदलता है। एक शब्द एक या दो भागों से बना होता है: एक फ़ंक्शन (नीचे) जिसके बाद संभवतः एक पैरामीटर (नीचे) होता है, जो उसके व्यवहार को संपादित करता है। शर्तों को पाइप ( |) द्वारा अलग किया जाता है । आप मान सकते हैं कि यह एक खाली कार्यक्रम नहीं होगा, और कोई शब्द खाली नहीं होगा। आपको प्रोग्राम के अंत में वैल्यू आउटपुट करना चाहिए।

कार्य

भाषा के केवल 6 कार्य हैं, जैसा कि नीचे दिखाया गया है। प्रत्येक फ़ंक्शन या तो एक या शून्य पैरामीटर स्वीकार करता है।

  • + समतल तार (एक स्ट्रिंग पैरामीटर लेता है, इसे वर्तमान मान तक पहुंचाता है)
  • ! वर्तमान मूल्य के वर्ण क्रम को उल्टा करें (कोई पैरामीटर नहीं)
  • * स्ट्रिंग को दोहराएं (एक पूर्णांक पैरामीटर लेता है, वर्तमान मूल्य को कई बार दोहराता है)
  • - मान की सभी आवृत्तियों को निकालता है (एक स्ट्रिंग पैरामीटर लेता है, इसके सभी आवृत्तियों को वर्तमान मान से निकाल देता है)
  • $ [छद्म-] बेतरतीब ढंग से वर्तमान मूल्य (कोई पैरामीटर नहीं) फेरबदल
  • <आउटपुट वर्तमान मान stdout(कोई पैरामीटर नहीं)

मान

ये वे मान हैं जो फ़ंक्शन में दिए जा सकते हैं, जो रेगेक्स द्वारा दर्शाए गए हैं जो उनसे मेल खाएंगे:

  • @[^|]*एक स्ट्रिंग शाब्दिक, जिसमें पाइप के अलावा कोई भी चरित्र शामिल है। यह खाली हो सकता है।
  • #[0-9]+ पूर्णांक शाब्दिक
  • >की अगली पंक्ति stdin। यदि के साथ प्रयोग किया जाता है *, तो पूर्णांक में बदलें।

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

╔════════════════════════╤═════════════╤══════════════╗
║code                    │input        │output        ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*>         │13           │31hello31hello║
║                        │2            │              ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$          │hello        │hcloeebafdlg  ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|->     │w            │h areyu       ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3             │             │out           ║
║                        │             │outoutout     ║
╟────────────────────────┼─────────────┼──────────────╢
║+>                      │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l       ║
║                        │             │A|$o $pe<!@|  ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|<                │input text   |              ║
║                        │             │txet tupni    ║ 
║                        │             │txet tupni    ║
╟────────────────────────┼─────────────┼──────────────╢
║+@>#                    │             |>#            ║
╚════════════════════════╧═════════════╧══════════════╝

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

उदाहरण (अन-गोल्फ) अजगर दुभाषिया

इसे ऑनलाइन आज़माएं! IMO बेहतर है यदि आप इसे IDLE या आपके द्वारा उपयोग किए जाने वाले माध्यम से चलाते हैं। (मैंने इसे 424 बाइट्स के बाद नीचे कर दिया, लेकिन मुझे यकीन है कि आप बहुत कुछ बेहतर कर सकते हैं)।


2
एक चर में पहले से ही इनपुट की अनुमति गैर-मानक है, जैसा कि आउटपुट को एक में रखने की अनुमति देता है।
जोनाथन एलन

आपका उदाहरण एक नईलाइन प्रिंट करना प्रतीत होता है जो हर बार <सामने आती है। क्या यह अनिवार्य है?
अज्ञान

क्या कार्यक्रम में नयापन होगा? क्योंकि यदि यह हो सकता है, तो यह चास ब्राउन के उत्तर को अमान्य कर देता है
अज्ञान

2
अपने भविष्य के सवालों के लिए, कृपया बोझिल I / O प्रारूपों से बचने पर विचार करें । स्टडिन के लिए इनपुट को सीमित करने से कुछ भाषाओं में अतिरिक्त बाइट का खर्च होता है और यह चुनौती के लिए बहुत कुछ नहीं लाता है।
अरनुलद

1
@digEmAll मैं अभी कैसे एक जोड़ा +@>#,? मैंने #अस्वस्थ किया ।
आर्टेमिस अभी भी

जवाबों:


3

रूबी -palF\| , 146 142 बाइट्स

r='';$F.map{|i|x=i[1]!=?>?i[2..-1]:gets.chomp;eval %w[r.reverse! r*=x.to_i 0 $><<r r=r.chars.shuffle*'' r.gsub!x,'' r+=x][i[0].ord*5%11]};$_=r

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

पोर्ट ऑफ चास ब्राउन का पायथन उत्तर । आउटपुट के बाद नए अंक नहीं छापता है।

हमेशा की तरह, रूबी 2.6 संस्करण अंतहीन रेंज इंडेक्सिंग ( i[2..]) के साथ 2 बाइट्स छोटा होगा ।


6

आर , 287 286 273 269 ​​बाइट्स

function(C,x='',`[`=gsub,`!`=intToUtf8,`?`=utf8ToInt){for(k in el(strsplit(C,'\\|'))){B=eval(parse(t='^.'['','(?<=.)>$'['readLines(,1)','[@#](.+)'['"\\1"',k],,T]]));x=switch((?substr(k,1,1))%%13-2,strrep(x,B),paste0(x,B),,B['',x,f=T],!rev(?x),print(x),,!sample(?x))};x}

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

  • -1 धन्यवाद @Kirill एल।
  • -4 @Giuseppe को धन्यवाद

अनियंत्रित कोड और स्पष्टीकरण:

function(C){                                      # C is the string manipulation expression
  x = ''                                          # initialize x = ''
  tokens = el(strsplit(C,'\\|'))                  # split C by pipe '|'
  for(k in tokens){                               # for each token k
    arg2 = k
    arg2 = gsub('[@#](.+)','"\\1"',k)             # replace @X or #X with "X" (in quotes)
    arg2 = gsub('(?<=.)>$','"readLines(,1)"',
                 arg2,perl=T)                     # replace > with readLines(,1)
    arg2 = gsub('^.','',arg2)                     # remove the first character
    B = eval(parse(t=arg2))                       # evaluate the string : this will be our 
                                                  # second argument B
    A = substr(k,1,1)                             # take the first character : 
                                                  # i.e. the main command (+,-,! etc)
    x = switch(A,                                 # switch on the main command, execute the 
            '+'=paste0(x,B),                      # corresponding expression and 
            '!'=intToUtf8(rev(utf8ToInt(x))),     # store the result into x
            '*'=strrep(x,B),                      # Note: in the actual code we switch on
            '-'=B['',x,f=T],                      # the utf8 value MOD 13-2 of the command
            '$'=intToUtf8(sample(utf8ToInt(x))),
            '<'=print(x)
        )
    }
    x                                             # return x (and print it implicitly)
}

3

पायथन 2 , 215 219 209 208 बाइट्स

from random import*
I=raw_input;o=''
for t in I().split('|'):p=t[1:]=='>'and I()or t[2:];exec"o=o[::-1] o*=int(p) 0 print(o) o=''.join(sample(o,len(o))) o=o.replace(p,'') o+=p".split()[ord(t[0])*5%11]
print o

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

-4 क्योंकि raw_inputआवश्यक है।

9 बाइट्स अज्ञानता के अवतार के लिए धन्यवाद ; असि-केवल से 1 बाइट ।


कार्यक्रम के अलावा अन्य इनपुट इनपुट से होना चाहिए, जैसा कि प्रश्न में निर्दिष्ट है।
आर्टेमिस अभी भी एसई

मैं पायथन 3 का उपयोग करता हूं, लेकिन जहां तक ​​मुझे जानकारी थी, इनपुट के उपयोग की आवश्यकता है raw_input। अगर मैं गलत हूं तो मुझे सुधारें ..
आर्टेमिस अभी भी

Py 2.7 डॉक्स के अनुसार: input([prompt])eval के बराबर (raw_input (शीघ्र))। यह फ़ंक्शन उपयोगकर्ता त्रुटियों को नहीं पकड़ता है। यदि इनपुट सिंथेटिक रूप से मान्य नहीं है, तो एक SyntaxError उठाया जाएगा।
आर्टेमिस अभी भी एसई

इसलिए, आप जिस मुद्दे को उठा रहे हैं , वह कुछ इस तरह है , जहाँ इनपुट स्ट्रिंग्स को उद्धृत करना होगा - बल्कि 'सही' स्टैडेन स्थिति में। फिर, आमतौर पर I / O नियम थोड़े ढीले होते हैं; लेकिन मैं संशोधित करूंगा।
चास ब्राउन

बदलने के लिए धन्यवाद। आप पायथन 3 को बदलकर और कोष्ठक के लिए अपने पुराने कोड + 3 बाइट्स का उपयोग करके कुछ बाइट्स बचा सकते हैं, लेकिन ... +1 कहीं भी
आर्टेमिस अभी भी एसई

2

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 305 बाइट्स

a=>{string s="",d,g;foreach(var c in a.Split('|')){g=$"{c,2}";d=g[1]==62?ReadLine():g.Substring(2);var z=c[0]%14;s=z<1?string.Concat(Enumerable.Repeat(s,int.Parse(d))):z<2?s+d:z<4?s.Replace(d,""):z<5?s:z<6?string.Concat(s.Reverse()):string.Concat(s.OrderBy(_=>Guid.NewGuid()));Write(z==4?s:"");}return s;}

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



1

जावास्क्रिप्ट, 292 267 बाइट्स

f=(p)=>{c='';p.split`|`.map(l=>{v=l.substr(2);v=l[1]=='#'?parseInt(v):l[1]=='>'?prompt():v;c={'+':_=>c+v,'-':_=>c.split(v).join``,'*':_=>c.repeat(v),'$':_=>[...c].sort(_=>.5-Math.random()).join``,'!':_=>[...c].reverse().join``,'<':_=>alert(c)||c}[l[0]]();});return c}

JSFiddle


टेस्ट केस 6 काफी काम नहीं करता ...
आर्टेमिस अभी भी

1
@ArtemisFowl, धन्यवाद, रेगेक्स सही ढंग से काम नहीं कर रहा था और विभाजित करने के लिए स्विच कर रहा था..जबकि एक-दो बाइट बच गई।
जोहान डु टिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.