ব্রেইনফ তৈরি করা হচ্ছে *** এনওপিএস


26

কখনও কখনও ব্রেইনফাক কোড লেখার সময়, আপনি এটি ডিবাগিংকে উত্সাহিত করার জন্য প্রয়োজনের চেয়ে দীর্ঘতর করার প্রয়োজন বোধ করেন । আপনি কেবল ><সেখানে প্রবেশের মাধ্যমে এটি করতে পারেন , তবে এটি কী মজা? আপনার কোড পড়ে যে কেউ বিভ্রান্ত করার জন্য আপনাকে আরও কিছু কম ও কম NIPey লাগবে।

ব্রেইনফাকের দ্রুত পরিচয়

ব্রেইনফাক একটি অদ্ভুত প্রোগ্রামিং ভাষা যা 1993 সালে আরবান মোলার তৈরি করেছিলেন এবং এটি চরম সংক্ষিপ্ততার জন্য উল্লেখযোগ্য। (উইকিপিডিয়া)

Brainfuck আট কমান্ড উপর ভিত্তি করে একটি ভাষা: +-><,.[]। কোডটি টিউরিং মেশিনের মতো কোনও কিছুর উপরে চালিত হয়: একটি অসীম টেপ যার উপরে মানগুলি পরিবর্তন করা যায়। এই চ্যালেঞ্জের মধ্যে আমরা প্রথম চারটির দিকে মনোনিবেশ করব:

+    increment the value at the pointer
-    decrement the value at the pointer
>    move the pointer right
<    move the pointer left

ব্রেইনফাক এনওপি

একটি ব্রেইনফাক এনওপি হ'ল ব্রেনফাক চরিত্রগুলির একটি ক্রম যা কোনও রাজ্য থেকে মৃত্যুদন্ড কার্যকর করা হলে, রাজ্যে কোনও পরিবর্তন আনার দিকে পরিচালিত করে। এগুলিতে উপরে বর্ণিত চারটি চরিত্র রয়েছে।

চ্যালেঞ্জ

চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কার্যকর করা হলে প্রদত্ত দৈর্ঘ্যের একটি এলোমেলো ব্রেইনফাক এনওপি উত্পন্ন করে।

ইনপুট

আপনি ইনপুট হিসাবে একটি nonnegative এমনকি পূর্ণসংখ্যার পাবেন n। (বিজোড়ের জন্য এনওপিগুলি অসম্ভব n))

আউটপুট

আপনি দৈর্ঘ্যের একটি এলোমেলো ব্রেইনফাক এনওপি আউটপুট পাবেন n

বিধি

  • এনওপি-র সংজ্ঞা: প্রোগ্রামের আউটপুট যখন কোনও মস্তিস্কে প্রোগ্রামের যে কোনও সময়ে সন্নিবেশ করা হয়, তখন বলা প্রোগ্রামের আচরণটি কোনওভাবেই বদলাতে হবে না। অন্য কথায়, এটি অবশ্যই দোভাষীদের অবস্থার পরিবর্তন করবে না।
    • মনে রাখবেন যে উদাহরণস্বরূপটি +>-<ভুল, কারণ এটি দুটি কক্ষের মান পরিবর্তন করে তাদের পরিবর্তন না করে। পোস্ট করার আগে দয়া করে এর জন্য আপনার সমাধানটি পরীক্ষা করুন।
    • এছাড়াও মনে রাখবেন যে এটি +>-<->+<এমন একটি এনওপি যা কেবল অপসারণের মাধ্যমে কোনও কিছুতেই হ্রাস করা যায় না >< <> +- -+। সুতরাং, আপনি এমন একটি অ্যালগরিদম ব্যবহার করতে পারবেন না যা কেবল একে অপরের মধ্যে সন্নিবেশ করায়।
  • দৈর্ঘ্যের প্রতিটি বৈধ এনওপিকে nআউটপুটে উপস্থিত হওয়ার ননজারো সুযোগ থাকতে হবে। বিতরণ অভিন্ন হতে হবে না, যদিও।
  • প্রশ্নে ব্রেইনফাক ইন্টারপ্রেটারে সালিসী নির্ভুলতা কোষগুলির দ্বিগুণ অনন্ত টেপ রয়েছে। এটি হ'ল আপনি উভয় দিক থেকে সীমাহীনভাবে যেতে পারবেন এবং প্রতিটি ঘরে অনির্দিষ্টকালের জন্য বৃদ্ধি / হ্রাস করতে পারবেন।
  • প্রোগ্রামটি আমার মেশিনে = 100 এর জন্য 1 মিনিটের মধ্যেn শেষ করতে হবে , যাতে কোনও সম্ভাব্য এনওপি তৈরি করা যায় না এবং একটি বাছাই করা যায় না।
  • যদি অবৈধ ইনপুট দেওয়া হয় (অ-পূর্ণসংখ্যা, নেতিবাচক, বিজোড় ইত্যাদি) আপনি ক্র্যাশ সহ আপনার পছন্দসই কিছু করতে পারেন।

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

উদাহরণ

এখানে n= 4 এর জন্য সমস্ত বৈধ আউটপুট রয়েছে :

++--    +-+-    +--+    --++    -+-+    -++-
>><<    ><><    ><<>    <<>>    <><>    <>><
><+-    ><-+    <>+-    <>-+
>+-<    >-+<    <+->    <-+>
+><-    -><+    +<>-    -<>+
+-><    -+><    +-<>    -+<>

এখানে n= 20 এর কয়েকটি সম্ভাব্য আউটপুট রয়েছে :

+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<

18
এখানে একটি ব্রেইনফাক এনওপি রয়েছে যা +-<>আপনি চেয়েছিলেন তা ব্যবহার করে না :a
আন্ডারগ্রাউন্ডোমোরিয়েল

1
আমি মনে করি না অ-সরল এনওপিগুলি বিদ্যমান, তাই আপনি সম্ভবত সেই যোগ্যতা সরাতে পারেন। .একটি পার্শ্ব-প্রতিক্রিয়া আছে, ,একটি মান ওভাররাইট করে যা ব্যবহার ব্যতীত পুনরুদ্ধার করা যায় না []। তবে []শূন্যের মান নির্ধারণ করবে। এটি কোনও মানকেও ওভাররাইট করে (যাতে []এটি পুনরুদ্ধার করার জন্য আমাদের আরও একটি প্রয়োজন ) তবে এর মতো কিছু সহ আমাদের এমন একটি ঘর অনুসন্ধান করতে [>]হবে এবং আমরা যে অবস্থান থেকে এসেছি তা নির্ভরযোগ্যভাবে ফিরে আসা অসম্ভব।
মার্টিন এন্ডার

4
@ এমিউল "প্রশ্নোত্তর মস্তিষ্কের ব্যাখকারীর কাছে নির্বিচারে নির্ভুলতার কোষগুলির দ্বিগুণ অসীম টেপ রয়েছে" "
মার্টিন এন্ডার

2
দয়া করে মনে রাখবেন যে "ব্রেইনফাক" এখন আর সিস্টেম স্তরের প্রশ্নের শিরোনামে অনুমোদিত নয় । মনে হচ্ছে আপনি অ-এসকিআইআই অক্ষর ব্যবহার করে এই সীমাবদ্ধতাটি সরিয়ে ফেলতে সক্ষম হয়েছিলেন। ভবিষ্যতে, দয়া করে এই সীমাবদ্ধতা মেনে চলুন।
অ্যালেক্স এ।

2
@ندرগ্রাউন্ডোমোরিয়েল ওয়েল, এটি ট্যুরিং সম্পূর্ণ ... সুতরাং প্রযুক্তিগতভাবে অন্য যে কোনও ভাষার মতো এটিতে একটি পিআরএনজি লিখতে পারে। (যদিও বীজ বপন করা এটি কঠিন হতে পারে))
পূর্বক্কাডারি

উত্তর:


13

সিজেম, 62 59 বাইট

3 বাট বাঁচানোর জন্য nhahtdh ধন্যবাদ।

কারন দীর্ঘ সসীম সম্ভাব্যতা সঙ্গে প্রতিটি নো অপ প্রদর্শিত হয় হিসাবে হিসাবে কোন নির্দিষ্ট বিতরণের জন্য কোন প্রয়োজন নেই, আমরা এই কেবল একটি সুষম নম্বর রয়েছে এমন স্ট্রিং উৎপাদিত দ্বারা অনেক প্রক্রিয়া সহজ করতে -+এবং <>যথাক্রমে, টেস্টিং যদি এটি একটি NOP এবং যদি এটা বাছাই নয়।

অবশ্যই, দীর্ঘতর ইনপুটগুলির জন্য, এটি প্রায় সর্বদা সাজানো আউটপুট তৈরি করে, তবে আপনি কিছু ইনপুট দিয়ে কোডটি পরীক্ষা করতে পারেন 8তা দেখতে যে এটি নীতিগতভাবে প্রদত্ত দৈর্ঘ্যের কোনও এনওপি উত্পাদন করতে পারে।

ri_0a*\2/{;"-+<>":L2/mR}%smr:SL["Xa.Xm"3/2e*L]z:sers~0-S$S?

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


1
হ্যাঁ ... নির্বিচার সীমাটি 10 ​​সেকেন্ডের নীচে n = 1000 হওয়া উচিত। কম্পিউটারগুলি আজ রোজা রাখার সহজ উপায় ^^ কারণ অ্যালগরিদমিক উত্তরগুলি এটি এন = 1000 এর জন্য এক সেকেন্ডের অধীনেও সমাধান করে
ফ্যালকো

এমনকি বৃহত্তর এনগুলির জন্য, আমি মনে করি যদি ভারসাম্যযুক্ত স্ট্রিং NOP না হয় তবে কেবলমাত্র আউটপুটটি সাজানো সম্ভব। বিতরণটি মারাত্মকভাবে স্কিউড, তবে এটি প্রশ্ন দ্বারা অনুমোদিত।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ এটি একটি ঝরঝরে ধারণা।
মার্টিন ইন্ডার

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ ধন্যবাদ, এটি এখানে তিনটি বাইটও সঞ্চয় করে।
মার্টিন এন্ডার

16

সিজেম, 118 116 বাইট

এটি কিছুটা হাতছাড়া হয়ে গেল ... বিশেষত দ্বিতীয়ার্ধে মনে হয় এটি খুব গল্ফযোগ্য হওয়া উচিত।

ri2/_)mr:R-"<>"R*mr_'=fm0\{1$+}%+__&e`]:\{mr1aa..+}*\@](\z:~\{~\("+-"*mr1$3$e=[{_,)mr_2$<@@>}*+]@@f{`1$`={(}@?\}W<}/

এটি এখানে পরীক্ষা করুন।

এটি N = 100বেশ তাত্ক্ষণিকভাবে পরিচালনা করে। কোডের পুরো ব্রেকডাউনটি এখনই লেখার আমার কাছে সময় নেই, সুতরাং এখানে আলগোরিদিম রয়েছে:

  • একটি র্যান্ডম সুষম স্ট্রিং জেনারেট করুন <এবং >র্যান্ডম (এমনকি) মধ্যে দৈর্ঘ্য সঙ্গে 0এবং Nসমেত।
  • এই অ্যারে মধ্যে টেপ মাথা অবস্থান রিফেল। যেমন "<>><"হয়ে যায় [0 '< -1 '> 0 '> 1 '< 0]
  • প্রক্রিয়াটিতে পৌঁছেছে সমস্ত পদের একটি তালিকা পান।
  • এই জাতীয় প্রতিটি অবস্থানের জন্য একটি খালি স্ট্রিং সূচনা করুন। দৈর্ঘ্যের একটি স্ট্রিংয়ে পৌঁছানোর জন্য কয় জোড়া অক্ষর বাকী রয়েছে তা নির্ধারণ করুন N
  • প্রতিটি অবশিষ্ট জোড়া +-জন্য একটি এলোমেলো অবস্থানের স্ট্রিং এ যুক্ত করুন।
  • এই সমস্ত স্ট্রিং পরিবর্তন করুন।
  • প্রতিটি অবস্থানের জন্য নির্ধারিত হয় যে রিফাল্ড অ্যারেতে position অবস্থানটি প্রায়শই ঘটে এবং সেই সংযুক্ত স্ট্রিংটিকে সেই অনেকগুলি (এলোমেলো দৈর্ঘ্যের) খণ্ডে বিভক্ত করে।
  • রিফলেড অ্যারেতে অবস্থানের উপস্থিতিগুলিকে এর এলোমেলো খণ্ডগুলি দিয়ে প্রতিস্থাপন করুন।

সম্পন্ন. এটি পর্যবেক্ষণের ভিত্তিতে যা:

  • যে কোনও এনওপির অবশ্যই সমান পরিমাণ থাকতে হবে <এবং >টেপ মাথাটি মূল অবস্থানে ফিরিয়ে আনতে হবে।
  • কোডটি একটি এনওপি হবে যতক্ষণ না প্রতিটি টেপ সেল যত বার হ্রাস হয় তত বাড়ানো হয়।

র্যান্ডম কিন্তু সুষম পরিমাণে বিতরণ করার মাধ্যমে +s এবং -সব জায়গায় যেখানে টেপ মাথা একটি প্রদত্ত সেল চালু থাকে মধ্যবর্তী গুলি, আমরা নিশ্চিত যে আমরা প্রতি সম্ভব NOP পাবেন।


4

গণিত, 350 বাইট

Quiet@(For[a="+",If[{##4}=={},#3!=0||Union@#!={0},Switch[#4,"+",#0[ReplacePart[#,#2->#[[#2]]+1],#2,#3,##5],"-",#0[ReplacePart[#,#2->#[[#2]]-1],#2,#3,##5],">",#0[#~Append~0,#2+1,#3+1,##5],"<",If[#2<2,#0[#~Prepend~0,1,#3-1,##5],#0[#,#2-1,#3-1,##5]]]]&@@{{0},1,0}~Join~Characters@a,a=""<>RandomSample@Flatten@RandomChoice[{{"+","-"},{">","<"}},#/2]];a)&

বেশ দীর্ঘ? হ্যাঁ। আমি কি যত্ন নেই? অন্য কেউ বৈধ উত্তর পোস্ট না করা পর্যন্ত নয়।


4
আপনার কি কোনও ব্যাখ্যা যুক্ত করতে আপত্তি হবে, যাতে লোকেরা সত্যই নিজেকে বোঝাতে পারে যে এটি বৈধ? :)
মার্টিন এন্ডার

কিভাবে ঠিক করে কাজ করে? যদি আমি একটি নম্বর দিয়ে ফাংশনটি কল করি তবে এটি কেবল ফিরে আসে +
মার্টিন এন্ডার

@ মার্টিনব্যাটনার ফিক্সড ... বর্তমানে এটি কেবলমাত্র সমান সংখ্যক +- -এবং <- >জোড়া দিয়ে এলোমেলো প্রোগ্রাম উত্পন্ন করে যতক্ষণ না কেউ এনওপি হয়ে যায়। এর অর্ধেকটি সরল বিএফ দোভাষী নিয়েছেন।
LegionMammal978

এটি কি এক মিনিটের মধ্যে 100 দৈর্ঘ্যের একটি বৈধ নো-অপশন উত্পন্ন করে?
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার হ্যাঁ গড়ে, আমি বলব যে এটি প্রায় 5 সেকেন্ড সময় নেয়। প্রথম দিকে আমি সম্পূর্ণভাবে র্যান্ডম প্রোগ্রাম চেষ্টা করেছি, কিন্তু এটা দৈর্ঘ্য 100 কখনও সমাপ্ত
LegionMammal978


2

পাইথন 3 , 163 বাইট

from random import*
n=int(input())
p=0;d=[0]*n;a=choices(b'+-<>',k=n)
for c in a:d[p]+=c%2*(44-c);p+=~c%2*(c-61)
if p|any(d):a=n//2*b'+-'
print(*map(chr,a),sep='')

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

সম্পূর্ণ প্রোগ্রাম যা ফলাফলগুলি STDOUT এ মুদ্রণ করে। বিএফ কোড চালায় এমন লাইনটি গল্ফযোগ্য হতে পারে।

টাইলো এর পদ্ধতির অবলম্বন; উত্পন্ন বিএফ কোডটি যদি কোনও এনওপি না হয় তবে এটি পুরোপুরি ফেলে দিন এবং পুনরায় '+-'পুনরায় পড়তে হবে।



@ l4m2 সেই প্রয়োজনীয়তাটি লক্ষ্য করেন নি। সংশোধন করা হয়েছে।
বুদ্বুদ


1

উল্ফর্যাম ভাষা (ম্যাথামেটিকাল) , 224 বাইট

(s=RandomSample[##&@@@Table["<"">",(r=RandomInteger)[#/2]]];While[(g=Length@s)<#,s=Insert[s=Insert[s,"+",i=r@g+1],"-",RandomChoice@@Select[GatherBy[0~Range~++g,Count[#,"<"]-Count[#,">"]&@Take[s,#]&],!FreeQ[#,i]&]+1]];""<>s)&

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

এখানে আন-গল্ফেড (বা বরং, পূর্ব-গল্ফযুক্ত) সংস্করণটি রয়েছে:

Function[{n},
 k = RandomInteger[n/2];
 s = RandomSample[## & @@@ Table["<" ">", k]];
 While[Length[s] < n,
   s = Insert[s, "+", i = RandomInteger[Length[s]] + 1];
   p = GatherBy[Range[0, Length[s]], 
     Count[#, "<"] - Count[#, ">"]& @ Take[s, #]&];
   j = RandomChoice @@ Select[p, ! FreeQ[#, i] &]];
   s = Insert[s, "-", j + 1];
   ];
 ""<>s]

আমরা প্রথম একটি র্যান্ডম সংখ্যা বাছাই <'s এবং >' ব্যবহার করতে s, এবং প্রত্যেকে সমান নম্বর সহ একটি র্যান্ডম তালিকা উৎপন্ন।

বাকী অক্ষরগুলি পূরণ করার জন্য, আমরা একটি অবস্থান বেছে +নিয়েছি যেখানে একটি যুক্ত করতে হবে , তারপরে পয়েন্টারটি একই অবস্থানের দিকে নির্দেশ করবে এবং -সেখানে একটি যুক্ত করুন ।

তালিকার দৈর্ঘ্য হওয়া পর্যন্ত পুনরাবৃত্তি করুন nএবং ফলাফলটিকে স্ট্রাইফাই করুন।

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