স্ট্রিং ম্যানিপুলেশন ইন্টারপ্রেটার


11

সারসংক্ষেপ

শুধুমাত্র অক্ষর ব্যবহার করে একটি নতুন স্ট্রিং ম্যানিপুলেশন ভাষা তৈরি করা হয়েছে $+#-!*|@> ! আপনার কাজটি হ'ল তার পক্ষে একজন দোভাষীকে যথাসম্ভব কম বাইটে প্রয়োগ করা।

ইনপুট

একটি স্ট্রিং, যা এই ভাষার একক লাইন। এটি কোনও যুক্তিসঙ্গত উপায়ে নেওয়া যেতে পারে (স্টিডিন, ফাংশন প্যারামিটার, কমান্ড লাইন আর্গুমেন্ট ইত্যাদি), বা পূর্বনির্ধারিত পরিবর্তনশীল হিসাবে। প্রোগ্রামটি যদি ব্যবহারকারীদের ইনপুট চেয়ে থাকে তবে স্টিডিনের কাছ থেকে জিজ্ঞাসিত সমস্ত ব্যবহারকারী ইনপুট গ্রহণ করুন এবং কিছুই নিচে দেখুন। আপনি ধরে নিতে পারেন এটি একটি বৈধ প্রোগ্রাম।

আউটপুট

ভাষা আউটপুট যাই হোক না কেন, নীচে নির্দিষ্টকরণ। আপনার অবশ্যই কোনও স্ট্রিং আউটপুট দিতে হবে, কোনও যুক্তিসঙ্গত উপায়ে (স্টাডআউট, ফাংশন আউটপুট, ইত্যাদি), অথবা একটি পরিবর্তনশীল মান। যখন ভাষা স্পষ্টভাবে আউটপুট দেয়, এটি অবশ্যই স্টডআউটে যেতে হবে। স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।

ভাষা বিশেষ উল্লেখ

প্রসেসিং এবং সিনট্যাক্স

ভাষার প্রক্রিয়াজাতকরণের একটি খুব সাধারণ রূপ রয়েছে কারণ এটি কেবল স্ট্রিং ম্যানিপুলেশন করে: এটি একটি খালি স্ট্রিং ( "") দিয়ে শুরু হয় এবং প্রতিটি পদ দিয়ে এটি পরিবর্তন করে। একটি শব্দ দুটি বা দুটি অংশ নিয়ে গঠিত: একটি ফাংশন (নীচে) সম্ভবত একটি প্যারামিটার (নীচে), যা তার আচরণ সম্পাদনা করে। শর্তাদি পাইপ ( |) দ্বারা পৃথক করা হয় । আপনি ধরে নিতে পারেন এটি কোনও খালি প্রোগ্রাম হবে না এবং কোনও পদ খালি থাকবে না। আপনি প্রোগ্রাম শেষে মান আউটপুট করা উচিত।

ক্রিয়াকলাপ

ভাষার কেবল 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 এলোমেলো, সুতরাং এর মধ্যে অক্ষরের যে কোনও ক্রম বৈধ। এছাড়াও, টেবিলের আউটপুটগুলি নিউলাইনগুলি দ্বারা পৃথক করা হয়েছে, তবে আপনার প্রোগ্রামটি এটি করতে হবে না। প্রতিটি ক্ষেত্রে সর্বশেষ মান চূড়ান্ত আউটপুট।

উদাহরণ (আন-গল্ফড) পাইথন ইন্টারপ্রেটার

এটি অনলাইন চেষ্টা করুন! আপনি IDLE বা আপনি যা ব্যবহার করেন তা দিয়ে আইএমও চালিয়ে যান। (আমি এটি পরে 424 বাইটে গল্ফড করেছি, তবে আমি নিশ্চিত যে আপনি আরও ভাল করতে পারবেন)।


2
ইনপুটটিকে ইতিমধ্যে কোনও ভেরিয়েবলে রাখার অনুমতি দেওয়া মানহীন, কারণ আউটপুটটিকে একের মধ্যে থাকতে দেয়।
জোনাথন অ্যালান

আপনার উদাহরণগুলি দেখে মনে হয় যে কোনও সময় নতুন লাইনের মুদ্রণ করা হয়েছে <। এটা কি বাধ্যতামূলক?
অজ্ঞতার

প্রোগ্রামের মধ্যে কি নতুন লাইনে থাকবে? কারণ যদি এটি করতে পারে তবে এটি চ্যাস ব্রাউন এর উত্তরকে অকার্যকর করে
অজ্ঞতার

2
আপনার ভবিষ্যতের প্রশ্নের জন্য, দয়া করে জটিল I / O ফর্ম্যাটগুলি এড়ানো বিবেচনা করুন । স্টিডিনের ইনপুট সীমিত করার জন্য কিছু ভাষায় অতিরিক্ত বাইট খরচ হয় এবং চ্যালেঞ্জের তেমন কিছু আসে না।
আরনাউল্ড

1
@ ডিগেম সমস্ত কীভাবে আমি স্রেফ যুক্ত করেছি +@>#,? আমি #aswell ব্যবহার ।
আর্টেমিস এখনও

উত্তর:


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

এটি অনলাইন চেষ্টা করুন!

চ্যাস ব্রাউন এর পাইথন উত্তর পোর্ট । আউটপুট পরে newlines মুদ্রণ করে না।

যথারীতি, রুবি ২. version সংস্করণটি অন্তহীন পরিসীমা সূচক ( 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 কিরিল এলকে ধন্যবাদ
  • -4 জিউজ্পে ধন্যবাদ

নিবন্ধভুক্ত কোড এবং ব্যাখ্যা:

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। আমি ভুল হলে আমাকে সংশোধন করুন ..
আর্টেমিস এখনও

পাই ২.7 ডক্স অনুসারে: input([prompt])ইওওয়ালের সমতুল্য (কাঁচা_পিন্ড (প্রম্পট))। এই ফাংশনটি ব্যবহারকারীর ত্রুটিগুলি ধরা দেয় না। যদি ইনপুটটি সিনট্যাক্টিকভাবে বৈধ না হয় তবে একটি সিনট্যাক্সেরর উত্থাপিত হবে।
আর্টেমিস এখনও

সুতরাং, আপনি যে বিষয়টি উত্থাপন করছেন তা হ'ল এখানে কিছু , যেখানে ইনপুট স্ট্রিংগুলি উদ্ধৃত করা দরকার - বরং 'সত্য' স্টিডিনের পরিস্থিতি হিসাবে উদ্বিগ্ন। আবার, সাধারণত I / O বিধিগুলি কিছুটা শিথিল হয়; তবে আমি পরিবর্তন করব will
চ্যাস ব্রাউন

পরিবর্তনের জন্য ধন্যবাদ। পাইথন 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
@ আর্টেমিসফাউল, ধন্যবাদ, রেজেক্স সঠিকভাবে কাজ করছে না এবং বিভক্ত হয়ে উঠছে..জায়েন কয়েকটা বাইট সংরক্ষণ করেছে।
জোহান ডু টইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.