ব্রেনফাক প্রোগ্রাম যাচাই করুন


17

তবুও আরেকটি ব্রেনফাক পার্সিংয়ের সমস্যা, তবে এবার ... আলাদা different

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

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

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

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


1
এমন ভাষা সম্পর্কে কী যা প্রসেসের প্রস্থান কোড নির্ধারণ করতে দেয় না?
কেন্ডাল ফ্রে

1
@ কেন্ডালফ্রে: সরল, অন্য কিছু ব্যবহার করুন। বা গল্ফস্ক্রিপ্টে, রুবি কোড এম্বেড করুন। সম্ভবত এটি কিছু রহস্যময় প্রোগ্রামিং ভাষাগুলি ব্লক করে, তবে ভাল ...
কনরাড বোরোস্কি

1
ব্যর্থতায় 1 (অন্যথায় 0 অবশ্যই না হওয়া) এর বাইরে অন্য কিছুতে ত্রুটি কোড সেট করা ঠিক আছে কি?
মেরিনাস

@ মারিনাস: আপনি কেন এটি চান তা আমি জানি না তবে আমি মনে করি এটি ঠিক আছে।
কনরাড বোরোস্কি

@ গ্লিচএমআর: কারণ তারপরে আমি এর GCD(a,b)পরিবর্তে ব্যবহার করতে পারি 0 != a || b
মেরিনাস

উত্তর:


6

গল্ফস্ক্রিপ্ট, 18 টি অক্ষর

.{[]`?)},~](`91?./

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

(eval):2:in `/': divided by 0 (ZeroDivisionError)

অথবা

(eval):1:in `initialize': undefined method `ginspect' for nil:NilClass (NoMethodError)

যেহেতু চ্যালেঞ্জটি স্টাডাউট / স্টডারকে আউটপুট সম্পর্কে কিছুই বলেনি, তাই আমি এটি যোগ্যতা অর্জন করেছি। যে কোনও ক্ষেত্রে, আপনি সর্বদা এগুলিতে পুনর্নির্দেশ করতে পারেন /dev/null

ব্যাখ্যা:

কোডটি {[]`?)},ইনপুট থেকে স্কোয়ার বন্ধনী ব্যতীত সমস্ত কিছু সরিয়ে দেয় এবং ~গল্ফস্ক্রিপ্ট কোড হিসাবে ফলাফলটিকে মূল্যায়ন করে। জটিল অংশটি হ'ল ভারসাম্যহীন বন্ধনীগুলি গল্ফস্ক্রিপ্টে পুরোপুরি আইনী (এবং, প্রকৃতপক্ষে, আমার কোডটিতে একটি অন্তর্ভুক্ত রয়েছে!), সুতরাং কোড ক্র্যাশ করার জন্য আমাদের আরও কিছু উপায় প্রয়োজন।

যে কৌশলটি আমি ব্যবহার করছি তা হ'ল স্ট্যাকের নীচে ইনপুটটির একটি অনুলিপি রেখে পুরো স্ট্যাকটিকে একটি অ্যারে (ভারসাম্যহীন ব্যবহার করে ]) সংগ্রহ করে এবং প্রথম উপাদানটি সরিয়ে ফেলুন। এই মুহুর্তে, তিনটি জিনিস ঘটতে পারে:

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

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

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

পুনশ্চ. অন্য দুটি 18-চর সমাধান হ'ল:

.{[]`?)},{.}%~](n<

এবং

.{[]`?)},~]([n]+n<

হায়রে, "খালি অ্যারে সমস্যা" সমাধান করার জন্য আমি এখনও একটি ছোট্ট উপায় খুঁজে পাইনি।


এটি কি ভারসাম্যযুক্ত ?: ][(অর্থাত্ এটি কি আপনার প্রোগ্রামে ব্যর্থ হয়?)
জাস্টিন

@ কুইনকুনস: এটি যেমন ব্যর্থ হয় তেমনি ব্যর্থ হয়।
ইলমারি করোনেন

যাইহোক, এটি গ্রহণ করতে পরিণত হয় [[]; আমি এখন এটি চার অক্ষরের ব্যয়ে ঠিক করেছি এবং এটি এখন আমার সমস্ত পরীক্ষায় পাস করে।
ইলমারি করোনেন

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনার কাছে একটি 14-চর সমাধান ছিল যা কেবল অ্যারেটি খালি থাকার ক্ষেত্রে স্ট্রিং এবং অ্যারের মধ্যে পার্থক্য করতে ব্যর্থ। 1+একটি শূন্য অ্যারে একটি খালি শূন্য অ্যারে, একটি খালি শূন্য অ্যারে, একটি খালি অ্যারে এবং স্ট্রিংকে স্ট্রিংয়ে রূপান্তরিত করবে।
পিটার টেলর

@ পিটারটেলর: হ্যাঁ, তা ছিল .{[]`?)},~](n<। আমি আপনার চেষ্টা করেছিলাম 1+, তবে মনে হচ্ছে অ্যারেটিতে একটি সংখ্যা ছাড়া অন্য কিছু থাকা দরকার (সম্ভবত এটি একটি অ্যারে / স্ট্রিংয়ের সাথে একটি চরিত্রের পুনরাবৃত্তির সাথে তুলনা করার চেষ্টা করার সময় দোভাষীটি ক্রাশ হবে)। ব্যবহার n+কোনওভাবেই কাজ করে না, যেহেতু এটি অ্যারেটিকে একটি স্ট্রিংয়ের সাথে জোর করে; [n]+ না কাজ, কিন্তু এখনও আমাকে 18 অক্ষর এ রাখে।
ইলমারি করোনেন

17

ব্রেইনফাক by 76 বাইট

>>+[<+++++++++[->---------<]+>-[--[[-]<->]<[<[->-]>[<+]<]>]<[-<+>]+>,]<<[<+]

স্কয়ার বন্ধনীগুলি রানটাইম ব্যর্থ করতে বিএফ ইন্টারপ্রেটার / সংকলককে ভারসাম্যহীন করে রাখলে এবং এর কারও কারও মধ্যে এটির প্রতিফলনের জন্য প্রস্থান কোড রয়েছে যদি এটি এর বন্ধনগুলির বাইরে চলে যায়।

eof = 0, মোড়কের মান এবং কোষের ফাইনিট সংখ্যা প্রয়োজন

উবুন্টুতে আপনি দোভাষী bf( sudo apt-get install bf) ব্যবহার করতে পারেন

% echo '[[[]' | bf -n bf_matching.bf
Error: Out of range! Youwanted to '<' below the first cell.
To solve, add some '>'s at the beginning, for example.
an error occured
% echo $? 
5
% bf -n bf_matching.bf < bf_matching.bf
% echo $?
0

5
আমি পছন্দ করি আপনি কীভাবে ব্রেইনফাক ব্যবহার করেছিলেন যদিও প্রশ্নটি অসম্ভব বলে জানিয়েছে।
রিকিং

কি শান্তি. আমি সত্যই অবাক। আমি ধরে নিয়েছিলাম এটি অসম্ভব, তবে তা নয়।
কনরাড বোরোস্কি

1
@ এক্সফিক্স: ব্রেইনফাক টিউরিং-সম্পূর্ণ তাই এটি যে কোনও কিছু করতে পারে (আই / ও সীমাবদ্ধতার পরিপ্রেক্ষিতে)
মেরিনাস

2
@মারিনাস টুরিং সম্পূর্ণতার অর্থ হল এটি সমস্ত গণনা করতে পারে। BrainfuckI / O ছাড়াই কি ট্যুরিং সম্পূর্ণ হয় কারণ আপনি কোনও প্রোগ্রাম চালাতে পারেন যা কোনও গণনা গণনা করে এবং দৌড়ানোর পরে এর স্মৃতিশক্তিটি পরীক্ষা করে ফলাফলটি দেখতে পারে। I / O ব্যতীত BF জনগণকে কম আগ্রহী করবে কারণ ইউটিলিটিগুলি তৈরি করা কঠিন। যেমন আমি কখনই আমার লিস্প দোভাষী করতে পারতাম না ।
সিলেস্টার

14

বেফুঞ্জ 98 - 26 31 20 19 চর

~:']-!\'[-!-+:0`j#q

কিছু বিশাল শর্ত থেকে মুক্তি পেয়েছি। এখন প্রোগ্রামটি নিম্নলিখিত হিসাবে কাজ করে:

~:   read an input char and duplicate it

']-! push a 1 if the char is the ] char, 0 otherwise

\    swap the comparison value for the duplicated input char

'[-! push a 1 if the char is the [ char, 0 otherwise

-    subtract the two comparison values. If the second one is 1, the first is 0, 
     so the result is -1. Else if the second one is 0, the first is 1 and the result is
     1. Else, the first and the second are both 0 and the result is 0

+    Add the number to the counter (which is 0 if there is none already)

:0`  test if the counter is positive (that'd mean an invalid program). Pushes a 1 if 
     positive, 0 otherwise.

j#q  if the counter is positive, then this jumps to the q. Otherwise, it skips the q 
     and continues to the ~ at the beginning of the line. If there are no more chars in
     the input, then the IP will be sent back to the q. 

qপ্রোগ্রামটি ছেড়ে দেয় এবং ত্রুটির মান হিসাবে শীর্ষ মানের পপ করে। ত্রুটির মান হবে -1 1 যদি খুব বেশি ]থাকে তবে 0 টি ভারসাম্যপূর্ণ হয় এবং যদি খুব বেশি হয় তবে ইতিবাচক negative [ণাত্মক হয়। যদি সংখ্যাটি ইতিবাচক negative ণাত্মক হয় তবে প্রোগ্রামটির ভারসাম্য রক্ষার জন্য সেই সংখ্যার অনেকগুলি নিখুঁত মান ]প্রয়োজন value

সম্পাদনা: পরিবর্তন এবং বৃদ্ধি হ্রাস। [কাউন্টারটি বাড়ানোর জন্য ]ব্যবহৃত হত এবং এটি হ্রাস করতে ব্যবহৃত হত। এটিকে স্যুইচ করে, আমি 1 টি সংরক্ষণ করি, কারণ প্রস্থান শর্তের জন্য, আমাকে কেবলমাত্র কাউন্টারটি নেতিবাচক নয়, ইতিবাচক কিনা তা পরীক্ষা করে দেখতে হবে।


পুরাতন রুপ

~:'[-!j;\1+\#;']-!j;1-#;:0\`j#q

এই কোডটি নিম্নলিখিত হিসাবে কাজ করে:

~    read one char of input
:    duplicate it
'[-! push 1 if the character is [, 0 otherwise
j    jump that number of characters
;    skip until next ;
\1+\ increment counter

similarily for ].

#q when end of input is reached, ~ reflects the IP back. q ends the program with the error value on the stack.

সম্পাদনা: বুঝতে পেরেছি যে এই গৃহীত ইনপুটগুলি পছন্দ করে ][, এখন এটি যখনই গণনা নেতিবাচক হয়ে যায় ব্যবহার করে শেষ হয়

:0\`j


@JoKing যে বেশ সুন্দর, মধ্যে দূরত্ব ব্যবহার [এবং ]উভয় সঙ্গে তুলনা না।
জাস্টিন

6

জে ( 38 )

exit({:+.<./)+/\+/1 _1*'[]'=/1!:1[3

ব্যাখ্যা:

  • 1!:1[3: স্টিডিন পড়ুন
  • '[]'=/: একটি ম্যাট্রিক্স তৈরি করুন যেখানে প্রথম সারিটি ইনপুটটিতে [s এর বিটমাস্ক এবং দ্বিতীয় সারিটি হ'ল] এস s
  • 1 _1*: প্রথম সারিকে 1 এবং দ্বিতীয় সারিকে -1 দ্বারা গুণান।
  • +/: ম্যাট্রিক্সের কলামগুলি একসাথে যোগ করুন, প্রতি চরিত্রের বদ্বীপ-প্রবর্তন করুন
  • +/\: প্রতিটি অক্ষরে ইন্ডেন্টেশন স্তর প্রদান করে এগুলির একটি চলমান মোট তৈরি করুন
  • ({:+.<./): চূড়ান্ত উপাদান ( {:) এবং ক্ষুদ্রতম উপাদান ( <./) এর জিসিডি ফিরিয়ে দিন । সমস্ত ধনুর্বন্ধনী মিলে গেলে, এই দুটিই হওয়া উচিত 0তাই এটি ফিরে আসবে 0। যদি ধনুর্বন্ধনী মেলে না, এটি একটি ননজারো মান প্রদান করবে।
  • exit: এতে প্রস্থান করার মানটি সেট করুন এবং প্রস্থান করুন।

চমৎকার ব্রেকডাউন ...
ক্রিস ক্যাশওয়েল

6

রুবি (64)

exit $<.read.tr('^[]','').tap{|x|0while x.gsub!('[]','')}.empty?

আগে (68) এটি ছিল:

exit ARGF.read.tr('^[]','').tap{|x| 0 while x.gsub!('[]','')}.empty?

অন্য সমতুল্য সমাধান ব্যবহার করে

exit $<.read.tr('^[]','').tap{|x|0while x.gsub!('[]','')}.size>0

sizeএকা ব্যবহার করতে পারবেন না কারণ ভারসাম্যহীন বন্ধনীগুলির মোট সংখ্যা 256 এর একাধিক হলে এটি মিথ্যা নেতিবাচক (!!!) দেবে


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

আরও ভাল সংস্করণ (কিছুটা সেড + টিআর সলিউশন দ্বারা অনুপ্রাণিত) আমি নিশ্চিত না যে আমি এর চেয়ে আরও ভাল কিছু পেতে পারি। কমপক্ষে এটিতে 4 টি সাদা জায়গা রয়েছে!
পুনরায় লিখিত

1
এবং এখনও, আমি তাদের দুটি অপসারণ করতে পারি।
কনরাড বোরোস্কি

2
আমি মনে করি চারপাশের স্পেসগুলি 0যেতে পারে।
মেরিনাস

দুর্দান্ত জায়গা, ধন্যবাদ!
3:30

5

পার্ল, 30 টি অক্ষর

আপনার মৌলিক পার্ল পুনরুদ্ধার পুনরুদ্ধারকারী রেজেক্স:

perl -0ne 'exit!/^(([^][]|\[(?1)\])*)$/'

এখানে ব্যবহৃত কমান্ড-লাইন আর্গুমেন্টগুলির সাথে অপরিচিত: তাদের -0ফাইল ফাইল ইনপুটগুলির উদ্দেশ্যে লাইন-এন্ডিং চরিত্র সেট করতে দেয়; -0কোনও যুক্তি ছাড়াই ব্যবহার করা লাইন-এন্ডিং চরিত্রটি ইওএফ-এ সেট করে। -nস্বয়ংক্রিয়ভাবে পূর্বে ইনপুটটি (এই ক্ষেত্রে পুরো ফাইলটি) পড়ে $_

যদি রেজেক্স ম্যাচ করে তবে এটি একটি আসল মান প্রদান করে যা প্রস্থান কোডের জন্য 0 এ প্রত্যাখ্যান করা হয়। অন্যথায়, মিথ্যা রিটার্ন মান 1 এর একটি প্রস্থান কোড লাভ করে।


অনুমান করুন এই 30 চর সমাধানটি বীট করার জন্য আমাকে আমার উত্তরটি আরও ভালভাবে গল্ফ করতে হবে।
জাস্টিন

সেখানে। আমার সমাধানটি এখন আগের চেয়ে অনেক খাটো। সুন্দর সমাধান। +1
জাস্টিন

4

bash (tr + sed) - 42

[ -z `tr -Cd []|sed ":a;s/\[\]//g;t a"` ]

যদি আপনি ত্রুটির বার্তাগুলি আপত্তি না করেন তবে আপনি 41 এর দৈর্ঘ্যের মধ্যে `এবং শেষ স্থানটি সরাতে পারেন ]


আমি যদি কিছু মিস না করি তবে আপনার অকার্যকর ব্যবহার রয়েছে catএবং $()(এ হিসাবে এটিও "[]"লেখা যেতে পারে [])। আমি এই উত্তরটি গ্রহণ করেছিলাম, তবে যতক্ষণ না দৈর্ঘ্যের উন্নতি দেখতে পাচ্ছি ততক্ষণ আমি এটিকে উজ্জীবিত করতে যাচ্ছি না, যদিও সংক্ষেপে, এটি বাশের পক্ষে আরও ছোট হতে পারে।
কনরাড বোরোস্কি

ঠিক আছে, আসলে আমি শেল স্ক্রিপ্টিংটি ভাল জানি না। আমি সেই বেশিরভাগ কাজ করতে অক্ষম। আমি $()ব্যাকটিকগুলি দিয়ে প্রতিস্থাপন করেছি এবং "[]"-> []আপনি প্রস্তাবিত কাজটি করেছিলেন।
shiona


1
আমি তরবারিটি দিয়ে চেষ্টা করতে পেরেছি এবং এটি ব্যর্থ হয়েছি, তবে আমি ভুল ছিল।
shiona

3

পার্ল (৫rs টি চর)

$/=0;$r=qr/[^][]*(\[(??{$r})\])*[^][]*/;<>=~m/^$r$/||die

সুস্পষ্ট পার্ল সমাধান: একটি পুনরাবৃত্তিমূলক রেজেক্স। দুর্ভাগ্যক্রমে এটি একটি বরং verbose নির্মাণ।


3

হাস্কেল (143)

import System.Exit
f=exitFailure
v c []|c==0=exitSuccess|True=f
v c (s:t)|c<0=f|s=='['=v(c+1)t|s==']'=v(c-1)t|True=v c t
main=getContents>>=v 0

জাগন থেকে: 2 জন প্রহরী ব্যবহার করা অন্য-এর চেয়ে বেশি ঘন বলে মনে হচ্ছে। এছাড়াও, আমি মনে করি না যে আপনার চেকগুলি বন্ধনীগুলি সঠিক ক্রমে রয়েছে ("] [" পাস করে)


ওহ বাহ, আজ যখন এটি দেখানো হয়েছিল কেবল তখনই এই মন্তব্যটি দেখেছে। আমার কোড স্থির করে, তবে হ্যাঁ দুর্দান্ত, প্রহরীরা মনে হচ্ছে (+1) কমছে।
জাগন

3

সি, 73 64 অক্ষর

ব্রেডবক্সের পরামর্শগুলির জন্য ধন্যবাদ (যদিও এটির জন্য সম্ভবত কম-এন্ডিয়ান প্রয়োজন):

i;main(c){while(read(0,&c,1)*(i+1))i+=(c==91)-(c==93);return i;}

কিভাবে এটা কাজ করে:

  • অন্তর্নিহিত ইন্ট গ্লোবাল i 0 এ সূচনা হয়
  • c একটি অন্তর্নিহিত int হয় যা পায় argc (1 টিতে প্রাথমিকীকৃত হয় তবে যতক্ষণ উচ্চ বিট সেট না করা হয় ততক্ষণ আমাদের যত্ন নেই)
  • read(0,&c,1)সি এর নিম্ন বাইটে (একটি ছোট-এন্ডিয়ান আর্কিটেকচারে) একক অক্ষর পড়ে এবং ইওএফ-তে 0 ফিরে আসে; i+1 != 0যদি না ভারসাম্য বন্ধনী উদ্ধৃতি -1 এ যায়; তাদের একসাথে গুন করা একটি (নিরাপদ) বুলিয়ান হিসাবে কাজ করে এবং এটির চেয়ে কম লাগে&&
  • c==911 মূল্যায়ণ '['এবং c==93মূল্যায়ন 1 জন্য ']'। (এখানে কিছু মজার বিট-ফিডলিং কৌশল থাকতে পারে যা ছোট হতে পারে তবে আমি কিছুই ভাবতে পারি না))
  • return iস্থিতি কোড 0 দিয়ে প্রস্থান করে যদি এটি ভারসাম্যপূর্ণ হয় তবে এটি শূন্য নয়। প্রযুক্তিগতভাবে 1-এ ফিরে আসা পসিক্স লঙ্ঘন করে তবে বাস্তবে কেউ সে বিষয়ে চিন্তা করে না।

পূর্ববর্তী সংস্করণ:

main(i){char c;i=0;while(read(0,&c,1)*(i+1))i+=(c==91)-(c==93);return i;}

getchar()পড়ার পরিবর্তে ব্যবহার করা কোডটি ছোট করবে এবং আপনার ভেরিয়েবলের intপরিবর্তে আপনাকে (অন্তর্নিহিত) ব্যবহারের অনুমতি দেবে char। এছাড়াও মনে রাখবেন যে গ্লোবালগুলি স্বয়ংক্রিয়ভাবে শূন্যে শুরু হয়।
ব্রেডবক্স 4'14

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

1
গ্লোবালগুলিও অন্তর্নিহিত হতে পারে। বাইরে কোনও ফাংশন c;একটি গ্লোবাল ইনট সংজ্ঞায়িত করে।
ব্রেডবক্স

এদিকে, গেটচর (সি) এটি কোনও সংক্ষিপ্ত করে না শেষ করে অন্তত এই পদ্ধতির ব্যবহার করে, কারণ এটি কোনও উপায়ে> = 0 এর জন্য পরীক্ষা করা দরকার, এবং সিটির জন্য একটি অন্তর্নিহিত ইন্টের জন্য গ্যারান্টিযুক্ত নয় শেষের কারণে কাজ।
ফ্লফি

কি হবে ][? আমি নিশ্চিত যে এটি ভারসাম্যপূর্ণ নয়। এটি একবারে নেতিবাচক হয়ে যায় কিনা আপনার ট্র্যাক রাখতে হবে না?
বনাম

2

লুয়া, 56

os.exit(("["..io.read"*a".."]"):match"^%b[]$"and 0 or 1)

"^%b[]$"এটা কি? তুমি কি ব্যাখ্যা করতে পারো? অবশ্যই, এটি রেজেক্স না?
ক্রাঙ্কার

@ ক্রাঙ্কার: তা হয়নি। এটি লুয়া প্যাটার্ন, রেজেক্স নয় (লুয়া প্যাটার্নগুলি রেজেক্সগুলির সাথে সমান, তবে সেগুলি নয়)। এই ক্ষেত্রে এটি স্ট্রিং (শুরুতে ম্যাচ ^), সুষম সেট [এবং ]কিছু inbetween (সঙ্গে %b[]), এবং স্ট্রিংয়ের শেষ প্রান্ত ( $)।
কনরাড বোরোস্কি


1

ম্যাথেম্যাটিকা, ৮৮ টি অক্ষর

s = "[ [ my crazy code ] [ don't explode please! [] [ :)Ahh) ]  [] []]]";

r=StringReplace;
StringLength@FixedPoint[r[#,"[]"-> ""]&,r[s,Except@Characters["[]"]-> ""]]

ফাংশন সহs name like নিয়মিত এক্সপ্রেশন ular সহ এবং StringLengthআমি ম্যাথমেটিকার সাথে টেক্সট কোড গল্ফ প্রসঙ্গে কখনই জিততে পারি না! :)
মুর্তা 4'14

আমি জানি আপনি কী বলতে চেয়েছেন :) ToCharacterCodeসেই তুলনায় অনেক দীর্ঘ ord... পিএস: একটি প্রস্থান কোড সেট করার বিষয়ে কী?
আজাদজা

Length[StringCases[s,"["|"]"]//.{x___,"[","]",y___}:>{x,y}]
আলেফাল্ফ

1

রুবি, 59 58

বন্ধনী খোলার এবং বন্ধ করার জন্য স্ক্যান, [1 এবং ]-1 হিসাবে গণনা করা এবং যদি সংখ্যা 0 এর নিচে নেমে যায় তবে প্রস্থান করা হবে।

b=0
$<.read.scan(/\]|\[/){exit 1if(b+=92-$&.ord)<0}
exit b

1
উত্সাহিত, এবং একটি চরিত্র দ্বারা সংক্ষিপ্ত ( exit 1আপনি জিজ্ঞাসা ক্ষেত্রে আমি সাদা স্থান সরিয়ে ফেলেছি )।
কনরাড বোরোস্কি


1

ট্যুরিং মেশিন কোড, 286 276 বাইট

আবার, আমি এখানে সংজ্ঞায়িত নিয়ম টেবিল সিনট্যাক্স ব্যবহার করছি

0 * * l 1
1 _ ! r Q
5 _ _ r 5
5 * * * W
W [ ! l E
W ] ! l T
W _ _ l I
W * ! r *
E ! ! l *
E * * * R
R _ [ r O
R * * l *
T ! ! l *
T * * * Y
Y _ _ r U
Y * * l *
U [ _ r O
U ! ! * halt-err
I ! ! l *
I _ _ r halt
I * * l halt-err
O ! ! r Q
O _ _ l I
O * * r *
Q ! ! r *
Q * * * W

haltইনপুট গ্রহণ করতে এবং halt-errএটি প্রত্যাখ্যান করতে রাজ্যে শেষ হয় ।


halt-errসংক্ষিপ্ত হতে পারে যেমন halt*উদাহরণস্বরূপ।
এরিক আউটগল্ফার


1

হাস্কেল ( 167 , 159)

এটি কি বেশিরভাগ মজা করার জন্যই হয়েছিল, কীভাবে এটি আরও খাটো করা যায় সে সম্পর্কে কারও কোনও পরামর্শ পেলে আমি তাদের শুনে আনন্দিত হব :)

import System.Exit
p x y b|b=x|True=y
main=getContents>>=(return.all (>=0).scanl (\v->p (v-1) (v+1).(==']')) 0.filter (`elem`"[]"))>>=p exitSuccess exitFailure

সম্পাদনা: মন্তব্যগুলিতে আমাকে নির্দেশিত একটি সমস্যা স্থির করে (11 বাইট যুক্ত করা হয়েছে)।

সম্পাদনা 2: পরীক্ষার জন্য সহায়ক ফাংশন তৈরি করা হয়েছে ব্যবহারকারী 13350 দ্বারা অনুপ্রাণিত গার্ডগুলি ব্যবহার করে 8 বাইট অপসারণ করে ic



@ user202729 এটি একটি দুর্দান্ত পয়েন্ট, এটি ছিল অত্যন্ত গাফিল। খুব নিশ্চিত যে এটি এখন ঠিক আছে।
জাগন

1

স্ট্যাক্স , 14 11 অক্ষর

╬Äτ↔EªÉs «Ü

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

-3 বাইটের জন্য @ রিসার্সিভকে ক্রেডিট।

এএসসিআইআই সমতুল্য:

.[]Y|&{yz|egp!

সমস্ত অক্ষর বাদে সরান [], তারপরে []স্ট্রিংটি আর পরিবর্তন না হওয়া পর্যন্ত সরান । 1চূড়ান্ত স্ট্রিং ফাঁকা থাকলে ফিরে আসুন ।


1
খুশী হলাম। আপনি .[]|&অক্ষরগুলি ফিল্টার করতে ব্যবহার করতে পারেন এবং তারপরে 11 এর
পুনরাবৃত্তির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.