এই ফু মেশিনটি কি থামবে?


43

কোনও টুরিং মেশিনের হোল্টগুলি অনস্বীকার্য হিসাবে সুপরিচিত কিনা তা নির্ধারণ করা, তবে সহজ মেশিনগুলির জন্য এটি প্রয়োজনীয় নয়।

একটি ফু মেশিন একটি সীমাবদ্ধ টেপযুক্ত একটি মেশিন, যেখানে টেপের প্রতিটি কক্ষে একটি পূর্ণসংখ্যা বা থামার চিহ্ন থাকে h, যেমন

2 h 1 -1

নির্দেশের পয়েন্টারটি প্রথম কক্ষে নির্দেশ করে শুরু হয়:

2 h 1 -1
^

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

-2 h 1 -1
     ^

নির্দেশ পয়েন্টারটি থামার প্রতীকটির দিকে নির্দেশ না করা পর্যন্ত Foo মেশিন এটি করে চলে h। সুতরাং, এই প্রোগ্রামটির সম্পূর্ণ সম্পাদন এখানে:

2 h 1 -1
^

-2 h 1 -1
     ^

-2 h -1 -1
         ^

-2 h -1 1
      ^

-2 h 1 1
   ^

টেপটিও বিজ্ঞপ্তিযুক্ত, সুতরাং যদি নির্দেশ পয়েন্টারটি টেপের একপাশে চলে যায় তবে এটি অন্য দিকে চলে যায়, যেমন:

3 h 1 3
^
-3 h 1 3
       ^
-3 h 1 -3
     ^
-3 h -1 -3
         ^
-3 h -1 3
 ^
3 h -1 3
  ^

এই ফু মেশিনগুলির একটি আকর্ষণীয় বিষয় হ'ল কিছু কিছু থামে না, যেমন:

1 2 h 2
^
-1 2 h 2
   ^
-1 -2 h 2
        ^
-1 -2 h -2
    ^
-1 2 h -2
        ^
-1 2 h 2
   ^

এই প্রোগ্রামটি চিরকালের জন্য শেষ চারটি রাজ্যে লুপিং অবিরত করবে।

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

এটি , তাই আপনার প্রোগ্রামটি যতটা সম্ভব সংক্ষিপ্ত করার চেষ্টা করুন!

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

2 h 1 -1
Halts
3 h 1 3
Halts
h
Halts
1 1 1 1 h
Halts
2 1 3 2 1 2 h
Halts
3 2 1 1 4 h
Halts
1 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 h -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36
Halts

2 h
Does not halt
1 2 h 2
Does not halt
8 1 2 3 3 4 8 4 3 2 h
Does not halt
1 2 4 3 h 2 4 5 3
Does not halt
3 1 h 3 1 1
Does not halt
1 2 h 42
Does not halt

5
ঠিক তাই আমি নিশ্চিত, এটিকে সমাধান করার জন্য অ্যালগরিদম সম্পর্কে। আমি কোনও অ্যালগরিদম মাস্টারের নই তাই আমি ভুল দিকে যাওয়ার আগে জিজ্ঞাসা করতে পছন্দ করি। একটি অ-থামানো ফু মেশিন কি সর্বদা তার সঠিক আসল অবস্থানে ফিরে আসবে? বা "বিশৃঙ্খল-আচরণমূলক" নন-হোল্টিং মেশিন রয়েছে?
ভি। কুর্তোইস

5
@ ভি.কোর্তোয়াস সমস্ত অ-থামানো ফু মেশিনগুলি একটি রাজ্যের লুপে শেষ হবে, কারণ কেবলমাত্র চূড়ান্তভাবে অনেকগুলি সম্ভব রাষ্ট্র রয়েছে যে কোনও ফু মেশিন থাকতে পারে (সেখানে নির্দেশ নির্দেশক হতে পারে এমন সম্ভাব্য জায়গাগুলি রয়েছে এবং 2 possible n সম্ভব টেপ কনফিগারেশন)। প্রতিটি রাজ্যের একটি এবং কেবল একটি "পরবর্তী রাষ্ট্র" থাকে। সুতরাং, যদি কোনও ফু মেশিন ইতিমধ্যে ইতিমধ্যে থাকা অবস্থায় ফিরে আসে তবে এটি কেবল লুপিং চালিয়ে যাবে। যেহেতু কেবলমাত্র চূড়ান্তভাবে অনেকগুলি রাজ্য রয়েছে তাই এটি বিশৃঙ্খলাবদ্ধভাবে রাষ্ট্রগুলির মধ্যে ঝাঁপিয়ে উঠতে পারে না কারণ অবশেষে শেষ হয়ে যাবে এমন একটিতে যা ইতিমধ্যে ইতিমধ্যে রয়েছে
লিও টেনেনবাম

3
প্রস্তাবিত পরীক্ষার কেস: 1 2 h 42(থামবে না)
আর্নৌল্ড

6
প্রস্তাবিত পরীক্ষা মামলা: 3 2 1 1 4 h। এইটি থামায় তবে উপাদানগুলির সংখ্যার দ্বিগুণ চেয়ে বেশি পুনরাবৃত্তি প্রয়োজন।
আর্নৌল্ড

10
অতিরিক্ত দীর্ঘ পরীক্ষার ক্ষেত্রে প্রস্তাবিত: 1 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 h -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36যা 78646464৩০ পদক্ষেপের পরে থামে।
ম্যাগমা

উত্তর:


11

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 71 বাইট

x=>{for(int i=0,k=0,f=x.Count;i++<1<<f;k%=f)k-=(x[k]*=-1)%f-f;i/=x[k];}

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

নিম্নলিখিতটি বৈধ কিনা আমি জানি না, যেহেতু এটির স্বাক্ষর সহ একটি কাস্টম প্রতিনিধি প্রয়োজন unsafe delegate System.Action<int> D(int* a); এবং এটি ব্যবহারের জন্য একটি unsafeব্লকে আবদ্ধ করতে হবে, তবে এটি যাইহোক:

সি # (.নেট কোর) , 64 বাইট

x=>f=>{for(int i=0,k=0;i++<1<<f;k%=f)k-=(x[k]*=-1)%f-f;k/=x[k];}

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

এই ফাংশনটি একটি ইনট * গ্রহণ করে এবং একটি অ্যাকশন প্রদান করে; অন্য কথায়, এটি একটি ত্রিযুক্ত ফাংশন। আমি পয়েন্টারগুলির একমাত্র কারণ হ'ল কোডগলফ.মেটা.স্ট্যাকেক্সেঞ্জিং ডাব্লু / 13262/84206, যা আমাকে ইতিমধ্যে অ্যারের দৈর্ঘ্যের সাথে নির্দিষ্ট করে একটি ভেরিয়েবল রেখে বাইটস সংরক্ষণ করতে দেয়।

@ সোমনকে 9 টি বাইট সংরক্ষণ করা হয়েছে


আপনার কোডটি 2 টি বাইট দ্বারা গল্ফ করুন: tio.run/…
আইকিউক 143

@ IQuick143 নিস ধরা, ধন্যবাদ
অজ্ঞতা প্রতিমূর্তি

আমি নিশ্চিত যদি কোনো প্রান্ত মামলা করে যার জন্য কাজ করবে না হয় নই, কিন্তু বর্তমান পরীক্ষার বিষয় কোন ভঙ্গ ছাড়া আপনি প্রতিস্থাপন করতে পারে 1<<fসঙ্গে 2*fএকটি বাইট সংরক্ষণ করুন।
কেভিন ক্রুইজসেন

1
ভয়ঙ্কর লিনকিউ ম্যাজিক এবং আর্নৌল্ডের ফিক্স সহ 77 বাইট । এই সমাধানটি কীভাবে কাজ করে আমার কোনও ধারণা নেই, তাই আমি এটি ভেঙে ফেলেছি।
কেউ

1
একটি সাধারণ বুদ্ধিমান 1-বাইট গল্ফের মাধ্যমে 63 বাইট এবং আইওটিকে ত্রুটি / কোনও ত্রুটি পরিবর্তন করে। লিঙ্কের লিঙ্ক
কেউ 13

7

পাইথন 3 , 63 89 বাইট

def f(x):
 for i in range(2**len(x)):a=x[0];x[0]=-a;b=a%len(x);x=x[b:]+x[:b]
 return a==0

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

পাইথন 2 এর জন্যও কাজ করে; পাইথন 2 এ একটি বাইট সংরক্ষণ করা যায় প্রিন্টের সাথে রিটার্নের পরিবর্তে এবং ফাংশন প্রিন্টটি ফিরে আসার পরিবর্তে স্টাডাউটে রেখে having আর থামার Trueজন্য এবং Falseঅ-থামার জন্য পরিণত হয় turns

থামার জন্য আমাকে আরও চেক করা দরকার বলে মনে করার জন্য @ নীল এবং @ আর্নল্ডকে ধন্যবাদ জানাই @ জিতসকে ধন্যবাদ যার সাথে সমস্যাটি দেখানোর জন্য [2,0]। @ মাইপেটলিয়নকে এই বিষয়টি লক্ষ করার জন্য ধন্যবাদ যে টেপের মানগুলির নিরঙ্কুশ টেপের দৈর্ঘ্য অতিক্রম করতে পারে।


5
ঠিক আছে, আমি কামড় দেব: আপনি কীভাবে x+xযথেষ্ট জানেন ?
নীল

4
@ নীল এটি আসলে পর্যাপ্ত নয়। একটি পাল্টা উদাহরণ [ 3, 2, 1, 1, 4, 0 ], যা 12 টিরও বেশি পুনরাবৃত্তিতে থামে।
আর্নৌল্ড

1
len(x)*x[8,7,6,5,7,4,0,3,6]92

2
2**len(x)সর্বোচ্চের চেয়ে এখনও কিছুটা কম নয় ? আমি n*(2**n)(এর সাথে n=len(x)-1) রাজ্যের সংখ্যা গণনা করি ।
ওব্লান্স

1
@ ওউবালেন্স আমি কী বলতে চাইছি তা আমি দেখতে পেয়েছি, যেহেতু প্রতিটি রাজ্যে প্রতিটি কোষে একটি পয়েন্টার থাকতে পারে ... তবে আমার মনে হয় যে প্রতিটি কোষ কেবলমাত্র অন্য দুটি কোষে রূপান্তর করতে পারে এই বাস্তবতার দ্বারা আরও কিছু সীমা প্রয়োগ করা হয়েছে। একটি সাইড নোট হিসাবে: চ্যালেঞ্জ কিছুই বলছেন সেখানে রয়েছে ইনপুট একটি বিরাম রাষ্ট্র হতে
জো রাজা

6

জেলি , 15 11 বাইট

N1¦ṙ⁸ḢƊÐLḢẸ

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

একটি মোনাডিক লিঙ্ক যা ইনপুটটিকে 0 টি থামানোর জন্য 0 ব্যবহার করে পূর্ণসংখ্যার তালিকা হিসাবে নেয়। ইনপুটগুলি থামানোর জন্য 0 এবং থামে না এমনদের জন্য 1 প্রদান করে।

ÐLকোনও নতুন ফলাফল না দেখা পর্যন্ত লুপ হয়ে যাবে এর কারণগুলির জন্য পুনরাবৃত্তির সংখ্যা কাজ করার প্রয়োজনের বিষয়টি এড়িয়ে চলে ।

একটি বাইট সংরক্ষণ করার জন্য @ জোনাথান অ্যালানকে ধন্যবাদ!

ব্যাখ্যা

      ƊÐL   | Loop the following as a monad until the result has been seen before:
N1¦         | - Negate the first element
   ṙ⁸       | - Rotate left by each of the elements
     Ḣ      | - Take just the result of rotating by the first element
         Ḣ  | Finally take the first element
          Ẹ | And check if non-zero

সমস্ত এন্ট্রি দ্বারা আবর্তিত এবং তারপরে কেবল প্রথম ফলাফল রেখে একটি বাইট সংরক্ষণ করুন:N1¦ṙ⁸ḢƊÐLḢẸ
জনাথন অ্যালান

5

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

def f(a):
	s={0,};i=0
	while{(*a,)}-s:s|={(*a,)};a[i]*=-1;i-=a[i];i%=len(a)
	return a[i]==0

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

-40 বাইট জোকিং এবং জিতসকে ধন্যবাদ


@ জোকিং 109 বাইট প্রথম লাইনে পরিবর্তনশীল অ্যাসাইনমেন্ট করে।
জিতসে

খালি সেট দিয়ে শুরু না করে whileশর্তটি পুনরায় প্রয়োগ না করে তারকাচিহ্নযুক্ত প্রসারণে টুপল রূপান্তরকরণের মাধ্যমে 92 বাইট
জিতসে

@ জোকিং ড্যাম, আমি কখনই শিখি না: পি। 93 বাইট তখন।
জিতসে


@ জোকিং ধন্যবাদ!
হাইপারনিউট্রিনো

5

পার্ল 6 , 46 43 36 বাইট

{$_.=rotate(.[0]*=-1)xx 2**$_;!.[0]}

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

দ্বারা থামানো প্রতিনিধিত্ব করে 0এবং মেশিনটি থামলে সত্য প্রত্যাবর্তন করে। এটি যুক্তির 2**(length n)সময়গুলি পুনরাবৃত্তি করে , যেখানে পয়েন্টারটি যদি হোল্ট সেলটিতে শেষ হয় তবে এটি সেখানেই থাকে, অন্যথায় এটি একটি বিরতিহীন কক্ষে থাকবে। এটি কাজ করে কারণ 2**nফু মেশিনটি থাকার জন্য কেবলমাত্র সম্ভাব্য রাজ্য (হোল্ট কোষ উপেক্ষা করে) রয়েছে, যেহেতু প্রতিটি নন-স্টপ সেলটিতে কেবল দুটি রাষ্ট্র থাকে। ঠিক আছে হ্যাঁ, এর চেয়ে বেশি রাজ্য রয়েছে, তবে পয়েন্টারগুলির মধ্যে সীমিত সম্ভাব্য রূপান্তরগুলির কারণে (এবং তাই বলা হয়েছে) 2 ** states _ রাষ্ট্রেরও কম থাকবে ... আমি মনে করি

ব্যাখ্যা

{                                  }  # Anonymous codeblock
                     xx 2**$_         # Repeat 2**len(n) times
            .[0]*=-1                  # Negate the first element
 $_.=rotate(        )                 # Rotate the list by that value
                             ;!.[0]   # Return if the first element is 0

2
ফু মেশিনের স্থিতিতে পয়েন্টারের অবস্থানও অন্তর্ভুক্ত থাকে, কেবলমাত্র প্রতিটি ঘরের লক্ষণ নয়।
ম্যাগমা

1
টে_এফ দিয়ে একটি ফু মেশিনের জন্য প্রমাণের স্কেচ ... a_n 0। শীর্ষ কোণ (= স্টেটস) এর মধ্যে নির্দেশিত প্রান্তগুলি (= ফুটের একটি পুনরাবৃত্তি) সহ প্রতিটি ঘরের লক্ষণগুলির একটি এন-কিউব বিবেচনা করুন, কোনও প্রান্তের কোনও লুপের মাধ্যমে একই ভার্টেক্সটি পরিদর্শন করার ফলে আইপি একই অবস্থানে থাকবে যা এটি শুরু হয়েছিল । প্রুফ: একটি লুপে, আইপি প্রতিটি মাত্রায় একাধিকবার ভ্রমণ করে, অর্থাৎ আইপি প্রতিটি মাত্রার জন্য কে a (a_j + (-a_j))% n ≡ 0 দ্বারা পরিবর্তন করে, তাই এটি সর্বদা একই অবস্থানে ফিরে আসে, কেবলমাত্র প্রতিটি প্রান্তিকের জন্য n রাজ্যের বাইরে 1 টি রাজ্য দেখতে পাওয়া যায়, অর্থাত্ মোট 2 (n রাজ্যের (= কিউবের উল্লম্বের সংখ্যা)।
ক্রিটসি লিথোস

n2n.log(n)/n

3

05 এ বি 1 ই , 14 13 বাইট

goFć©(š®._}®_

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

থামানোর নির্দেশ হিসাবে 0 দিয়ে পূর্ণসংখ্যার তালিকা হিসাবে ইনপুট নেয়। থামার জন্য 1 এবং থামতে না দেওয়ার জন্য 0 প্রদান করে।

2 কে বাট বাঁচানোর জন্য কেভিন ক্রুইজসেনকে ধন্যবাদ!


ওহ দুর্দান্ত, তাই আপনার জেলি উত্তর কি তাই! ঘোরানো এবং দুর্দান্ত ব্যবহার ć! আমার উত্তরটি গল্ফ করার আশায় আমি একটি ব্যাখ্যার অপেক্ষায় ছিলাম, তবে আপনি আমাকে এতে মারধর করেছেন, হাহা। ; p & -1 আমার উত্তর হিসাবে একই গলফ করছেন যদিও দ্বারা বাইট: g·Fথেকে «v( এটি অনলাইন ব্যবহার করে দেখুন। )
কেভিন Cruijssen

এবং এর ©®পরিবর্তে একটি অতিরিক্ত -1 করুন DŠs: «vć©(š®._}®_( এটি অনলাইনে চেষ্টা করুন ))
কেভিন ক্রুইজসেন

আপনার পাইথনের উত্তরে যেমন আর্নল্ড উল্লেখ করেছেন, দৈর্ঘ্যের দ্বিগুণ লুপিং যথেষ্ট নয়। সুতরাং আপনি এই পরিবর্তন করতে «vপারেন goF
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন ধন্যবাদ
নিক কেনেডি

3

জাভা 8, 78 79 73 বাইট

a->{int k=0,l=a.length,i=0;for(;i++<1<<l;k%=l)k-=(a[k]*=-1)%l-l;k/=a[k];}

সরল-এগিয়ে বন্দর @EmbodimentOfIgnorance এর সি # .NET উত্তর , তাই তাকে ভোট দিন ভুলবেন না! দুটি বাগ (যা কিছু অন্যান্য উত্তরের ক্ষেত্রেও প্রযোজ্য) সন্ধানের জন্য @ আরনল্ডকে
ধন্যবাদ জানাই

একটি ইন ফলাফল java.lang.ArithmeticException: / by zeroত্রুটি এটা কোন ত্রুটি যদি না স্থগিত করতে সক্ষম, অথবা।

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

ব্যাখ্যা:

a->{                   // Method with integer-array as parameter and no return-type
  int k=0,             //  Index integer, starting at 0
      l=a.length,      //  The length `l` of the input-array
  i=0;for(;i++<1<<l;   //  Loop 2^length amount of times:
          k%=l)        //    After every iteration: take mod `l` of `k`
    k-=                //   Decrease `k` by:
       (a[k]*=-1)      //    Negate the value at index `k` first
                 %l    //    Then take modulo `l` of this
                   -l; //    And then subtract `l` from it
                       //  (NOTE: the modulo `l` and minus `l` are used for wrapping
                       //  and/or converting negative indices to positive ones
  k/=a[k];}            //  After the loop: divide `k` by the `k`'th value,
                       //  which will result in an division by 0 error if are halting

2
শুধু ভাবছি, অতিরিক্ত যুক্তি হিসাবে আপনাকে দৈর্ঘ্য নিতে দেওয়া হচ্ছে? মেটাতে আইও পোস্টের ডিফল্টটি এটি বলে না, এবং আমার দ্বিতীয় উত্তরটির দৈর্ঘ্য হওয়ার একমাত্র কারণ হ'ল এটি একটি int*( কোডগলফ.মেটা.স্ট্যাকেক্সেঞ্জিং.com/ a / 13262/84206 থেকে ) গ্রহণ করে
অজ্ঞতার

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

3

হাস্কেল , 79 বাইট

s x|m<-length x,let g(n:p)=(drop<>take)(mod n m)(-n:p)=iterate g x!!(2^m)!!0==0

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

রিটার্নস Trueবিরাম মেশিন, এবং জন্য Falseঅন্যথায়। 0থামার অবস্থার প্রতিনিধিত্ব করে একটি তালিকা আকারে ইনপুট ।

8.4 (ফেব্রুয়ারী 2018 এ প্রকাশিত) এর চেয়ে বেশি জিএইচসি-র একটি সংস্করণ ধরে।


2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 71 67 বাইট

x=>{for(p=l=x.length,i=2**l;i--;)p+=l-(x[p%l]*=-1)%l;return!x[p%l]}

মূলত @ এম্বোডিমেন্টঅফজিনিয়ার সি #। নেট উত্তর same

4 বাইট সংরক্ষণ করুন @ আরনাডকে ধন্যবাদ

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

জাভাস্ক্রিপ্ট (নোড.জেএস) , 61 বাইট

x=>{for(p=l=x.length,i=2**l;i--;p+=l-(x[p%l]*=-1)%l)x[p%l].f}

এই সংস্করণটি undefinedএকটি থামার প্রতীক হিসাবে ব্যবহার করে এবং TypeError: Cannot read property 'f' of undefinedযখন মেশিনটি থামে না এবং যখন মেশিনটি থামে না তখন চুপচাপ বন্ধ হয়ে যায়।

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


1

স্কালা , 156 বাইট

এখনও গল্ফযোগ্য আইএমও, তবে আপাতত আমি ঠিক আছি। 0নন-হোলটিং- Fooএর 1জন্য এবং থামানোর জন্য ফেরত দেয় Foos aএকটি হিসাবে ইনপুট লাগে Array[Int], তাই hহিসাবে নেওয়া হয় 0

var u=Seq[Array[Int]]()//Keep track of all states
var i=0//Index
while(u.forall(_.deep!=a.deep)){if(a(i)==0)return 1//Check if we are in a previously encountered step ; Halt
u:+=a.clone//Add current state in the tracker
var k=i//Stock temp index
i=(a(i)+i)%a.length//Move index to next step
if(i<0)i+=a.length//Modulus operator in Scala can return a negative value...
a(k)*=(-1)}//Change sign of last seen index
0//Returns 0 if we met a previous step

এটি চালানো বেশ দীর্ঘ (সমস্ত পরীক্ষার ক্ষেত্রে প্রায় 4 সেকেন্ড) কারণ আমি একাধিক পূর্ণ-অ্যারে লুক্কুয়াল করেছি, এবং এটি .deepঅনুলিপি তৈরি করে ... তবে আপনি এখনও অনলাইনে চেষ্টা করতে পারেন



1

সংযুক্তি , 40 বাইট

Not@&N@Periodic[{On[0,`-,_]&Rotate!_@0}]

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

ব্যাখ্যা

{On[0,`-,_]&Rotate!_@0}

এটি ফু মেশিনের একক পুনরাবৃত্তি সম্পাদন করে; এটি প্রথম সদস্যকে অবহেলা করে এবং তারপরে অ্যারের (মূল, অ-অবহেলিত) প্রথম উপাদান দ্বারা অ্যারেটি ঘোরায়।

Periodicসদৃশ ফলাফল জমা না হওয়া পর্যন্ত এই ফাংশনটি প্রয়োগ করবে। একটি মেশিন হয় থামে বা তুচ্ছ অসীম লুপে যায়। যদি এটি বন্ধ হয়ে যায় তবে প্রথম উপাদানটি 0 হবে Otherwise অন্যথায় এটি শূন্য নয়।

&Nএকটি সংখ্যাসূচক অ্যারের প্রথম উপাদান প্রাপ্ত করার একটি গোলাপী উপায়। এর পরে, Notআয় true0 (বিরাম মেশিন) এর জন্য এবং falseঅন্য কিছু (অ বিরাম মেশিন) জন্য।


1

কাঠকয়লা , 28 বাইট

≔⁰ηFX²L諧≔θ籧θη≧⁻§θη绬§θη

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। চারকোলের ডিফল্ট বুলিয়ান আউটপুট ব্যবহার করে আউটপুট, যা -সত্য এবং মিথ্যা জন্য কিছুই নয়। ব্যাখ্যা:

≔⁰η

নির্দেশ নির্দেশকের সূচনা করুন।

FX²Lθ«

তাত্ত্বিকভাবে যতটা সম্ভব রাষ্ট্র রয়েছে ততবার লুপ করুন।

§≔θ籧θη

নির্দেশ নির্দেশকের মানটি নেগেট করুন।

≧⁻§θηη

নির্দেশ পয়েন্টার থেকে নতুন মানটি বিয়োগ করুন। কাঠকয়ালের অ্যারে অ্যাক্সেসগুলি চক্রযুক্ত তাই এটি স্বয়ংক্রিয়ভাবে ফু এর বৃত্তাকার টেপকে অনুকরণ করে।

»¬§θη

লুপের শেষে, প্রোগ্রামটি থামেছে কিনা আউটপুট।


0

স্ট্যাক্স , 11 বাইট

Ç₧┬òE▐tµ|⌡1

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

এটি একটি পূর্ণসংখ্যার অ্যারের আকারে ইনপুট নেয়, যা 0থামার প্রতিনিধিত্ব করে।

এটি 1একটি থামার 0জন্য এবং একটি বিরামহীন মেশিনের আউটপুট দেয়।


0

পাইথ , 12 বাইট

!hu.<+_hGtGh

পরীক্ষা স্যুট!

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

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