ফাংশন ক্লিপবোর্ড: অনুলিপি


17

এই চ্যালেঞ্জটি এমএটিএল ভাষার কিছু বৈশিষ্ট্যের সাথে সম্পর্কিত, মে 2018 এর ভাষা অনুষ্ঠানের অংশ হিসাবে । সংযুক্ত চ্যালেঞ্জ : ফাংশন ক্লিপবোর্ড: পেস্ট করুন


ভূমিকা

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

এই ক্লিপবোর্ডটি সাধারণ, ইনপুট গ্রহণের ক্রিয়াকলাপে চারটি সাম্প্রতিক কলগুলিতে ইনপুটগুলি সঞ্চয় করে। সাধারণ ফাংশনগুলি এমএটিএল-এ সর্বাধিক সাধারণ ফাংশন। ইনপুট নেওয়ার অর্থ হ'ল ফাংশনটিতে কমপক্ষে একটি ইনপুট লাগে (যে ফাংশনগুলি কোনও ইনপুট নেয় না তা ফাংশন ক্লিপবোর্ড দ্বারা বিবেচনা করা হয় না)।

এটি নিম্নলিখিত উদাহরণগুলির সাথে সর্বোত্তমভাবে ব্যাখ্যা করা হয়েছে, যা দুটি সাধারণ ফাংশন ব্যবহার করে:

  • +, যা স্ট্যাক থেকে দুটি সংখ্যা পপ করে এবং তাদের যোগফলকে ধাক্কা দেয়।
  • U, যা একটি নম্বর পপ করে এবং তার বর্গকে ধাক্কা দেয়।

উদাহরণ 1 :

3 2 + 6 + 12 4 U + +

ফলাফল উত্পাদন করে 39। কোডটি নিম্নলিখিতভাবে ব্যাখ্যা করা হয়েছে:

  • সংখ্যা আক্ষরিক যেমন 3বা12 স্ট্যাকের দিকে ধাক্কা
  • যেমন +তাদের ইনপুটগুলি পপ করে এবং তাদের আউটপুটগুলিকে স্ট্যাকের দিকে ঠেলে দেয় Fun

কালানুক্রমিক ক্রমে ফাংশন কলগুলি হল:

  1. 3 2 + দেয় 5
  2. 5 6 + দেয় 11
  3. 4 U দেয় 16
  4. 12 16 + 28
  5. 11 28 +দেয় 39

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

সুতরাং কোডটি চালনার পরে ক্লিপবোর্ডের সামগ্রীগুলি (পাইথন নোটেশনে):

[[11, 28], [12, 16], [4], [5, 6]]

উদাহরণ 2 :

10 20 U 30 +

সংখ্যা 10এবং 430স্ট্যাকের পাতা । স্ট্যাকটি প্রোগ্রামের শেষে নীচে থেকে উপরে প্রদর্শিত হয়।

ফাংশন কলগুলি হয়

  1. 20 U দেয় 400
  2. 400 30 + দেয় 430

যেহেতু কেবলমাত্র দুটি ফাংশন কল রয়েছে, তাই ক্লিপবোর্ডকে সংজ্ঞায়িত করে কিছু অভ্যন্তরীণ তালিকা খালি থাকবে10কোনও ফাংশনে ইনপুট হিসাবে কীভাবে ব্যবহৃত হয় তাও নোট করুন।

সুতরাং, কোডটি চালানোর পরে ক্লিপবোর্ডের সামগ্রীগুলি হ'ল:

[[400, 30], [20], [], []]

উদাহরণ 3 (অবৈধ):

10 20 + +

অবৈধ হিসাবে বিবেচিত হয়, কারণ দ্বিতীয়টিতে একটি ইনপুট +অনুপস্থিত (এমএটিএল-এ এটি স্পষ্টভাবে ব্যবহারকারীর ইনপুটকে ট্রিগার করবে)।

চ্যালেঞ্জ

ইনপুট : সংখ্যার আক্ষরিক সহ একটি স্ট্রিং এস+ এবংU স্পেস দ্বারা পৃথক করা।

আউটপুট : স্ট্রিং এস এর মূল্যায়ন করার পরে ফাংশন ক্লিপবোর্ডের বিষয়বস্তু

ব্যাখ্যা:

  • অঙ্ক ব্যতীত functions ফাংশনগুলি উপস্থাপন করতে আপনি যে কোনও দুটি ধারাবাহিক প্রতীক ব্যবহার করতে পারেন। এছাড়াও, আপনি স্থানের পরিবর্তে পৃথক হিসাবে কোনও সামঞ্জস্যপূর্ণ প্রতীক ব্যবহার করতে পারেন।
  • কেবলমাত্র দুটি নির্দেশিত ফাংশন বিবেচনা করা হবে।
  • ইনপুট স্ট্রিংটিতে কমপক্ষে একটি নম্বর আক্ষরিক এবং কমপক্ষে একটি ফাংশন থাকবে।
  • সমস্ত সংখ্যা সম্ভবত একাধিক সংখ্যার সাথে ইতিবাচক পূর্ণসংখ্যার হবে।
  • এটি উদাহরণস্বরূপ 2 যেমন কিছু সংখ্যক আক্ষরিক কোনও ফাংশন দ্বারা ব্যবহৃত হয় না।
  • অতিরিক্ত সংখ্যার প্রয়োজন ছাড়াই ইনপুটটি বৈধ কোড হওয়ার গ্যারান্টিযুক্ত। উদাহরণস্বরূপ 3 স্ট্রিং কখনই ঘটবে না।
  • আউটপুটে খালি অভ্যন্তরীণ তালিকাগুলি বাদ দেওয়া যেতে পারে। উদাহরণস্বরূপ 2 ফলাফল হতে পারে[[400, 30], [20]]
  • যে কোনও যুক্তিসঙ্গত, দ্ব্যর্থহীন আউটপুট ফর্ম্যাট গ্রহণযোগ্য। উদাহরণস্বরূপ, ভিতরের বিভাজক এবং বাইরের বিভাজক হিসেবে সেমিকোলন হিসেবে কমা দিয়ে একটি স্ট্রিং: 400,30;20;;

অতিরিক্ত নিয়ম:

পরীক্ষার মামলা

Input
Output

3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]

15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]

3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]

8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]

10 1 1 + U U U U U
[[65536], [256], [16], [4]]

কি [[28, 11], [16, 12], [4], [6, 5]]প্রথম উদাহরণস্বরূপ বৈধ আউটপুট?
ovs

@ ওভস না, প্রতিটি অভ্যন্তরের তালিকার ইনপুটগুলি অবশ্যই মূল ক্রমে থাকা উচিত, এটি ফাংশন কল হিসাবে
লুইস মেন্ডো

এইচএম, আমরা এমএটিএল-এ কেবল সমাধান করেই কি হতাশাবোধ করছি? : পি
এরিক আউটগল্ফার

1
এই ক্লিপবোর্ডটি কি M?
জিউসেপ

1
নিখুঁতভাবে আমি এখানে নামটি উল্লেখ করি নি কারণ আমরা ফাংশনটি ব্যবহার করছি না M। আমি এটি "পেস্ট" চ্যালেঞ্জটিতে করব
লুইস মেন্ডো

উত্তর:


3

05AB1E , 20 বাইট

A"D¸ˆn‚DˆO"4ô‡.V¯R4£

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

-4 ধন্যবাদ এমিনগাকে (পাশাপাশি -8 আমাকে নিয়ম সম্পর্কে আপডেট করার জন্য ধন্যবাদ)।

  • ইউ: a
  • +: b

4
:( ... কেন তাই SeRïõS?
লুইস মেন্ডো

@ লুইসেমেন্ডো এই স্কোরটি এতটা SeRïõSly ge arge। :(
এরিক আউটগল্ফার


5

বাশ , 43 বাইট

sed s/+/rdnFPrp+/g\;s/U/p2^/g|dc|tac|sed 4q

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

এটি ক্লিপবোর্ডটি নিম্নলিখিত বিন্যাসে মুদ্রণ করে, বিভাজক হিসাবে \ x0F এর ব্যবহারটি নোট করুন।

item_1\x0Fitem_2
item_3
.
.
item_m\x0Fitem_n

মূল ধারণাটি হ'ল এটি ডিসি, একটি স্ট্যাক-ভিত্তিক ভাষাতে প্রেরণ করা, যেমন প্রয়োজনীয় স্ট্যাক আইটেমগুলি মুদ্রিত হবে।

ইনপুটটি সেডে পাইপ করা হয় যেখানে প্রতিটির +সাথে প্রতিস্থাপন করা হয় rdnFPrp+, যা ডিসিতে স্ট্যাকের উপরের দ্বিতীয় নম্বরটি প্রিন্ট করে যার পরে addition x0F এবং তারপরে সংযোজন সম্পাদনের আগে শীর্ষ সংখ্যাটি থাকে। সেড প্রত্যেকটির Uসাথে প্রতিস্থাপন করে p2^, শীর্ষ স্ট্যাক উপাদান মুদ্রণ করুন এবং এটি বর্গক্ষেত্র করুন।

প্রথম প্রতিকল্পন কমান্ড sসব দ্বারা প্রকাশ করা হয় প্রতিস্থাপন, lobal পতাকা g, +সঙ্গে গুলি rdnFPrp+। ডিসি-তে, rশীর্ষ দুটি স্ট্যাক আইটেম অদলবদল করে, dশীর্ষ আইটেমটিকে নকল করে, nনিউলাইন ছাড়াই মুদ্রণ করে, Fস্ট্যাকের উপর 15 টি চাপ দেয় এবং Pঅক্ষর (যা ডিলিমিটার) হিসাবে মুদ্রণ করে r, আবার অদলবদল করে, pশীর্ষ স্ট্যাক আইটেমটি মুদ্রণ করে এবং পরে +কার্য সম্পাদন করে শীর্ষ দুটি স্ট্যাক আইটেম যোগ করুন।

আমাদের আর একটি কমান্ড রয়েছে এবং সেডে কমান্ডগুলি সেমিকোলন বা নিউলাইন দ্বারা পৃথক করা হয় যার মধ্যে প্রথম বিকল্পটি বেছে নেওয়া হয়। কেবল ;বাশকে সেড কমান্ডের সমাপ্তি হিসাবে ব্যাখ্যা করতে হবে, সুতরাং এটি একটি দিয়ে পালিয়ে যায় \

সর্বশেষ প্রতিস্থাপন কমান্ডে, Uবিশ্বব্যাপী এর সাথে প্রতিস্থাপন করা হয় p2^। ডিসি-তে, pমুদ্রণ 2^করে এবং এটি দ্বিতীয় শক্তিতে উত্থাপন করে।

সিডের ফলাফলটি পুরো ক্লিপবোর্ডে মুদ্রণ করে ডিসি কোড হিসাবে খণ্ডন করা হয়।

ডিসি থেকে পাইপ ডিসিটিকে ডিসি কোড হিসাবে ব্যাখ্যা করে। এখন, সর্বাধিক সাম্প্রতিক কলগুলি নীচে এবং শীর্ষে পুরানোগুলি রয়েছে।

যেহেতু লাইনগুলি বিপরীত ক্রমে রয়েছে, tac(বিপরীত cat) এটি সংশোধন করতে ব্যবহৃত হয়।

এবং অবশেষে, সেড ট্যাক থেকে প্রথম 4 লাইন তুলেছে।

এটি করার একটি ছোট উপায় head -4। সেড একবারে ইনপুটটির প্রতিটি লাইনে কমান্ড সম্পাদন করে। যদি কোনও কমান্ড না থাকে তবে ইনপুটটিতে কিছুই করা হয় না এবং এটি যেমন হয় তেমন ফিরে আসে। লাইন 4-তে 4qকমান্ডটি সম্পাদন করতে সেডকে বলে sed qকমান্ড qপ্রোগ্রামটি ছেড়ে দেয়, সুতরাং এটি চতুর্থ লাইনটি প্রিন্ট করে এবং প্রস্থান করে, সুতরাং এর সমতুল্য সম্পাদন করে head -4



4

হাস্কেল , ১১৩ 109 বাইট

take 4.([]#).words
x:y:s#"+":r=(x+y:s#r)++[[y,x]]
x:s#"U":r=(x*x:s#r)++[[x]]
s#n:r=read n:s#r
_#_=[]
infix 4#

প্রথম লাইন একটি বেনামী ফাংশন যা একটি স্ট্রিং, যেমন লাগে সংজ্ঞায়িত "3 2 + 6 + 12 4 U + +", এবং ints তালিকা একটি তালিকা ফেরৎ: [[11,28],[12,16],[4],[5,6]]এটি অনলাইন চেষ্টা করুন!



2

জাভাস্ক্রিপ্ট (ES6), 107 বাইট

পূর্ণসংখ্যার সমন্বিত তালিকা হিসাবে ইনপুট নেয় '+'এবং 'U'। পূর্ণসংখ্যা, 2 পূর্ণসংখ্যার অ্যারে এবং '_'খালি স্লটগুলির জন্য থাকা অন্য একটি তালিকা প্রদান করে ।

a=>a.map(x=>s.push(+x?x:(c=[x>[a=s.pop(),r=a*a]?a:[r=s.pop(),(r+=a,a)],...c],r)),s=[c='___'])&&c.slice(0,4)

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

মন্তব্য

a =>                          // a[] = input array
  a.map(x =>                  // for each entry x in a[]:
    s.push(                   //   update the stack:
      +x ?                    //     if x is a positive integer:
        x                     //       push x onto the stack
      :                       //     else:
        ( c = [               //       update the clipboard:
            x > [             //         compare x with '['
              a = s.pop(),    //         a = first operand
              r = a * a       //         use a² as the default result
            ] ?               //         if x is 'U' (greater than '['):
              a               //           save the 1st operand in the clipboard
            :                 //         else:
              [ r = s.pop(),  //           r = 2nd operand
                (r += a, a)   //           add the 1st operand
              ],              //           save both operands in the clipboard
            ...c              //         append the previous clipboard entries
          ],                  //       end of clipboard update
          r                   //       push r onto the stack
        )                     //
    ),                        //     end of stack update
    s = [c = '___']           //   initialize the stack; start with c = '___'
  ) &&                        // end of map()
  c.slice(0, 4)               // return the last 4 entries of the clipboard


2

অক্টাভা , 206 বাইট

s=strsplit(input(''));m=t=[];for z=s
if(q=str2num(p=z{1}))t=[t q];else
if(p-43)m{end+1}=(k=t(end));t(end)=k^2;else
m{end+1}=(k=t(end-1:end));t(end-1:end)=[];t(end+1)=sum(k);end
end
end
m(1:end-4)=[];flip(m)

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

যদি কেবল অষ্টাভের একটি popবাক্য গঠন থাকে। mমেমরি ক্লিপবোর্ড, tস্ট্যাক।


আপনি গঠন করা যেতে পারে mএবং tবিপরীত, সামনে বদলে শেষ উপাদান যোগ করার পদ্ধতি?
জিউসেপ

178 বাইট উপরে বর্ণিত কৌশলটি ব্যবহার করে
জিউস্পে

@ গুয়েস্পে চতুর আমার সর্বদা এই অনুভূতি থাকে যে সংযোজন সাধারণত প্রিপেন্ডিংয়ের চেয়ে কম হয় তবে এক্ষেত্রে বিপুল সংখ্যক "শেষ" আমাকে পুনর্বিবেচনা করা উচিত ছিল
সানচাইসেস


1

লাল , 335 330 বাইট

func[s][b: copy[]foreach c split s" "[append b either c >"+"and(c <"U")[do c][c]]r: copy[]until[t: 0 until[not parse
b[to copy c[2 integer!"+"](insert/only r reduce[c/1 c/2]replace b c c/1 + c/2 t: 1)to end]]until[not parse b[to copy
c[integer!"U"](insert/only r to-block c/1 replace b c c/1 ** 2 t: 1)to end]]t = 0]take/part r 4]

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

আরও পঠনযোগ্য:

f: func[s] [
    s: split s " "
    b: copy []
    foreach c s [
        append b either (c > "+") and (c < "U")[do c] [c]
    ]
    r: copy []
    until [
        t: 0
        until [
            not parse b [to copy c[2 integer! "+"]
            (insert/only r reduce[c/1 c/2]
            replace b c c/1 + c/2
            t: 1)
            to end]
        ]
        until [
            not parse b [to copy c[integer! "U"]
            (insert/only r to-block c/1
            replace b c c/1 ** 2
            t: 1)
            to end]
        ]
        t = 0
    ]
    take/part r 4  
]

1

আর , 205 182 বাইট

function(P){S=F
M=list()
for(K in el(strsplit(P," "))){if(is.na(x<-strtoi(K))){if(K>1){M=c(m<-S[1],M)
S[1]=m^2}else{M=c(list(m<-S[2:1]),M)
S=c(sum(m),S[-2:0])}}else S=c(x,S)}
M[1:4]}

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

Mমেমরি ক্লিপবোর্ড Pহয়, প্রোগ্রাম, এবংS স্ট্যাক।

প্রযুক্তিগতভাবে Sএকক শূন্যযুক্ত ভেক্টর হিসাবে শুরু করা হয় তবে যেহেতু আমরা কখনই একটি অবৈধ ইনপুট পাই না, এটি আমার কাছ থেকে একটি বাইট সংরক্ষণ করে S={}


1

সি (জিসিসি) , 264 বাইট

আমি পুনরাবৃত্তিটি ব্যবহার করেছি যাতে আমি ফাংশন স্ট্যাকটি ডেটা স্ট্যাক হিসাবে ব্যবহার করতে পারি: ইনপুট তালিকাটি পেরিয়ে যায় এবং ক্রিয়াকলাপগুলি সম্পাদিত হয়: ফলাফলগুলি স্ট্রাক পুশগুলি প্রদর্শিত না করে বিপরীত ক্রমে প্রদর্শিত হয়।

স্ট্যাকটি একটি লিঙ্কযুক্ত তালিকা হিসাবে কার্যকর করা হয়েছে। এখানে কিভাবে এটা কাজ করে:

  • বর্তমান নোড সেট করা হয়েছে [মান থেকে পয়েন্টার, পূর্ববর্তী নোডে পয়েন্টার]
  • একটি মান ধাক্কা দেওয়ার জন্য, এটি সঞ্চয় করা হয় এবং ফাংশনটিকে আবার বর্তমান নোড দিয়ে ডাকা হয়।
  • স্ট্যাকের শীর্ষে একটি মান পপ করতে বা মানটি সংশোধন করতে, আগের নোডের মানটি সংশোধন করা হয় এবং ফাংশনটিকে আগের নোড দিয়ে আবার বলা হয়।

আমি মূলত নোডগুলির জন্য একটি কাঠামো ব্যবহার করেছি, তবে স্থান বাঁচাতে আমি খালি পয়েন্টারে স্যুইচ করেছি। এই লিঙ্কযুক্ত তালিকার একটি আকর্ষণীয় বৈশিষ্ট্য হ'ল পুনরাবৃত্তি সম্পূর্ণ হলে এটি নিজেকে পরিষ্কার করে।

#define _ printf
f(char**s,int**p){int**w,v,*y[]={&v,p},m,n,t,z;w=y;z=1;return(*s?(**s-85?**s-43?(--z,t=14,v=atoi(*s)):(t=6,w=p[1],m=**w,**w+=n=**p):(t=0,w=p,**w*=m=**p),v=f(s+1,w),_(v<4?",[%d]\0,[%d,%d]\0"+t+!v:"",m,n),v+z):0);}g(char**s){_("[");f(s,0);_("]\n");}

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.