স্ট্যাক বিড়ালদের স্টাইলে এটি কোনও বৈধ স্ট্যাক বিড়াল প্রোগ্রাম কিনা তা সন্ধান করুন!


16

পটভূমি

স্ট্যাক বিড়াল মার্টিন ইন্ডার দ্বারা তৈরি একটি বিপরীত রহস্যময় ভাষা is স্ট্যাক বিড়ালের প্রতিটি কমান্ড হয় নিজের বিপরীত হয় (যেমন একটি প্রতিসম চরিত্র হিসাবে উপস্থাপিত -_:T|), বা এর বিপরীত কমান্ড রয়েছে (যেমন আয়না চিত্র হিসাবে উপস্থাপিত () {} [] <>)। স্ট্যাক বিড়ালগুলির একটি দৃ synt় সিনট্যাকটিক প্রয়োজনীয়তা রয়েছে যে পুরো প্রোগ্রামটি নিজের মিরর ইমেজ হওয়া উচিত। নোট যে এই কোন বৈধ স্ট্যাক বিড়াল প্রোগ্রাম অর্থ হল প্রাকৃতিক আয়না ইমেজ অ্যামবিগ্রাম

এখানে স্ট্যাক বিড়ালের পুরো কমান্ড সেট রয়েছে:

  • স্ব-প্রতিসম: !*+-:=ITX^_|
  • প্রতিসম জোড়া: () {} [] <> \/

অন্য কোনও অক্ষর অবৈধ; উপরের অক্ষরটিতে অক্ষর না থাকা কোনও ইনপুট আউটপুটকে মিথ্যা বলা উচিত।

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

নীচে ক এর কয়েকটি উদাহরণ দেওয়া হল বৈধ স্ট্যাক বিড়াল প্রোগ্রামের (আবার মনে রাখবেন যে আপনি ভারসাম্য প্যারেনগুলির জন্য যাচাই করেন না):

{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>

এগুলি নয়:

b<+>d
())(
({[<++<]})

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা প্রদত্ত স্ট্রিংটি একটি বৈধ স্ট্যাক বিড়াল প্রোগ্রাম কিনা তা নির্ধারণ করে। আপনার কোডটি একটি প্রাকৃতিক আয়না-চিত্র অ্যামবিগ্রামও হওয়া উচিত , যার অর্থ:

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

দ্রষ্টব্য: আপনার কোডটি একটি বৈধ স্ট্যাক বিড়াল প্রোগ্রাম হতে হবে না ; এটিতে কিছু অতিরিক্ত অক্ষর থাকতে পারে যা স্ট্যাক বিড়ালগুলিতে অনুমোদিত নয়। (সম্পূর্ণ তালিকার জন্য নীচে দেখুন।)

উদাহরণস্বরূপ, নিম্নলিখিত দুটি প্রোগ্রামগুলি প্রতিসম (এবং এইভাবে একটি বৈধ জমা ), তৃতীয়টি নয়:

({bTd})
[<q|p>]
({bTd})
  IXI
({bTd})
IXI
  • "মিরর প্রতিসাম্য" সম্পর্কিত, কেবল স্ট্যাক বিড়াল-শৈলীর প্রতিসাম্য বিবেচনা করা হয় (উদা ({IH}) এটি মিরর প্রতিসাম্য থাকা সত্ত্বেও একটি বৈধ জমা নয়) submission
  • আপনার কোডটিতে কেবল অক্ষরের এই সেটগুলি, এবং আরও নতুন লাইন থাকতে পারে:
    • স্ব-প্রতিসাম্য: স্থান (0x20 ) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
    • প্রতিসম জোড়া: () /\ <> [] bd pq {}

অক্ষর সেটটি এসই-তে কোড হিসাবে প্রদর্শিত হলে কঠোরভাবে প্রতিসম বা স্ব-প্রতিসাম্য হতে বেছে নেওয়া হয়।

ইনপুট এবং আউটপুট

ইনপুট পরিসরটি প্রিন্টযোগ্য এএসসিআইআই অক্ষরের যে কোনও এক-লাইনের স্ট্রিং

আপনি ইনপুটটিকে স্ট্রিং, অক্ষরের একটি তালিকা বা ASCII মানগুলির একটি তালিকা হিসাবে বেছে নিতে পারেন।

আপনি আউটপুট চয়ন করতে পারেন:

  • আপনার পছন্দের ভাষা দ্বারা নির্ধারিত সত্যবাদী / মিথ্যা মানগুলির কোনও
    • প্রকৃত ফলাফলের মানগুলি ইনপুটগুলির মধ্যে পৃথক হতে পারে (যেমন সত্যবাদী ইনপুটটির জন্য আউটপুট 1 এবং অন্য সত্যবাদী এর জন্য 2)।
    • সত্যবাদী এবং মিথ্যা মানগুলি অদলবদল করার অনুমতি নেই।
  • যথাক্রমে সত্য / মিথ্যা জন্য দুটি ধ্রুবক মান
    • এই ক্ষেত্রে, ফলাফল মানগুলি হুবহু দুটি ধ্রুবক মানের একটি হওয়া উচিত।

আপনার জমা দেওয়ার ক্ষেত্রে আপনার ইনপুট পদ্ধতি এবং আউটপুট মান নির্দিষ্ট করা উচিত।

জয়ের শর্ত

এটি , তাই প্রতিটি ভাষায় সর্বনিম্ন বাইট জিততে পারে।

মন্তব্য

  • স্ট্যান্ডার্ড লুফোলগুলি যথারীতি নিষিদ্ধ।
  • অবশ্যই আপনি স্ট্যাক বিড়ালগুলিতে এটি সমাধান করতে পারেন, তবে সুযোগটি হ'ল আপনি এমন পতাকা ব্যবহার করতে পারবেন না যা আপনার কোডের আকার অর্ধেক কমাতে দেয়। এবং এটি গ্রহণ করা গুরুতরভাবে কঠিন ভাষা: পি

1
তীক্ষ্ণ #বারণ কেন ?
tsh

1
@tsh এটি এসই কোড ফন্ট সহ কমপক্ষে অনেকগুলি ফন্টে স্কুড হয়েছে (কমপক্ষে এটি আমি ক্রোমে যা দেখছি)।
বুবলার

@ ডিএলসকে আমি এর চারপাশে কয়েকটি বিষয় পরিষ্কার করার চেষ্টা করেছি। তবে আপনি যদি বিবরণটি এখনও অস্পষ্ট বলে মনে করেন তবে দয়া করে সম্পাদনা করুন।
বুদ্বুদ

উত্তর:


16

জাভাস্ক্রিপ্ট (ES6), 487 467 378 298 292 280 266 264 বাইট

@ বাবলার ধন্যবাদ 14 বাইট সংরক্ষণ করা

I=>(V=v=>!I[v]||((T=o=>[[]][+!!A[o]]||[(I[v]!=A[o]||A)[o^o<88/8]]+T(++o))(8-8)==I.pop())*V(++v))(V|(A='(){}[]<>\\/ !*+-:=ITX^_|'))//\\(('|_^XTI=:-+*! \//<>[]{}()'=A)|V)((v++)V*(()qoq.I==(8-8)((o++)T+[[8\88>o^o](A||[o]A=![v]I)]||[[o]A!!+][[]]<=o=T))||[v]I!<=v=V)<=I

একটি বেনামী ফাংশন সংজ্ঞা দেয় যা চরগুলির অ্যারে নেয় এবং পছন্দসই আউটপুট ফেরত দেয়। আউটপুট সত্য / মিথ্যা; সাধারণত 1/ 0, তবে খালি স্ট্রিং দেয় true

কিভাবে?

সর্বাধিক সুস্পষ্ট কৌশলটি //\\কোডটির মিরর সংস্করণটি মন্তব্য করার জন্য সেন্টার পয়েন্ট হিসাবে ব্যবহার করা। এর পরে, এটি প্রদত্ত কেবলমাত্র অক্ষরটি ব্যবহার করে সমস্যাটি সমাধানের সবচেয়ে সংক্ষিপ্ততম উপায় নির্ধারণের একটি খেলা হয়ে ওঠে।

আমরা প্রথম যে ইস্যুটি চালাচ্ছি তা হ'ল কীওয়ার্ড এবং বিল্ট-ইনগুলির অভাব। আমাদের অলৌকিকভাবে এখনও রয়েছে .pop(), তবে বাকি সমস্ত কিছুই অনুমোদিত অপারেটরগুলির মাধ্যমে করতে হবে (যার মধ্যে রয়েছে a[b]এবং andf(c) ), অনুকরণ লুপ থেকে পুনরাবৃত্তির সঙ্গে।

দ্বিতীয় ইস্যুটি লজিকাল অপারেটরগুলির অভাব। না হয় &এবং ?অনুমোদিত হয় না, যার অর্থ আমরা ব্যবহার করতে পারি কেবলমাত্র সিদ্ধান্ত গ্রহণকারী অপারেটর ||। অতএব, আমাদের এটির জন্য আমাদের যুক্তিটি সাবধানে গঠন করতে হবে।

আমি প্রথম কাজটি হ'ল একটি ফাংশনটি সংজ্ঞায়িত করে Tযা একটি স্বতন্ত্র চরিত্রকে মিরর করে। প্রাথমিক ধারণাটি প্রতিটি চরিত্রকে আয়না-সক্ষম অক্ষরের একটি স্ট্রিংয়ে লুপ করা, প্রদত্ত চরের সাথে সমতার জন্য প্রতিটি পরীক্ষার। যদি এটি সমান হয় তবে আমরা এর আয়নাটি ফিরিয়ে দেব index^1for চার্জের জন্য (){}[]<>\/, বা বাকি অংশের জন্য নিজেই চর।

আমি এখানে প্রথম যে সমস্যাটি চালিয়েছিলাম তা হ'ল মিররড চর বা প্রতিটি পুনরাবৃত্তির উপর মিথ্যা মান। অবশেষে যে সমাধানটি আমি নিয়ে এসেছি তা হ'ল, ইনপুট চরিত্রটি (x!=A[o]||A)[o^o<88/8]কোথায় x, Aমিররিং বর্ণমালা এবং oবর্তমান সূচি। যদি xএটির মতো না হয় A[o]তবে এটি দেয় trueএবং সূচক এক্সপ্রেশনটি মূল্যায়ন করে undefined; অন্যথায়, ||Aসক্রিয় করা হয়, এবং আমরা পেয়ে শেষ A[o^(o<11)]

দ্বিতীয় সমস্যাটি কীভাবে পুনরাবৃত্তিটি শেষ করতে হয়। আমি খুঁজে পেয়েছি যে এটি করার সর্বোত্তম উপায়টি হ'ল প্রতিটি পুনরাবৃত্তির ফলাফলগুলিকে সাদৃশ্য করা, শেষে Aএসে পৌঁছে খালি স্ট্রিংটি ফিরিয়ে দেওয়া । এটি আমাদের আরও দুটি সমস্যা সহকারে উপস্থাপন করে: গুলিকে undefinedখালি স্ট্রিংয়ে রূপান্তর করা এবং খালি স্ট্রিংকে ||কিছু ফিরিয়ে দেওয়া । এগুলি অ্যারে অপব্যবহারের সাথে সমাধান করা যেতে পারে: [a]+""স্ট্রিংটির প্রতিনিধিত্ব করে aবা খালি স্ট্রিং যদি aঅপরিজ্ঞাত হয়। বোনাস হিসাবে, []সত্যবাদী তবে খালি স্ট্রিংয়ে স্ট্রিংফাই হয়, তাই আমরা এটিকে সুবিধামত "সত্যবাদী খালি স্ট্রিং" হিসাবে ব্যবহার করতে পারি।

এখন আমরা Tকোনও একক চরিত্রকে মিরর করতে ফাংশনটি ব্যবহার করতে পারি । আমরা recursively এই না, আয়না তুলনা I[v++]করতে I.pop()পর্যন্ত অক্ষর অ্যারে শেষে পৌঁছে গেছেন করা হয়। সমস্ত তুলনা সত্যবাদী কিনা তা আমরা ব্যবহার &&বা &যাচাই করতে পারি না , তবে *পরিবর্তে ব্যবহার করুন। এই সমস্ত ফলাফলকে এক সাথে গুণিত করা 1যদি প্রতিটি অক্ষর বিপরীত চিত্রের আয়না হয় বা 0কোনও তুলনা ব্যর্থ হয়।

এবং এটি মূলত এই উত্তরটি কীভাবে কাজ করে। আমি সম্ভবত এটি খুব স্পষ্টভাবে ব্যাখ্যা করিনি, সুতরাং দয়া করে আপনার যে কোনও প্রশ্ন জিজ্ঞাসা করুন এবং আমার যে কোনও ভুল হয়েছে তা চিহ্নিত করুন।


U=([A,...H])=>!(V=H.pop())||!(W=([x,...X]=(T="!*+-:=ITX^_|")+"(){}[]<>\\/",[o,...O]=T+")(}{][></\\")=>!x||((o!=A)+(x!=V))*(W(X,O)))()*U(H)//...280 বাইট
tsh

@tsh কমাসোর্স কোডে @ অনুমোদিত নয়, কারণ সেগুলি প্রতিসম নয় (এসই কোড ফন্টে) এবং কোনও আয়না নেই (এএসসিআইআই তে, যাইহোক)
ইটিএইচ প্রোডাকশনগুলি ২:

দুঃখিত, আমি সেই অংশটি মিস করেছি।
tsh

@ এসটিএস আমি প্রথমে এটি খুব মিস করেছি এবং কেবলমাত্র এটি বৈধ হতে পারে না তা উপলব্ধি করার জন্য সমাধানের জন্য 20 মিনিট ব্যয় করেছি: পি
ইটিএইচ প্রোডাকশনস

যাইহোক, যেহেতু আপনি ইতিমধ্যে একটি জাভাস্ক্রিপ্ট সমাধান পোস্ট করেছেন। আমাদের এখন আর জেএসএফ * কে সমাধানের দরকার নেই ... // আমি যদি আপনি হয়ে থাকি তবে আমি এটি ঠিক জেএসএফ * কেতে সংকলন করে ঠিক করতাম ...
tsh

1

স্ট্যাক্স , 76 70 বাইট

:Wx^^MH_=_"{([</!*+-:=ITX^_|":W-!*pq*!-W:"|_^XTI=:-+*!\>])}"_=_HM^^xW:

এটি চালান এবং এটি ডিবাগ করুন

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

4 বাইট

:R_=

এটি চালান এবং এটি ডিবাগ করুন

ব্যাখ্যা

:Wx^^MH_=_"{([</!*+-:=ITX^_|":W-!*pq...
:W                                         "Mirror" the string
                                           Equivalent to appending the reverse of the string to itself
                                           And map `{([</\>])}` to its mirror in the appended string
  x^^                                      2, but we can't just use `2` here ...
     MH                                    Partition the "mirror"ed string to two parts, take the later part.
       _=                                  The string is the same as the original one (*)
                                           `:Wx^^MH_=` is just `:R_=`, but we can't use `R` here ...
         _                                 Input string
          "{([</!*+-:=ITX^_|":W-           Remove valid characters from input
                                !          The final string is empty (**)
                                 *         (*) and (**)
                                  p        Pop and print result
                                   q       Peek stack and print
                                           Since the stack is now empty, this causes the program to terminate
                                    ...    Not executed

এর অস্তিত্ব Rএবং Wসত্যই আকর্ষণীয়। pqসংমিশ্রণে প্রোগ্রামের সমাপ্তি আমার পক্ষেও চিত্তাকর্ষক।
বুবলার

ধন্যবাদ. নির্দেশাবলী আসলে দুটি বাইট: :Rএবং :W। আমি অনুভব করি যে স্ট্যাক্সের অভ্যন্তরীণ রয়েছে এমন প্রত্যেককে আমি এটি বলতে সাহায্য করতে পারি না।
ওয়েইজুন ঝাউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.