เครื่องฟูนี้หยุดหรือไม่?


43

การพิจารณาว่าเครื่องทัวริงหยุดการทำงานเป็นที่รู้จักกันดีว่าไม่สามารถตัดสินใจได้ แต่นั่นไม่จำเป็นต้องเป็นจริงสำหรับเครื่องที่เรียบง่าย

เครื่อง Fooเป็นเครื่องที่มีเทป จำกัด ที่ถือในเทปแต่ละคนมีจำนวนเต็มหรือสัญลักษณ์หยุด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
  ^

สิ่งหนึ่งที่น่าสนใจเกี่ยวกับเครื่อง Foo เหล่านี้คือบางเครื่องไม่หยุดเช่น:

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

โปรแกรมนี้จะวนลูปในสี่สถานะล่าสุดตลอดไป

ดังนั้นเขียนโปรแกรมที่กำหนดว่าเครื่อง Foo หยุดหรือไม่! คุณสามารถใช้รูปแบบอินพุต (สมเหตุสมผล) ใด ๆ ที่คุณต้องการสำหรับเครื่อง Foo และคุณสามารถเลือกใช้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
เกี่ยวกับอัลกอริทึมในการแก้ไขปัญหานี้ ฉันไม่ใช่ผู้เชี่ยวชาญอัลกอริธึมดังนั้นฉันชอบถามก่อนที่จะไปผิดทาง เครื่องที่ไม่หยุดนิ่งของ Foo จะกลับไปสู่สถานะดั้งเดิมเสมอหรือไม่? หรือมีเครื่องที่ไม่หยุดนิ่ง "วุ่นวาย"
V. Courtois

5
@ V.Courtois เครื่อง Foo ที่ไม่หยุดทำงานทั้งหมดจะจบลงด้วยการวนรอบของสถานะเนื่องจากมีเพียงสถานะที่เป็นไปได้หลายอย่างเท่านั้นที่เครื่อง Foo สามารถอยู่ได้ (มีสถานที่ที่เป็นไปได้ที่ตัวชี้คำสั่งสามารถเป็นได้และเป็นไปได้ 2 ^ n การกำหนดค่าเทป) แต่ละรัฐมีเพียงหนึ่งเดียว "รัฐถัดไป" ดังนั้นหากเครื่อง Foo กลับมาอยู่ในสภาพที่มันเคยมีอยู่มันจะทำการวนซ้ำไปเรื่อย ๆ เนื่องจากมีเพียงรัฐจำนวนมากเท่านั้นจึงไม่สามารถกระโดดข้ามระหว่างรัฐได้อย่างวุ่นวายเพราะในที่สุดมันก็จะกลายเป็นรัฐที่เข้ามาแล้ว
Leo Tenenbaum

3
กรณีทดสอบที่แนะนำ: 1 2 h 42(ไม่หยุด)
Arnauld

6
3 2 1 1 4 hกรณีทดสอบที่แนะนำ: อันนี้หยุดทำงาน แต่ต้องการการวนซ้ำมากกว่าสองเท่าของจำนวนองค์ประกอบ
Arnauld

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ซึ่งหยุดหลังจาก 786430 ขั้นตอน
แมกมา

คำตอบ:


11

C # (Visual C # Interactive คอมไพเลอร์) , 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บล็อกที่จะใช้ แต่นี่คือสิ่งต่อไป:

C # (. NET Core) 64 ไบต์

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

ลองออนไลน์!

ฟังก์ชั่นนี้ใช้เวลาใน int * และส่งคืนการกระทำ มันเป็นฟังก์ชั่น curried เหตุผลเดียวที่ฉันใช้พอยน์เตอร์เป็นเพราะ codegolf.meta.stackexchange.com/a/13262/84206 ซึ่งช่วยให้ฉันบันทึกไบต์ด้วยการมีตัวแปรที่กำหนดไว้แล้วตามความยาวของอาร์เรย์

บันทึกแล้ว 9 ไบต์ขอบคุณ @someone


นำโค้ดของคุณไปใช้ 2 ไบต์: tio.run/…
IQuick 143

@ IQuick143 จับได้ดีขอบคุณ
ศูนย์รวมแห่งความไม่รู้

ฉันไม่แน่ใจว่ามีกรณีขอบที่มันจะไม่ทำงาน แต่โดยไม่ทำลายกรณีทดสอบปัจจุบันคุณสามารถแทนที่1<<fด้วย2*fเพื่อบันทึก byte
Kevin Cruijssen

1
77 ไบต์ด้วยเวทมนตร์ LINQ น่ากลัวและแก้ไข ฉันไม่รู้ว่าวิธีนี้ใช้งานได้อย่างไรฉันอาจหักได้
บางคน

1
63 ไบต์ผ่านสนามกอล์ฟขนาด 1 ไบต์ปกติและเปลี่ยน IO เป็นข้อผิดพลาด / ไม่มีข้อผิดพลาด ลิงก์ไปยังลิงก์
บางคน

7

Python 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

ลองออนไลน์!

ใช้ได้กับ Python 2 ด้วยเช่นกัน ไบต์สามารถบันทึกใน Python 2 ได้โดยแทนที่ return ด้วย print และให้ function print เป็น stdout แทนที่จะกลับมา R เปลี่ยนTrueเพื่อหยุดและFalseไม่หยุดพัก

ขอบคุณ @Neil และ @Arnauld สำหรับการสังเกตว่าฉันต้องตรวจสอบอีกต่อไปเพื่อหยุดพัก ขอขอบคุณที่ @Jitse [2,0]สำหรับการชี้ให้เห็นปัญหากับ ขอบคุณ @mypetlion สำหรับการสังเกตว่าค่าสัมบูรณ์ของเทปอาจเกินความยาวเทป


5
ตกลงฉันจะกัด: คุณรู้ได้อย่างไรว่าx+xเพียงพอ
Neil

4
@ Neil มันไม่เพียงพอจริง ๆ ตัวอย่างเคาน์เตอร์คือ[ 3, 2, 1, 1, 4, 0 ]ซึ่งจะหยุดในการทำซ้ำมากกว่า 12
Arnauld

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)
OOBalance

1
@OOBalance ฉันเห็นสิ่งที่คุณหมายถึงเนื่องจากแต่ละรัฐสามารถมีตัวชี้ในแต่ละเซลล์ ... แต่ฉันรู้สึกเหมือนมีข้อ จำกัด อื่น ๆ ที่ใช้โดยความจริงที่ว่าแต่ละเซลล์สามารถเปลี่ยนเป็นเซลล์อื่นได้สองเซลล์เท่านั้น ขณะที่ทราบด้าน: อะไรในความท้าทายบอกว่ามีมีจะเป็นรัฐลังเลในการป้อนข้อมูล
โจกษัตริย์

6

เยลลี่ , 15 11 ไบต์

N1¦ṙ⁸ḢƊÐLḢẸ

ลองออนไลน์!

ลิงก์ monadic ที่รับอินพุตเป็นรายการจำนวนเต็มโดยใช้ 0 เพื่อหมายถึงหยุดการทำงาน ส่งคืน 0 สำหรับการหยุดอินพุทและ 1 สำหรับอินเทอร์เฟซที่ไม่หยุด

หลีกเลี่ยงปัญหาที่ต้องใช้จำนวนการทำซ้ำเนื่องจากการใช้ÐLซึ่งจะวนซ้ำจนกว่าจะไม่เห็นผลลัพธ์ใหม่

ขอบคุณ @JonathanAllan สำหรับการบันทึกไบต์!

คำอธิบาย

      ƊÐ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

Python 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 ไบต์ขอบคุณ JoKing และ Jitse


@JoKing 109 ไบต์โดยทำการกำหนดตัวแปรในบรรทัดแรก
Jitse

92 ไบต์โดยการเปลี่ยนการแปลง tuple เป็นการขยายตัวที่ติดดาวไม่เริ่มต้นด้วยชุดที่ว่างเปล่าและปรับปรุงwhileเงื่อนไขใหม่
Jitse

@ โจกิ้งประณามฉันไม่เคยเรียนรู้: p 93 ไบต์แล้ว
Jitse


@ โจกิ้งขอบคุณ!
HyperNeutrino

5

Perl 6 , 46 43 36 ไบต์

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

ลองออนไลน์!

แสดงถึงการหยุด0และผลตอบแทนจริงหากเครื่องหยุด นี่เป็นการทำซ้ำตรรกะ2**(length n)ครั้งที่ถ้าตัวชี้จบลงที่เซลล์หยุดมันจะอยู่ที่นั่นมิฉะนั้นมันจะอยู่ในเซลล์ที่ไม่หยุด วิธีนี้ใช้งานได้เนื่องจากมีเพียง2**nสถานะที่เป็นไปได้เท่านั้น(ไม่สนใจเซลล์หยุดชะงัก) เพื่อให้เครื่อง Foo เข้าสู่เนื่องจากเซลล์ที่ไม่หยุดทำงานแต่ละเซลล์จะมีสถานะเพียงสองสถานะเท่านั้นโอเคใช่มีรัฐมากกว่านั้น แต่เนื่องจากการเปลี่ยนที่เป็นไปได้ที่ จำกัด ระหว่างพอยน์เตอร์ (และดังนั้นสหรัฐฯ) จะมีน้อยกว่า 2 ** $ _ ฯ ... ฉันคิดว่า

คำอธิบาย

{                                  }  # 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
สถานะของเครื่อง Foo นั้นยังรวมถึงตำแหน่งของตัวชี้ไม่ใช่เพียงแค่สัญญาณของแต่ละเซลล์
Magma

1
ภาพร่างหลักฐานสำหรับเครื่องจักรฟูด้วยเทป a_1 ... a_n 0 พิจารณา n-cube ของสัญญาณของแต่ละเซลล์ที่มีขอบกำกับ (= การวนซ้ำของ Foo) ระหว่างจุดยอด (= สถานะ) การเยี่ยมชมจุดสุดยอดเดียวกันผ่านทางวนของขอบใด ๆ จะทำให้ IP อยู่ในตำแหน่งเดียวกันกับที่เริ่มต้นด้วย . การพิสูจน์: ในลูป IP จะเดินทางในแต่ละมิติเป็นจำนวนเท่า ๆ กันนั่นคือ IP เปลี่ยนเป็น k × (a_j + (-a_j))% n ≡ 0 สำหรับแต่ละมิติดังนั้นจึงกลับไปที่ตำแหน่งเดิมเสมอ เพียง แต่เคยเห็นสถานะ 1 สถานะจาก n รัฐสำหรับแต่ละจุดยอดนั่นคือจำนวนรวมสูงสุดของ 2 ^ n รัฐ (= จำนวนจุดยอดของลูกบาศก์)
Kritixi Lithos

n2n.ล.โอก.(n)/n

3

05AB1E , 14 13 ไบต์

goFć©(š®._}®_

ลองออนไลน์!

รับอินพุตเป็นรายการของจำนวนเต็มที่มี 0 เป็นคำสั่งหยุดทำงาน ส่งคืน 1 สำหรับการหยุดและ 0 สำหรับการไม่หยุด

ขอบคุณ @KevinCruijssen สำหรับการบันทึก 2 ไบต์!


โอ้ดีนั่นคือสิ่งที่คำตอบของคุณเยลลี่ทำ! ใช้ประโยชน์ได้ดีจากการหมุนและć! ฉันรอคำอธิบายด้วยความหวังว่าจะได้คำตอบจากฉัน แต่คุณเอาชนะฉันได้ฮ่าฮ่า ; p -1 byte โดยทำกอล์ฟเดียวกับคำตอบของฉัน: g·Fถึง«v( ลองออนไลน์ )
Kevin Cruijssen

และอีกหนึ่ง -1 โดยใช้©®แทนDŠs: «vć©(š®._}®_( ลองออนไลน์ )
Kevin Cruijssen

ดังที่Arnauldบันทึกไว้ในคำตอบ Python ของคุณการวนซ้ำสองครั้งของความยาวนั้นไม่เพียงพอ เพื่อให้คุณสามารถเปลี่ยนไป«v goF
Kevin Cruijssen

@KevinCruijssen ขอบคุณ
Nick Kennedy

3

Java 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];}

พอร์ตต่อตรงของคำตอบ C # .NETของ@EmbodimentOfIgnorance ดังนั้นอย่าลืมโหวตให้เขา!
ขอบคุณ@Arnauldสำหรับการค้นหาข้อบกพร่องสองข้อ (ซึ่งใช้กับคำตอบอื่น ๆ ด้วย)

ส่งผลให้เกิด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
แค่สงสัยคุณได้รับอนุญาตให้ใช้ความยาวเป็นอาร์กิวเมนต์เพิ่มเติมหรือไม่ ค่าเริ่มต้นสำหรับการโพสต์ IO บน meta ไม่ได้บอกอย่างนั้นและเหตุผลเดียวที่คำตอบที่สองของฉันใช้เวลานานก็เพราะมันใช้เวลาในint*(จากcodegolf.meta.stackexchange.com/a/13262/84206 )
ศูนย์รวมแห่งความไม่รู้

@EmbodimentofIgnorance อ๊ะเมื่อฉันเห็นคำตอบของคุณฉันคิดว่ามีกฎเมตาบางชนิดที่อนุญาตให้ใช้ความยาวเป็นข้อมูลเพิ่มเติม แต่ใช้กับพอยน์เตอร์เท่านั้น ขอบคุณสำหรับการให้ฉันรู้ว่า. ฉันได้ลบพารามิเตอร์ความยาว (แต่ยังคงใช้ข้อผิดพลาด / ไม่มีข้อผิดพลาดเพื่อกำหนดผลลัพธ์)
Kevin Cruijssen

3

Haskell , 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แสดงสถานะการหยุดทำงาน

ถือว่า GHC รุ่นที่มากกว่า 8.4 (เปิดตัว ก.พ. 2018)


2

JavaScript (Node.js) , 71 67 ไบต์

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

โดยทั่วไปเหมือนกับคำตอบ C # .NET ของ@EmbodimentOfIgnorance

4 ไบต์บันทึกด้วย@Arnaud

ลองออนไลน์!

JavaScript (Node.js) , 61 ไบต์

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

รุ่นนี้ใช้undefinedเป็นสัญลักษณ์หยุดการทำงานและจะส่ง a TypeError: Cannot read property 'f' of undefinedเมื่อเครื่องหยุดและหยุดอย่างเงียบ ๆ เมื่อเครื่องไม่หยุด

ลองออนไลน์!


1

สกาลา , 156 ไบต์

ยังคงเล่นกอล์ฟได้ IMO แต่ตอนนี้ฉันโอเคแล้ว ส่งคืน0สำหรับ non-halting Foos และ1สำหรับ halting Foos รับอินพุตaเป็น an 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}

นี่เป็นการทำซ้ำของเครื่อง Foo เพียงครั้งเดียว มันจะลบล้างสมาชิกรายแรกจากนั้นหมุนอาร์เรย์ด้วยองค์ประกอบแรก (ต้นฉบับที่ไม่ได้ถูกปฏิเสธ) ของอาร์เรย์

Periodicจะใช้ฟังก์ชันนี้จนกว่าจะมีการสะสมผลลัพธ์ที่ซ้ำกัน เครื่องหยุดหรือเข้าสู่วงวนไม่สิ้นสุด ถ้าหยุดองค์ประกอบแรกจะเป็น 0 มิฉะนั้นจะไม่เป็นศูนย์

&Nเป็นวิธี golfy ของการได้รับองค์ประกอบแรกของอาร์เรย์ที่เป็นตัวเลข จากนั้นNotส่งคืนค่าtrueเป็น 0 (เครื่องหยุดทำงาน) และfalseสำหรับสิ่งอื่น (เครื่องหยุดทำงานชั่วคราว)


1

ถ่าน 28 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด เอาต์พุตที่ใช้เอาต์พุตบูลีนดีฟอลต์ของ Charcoal ซึ่งมี-ไว้สำหรับจริงและไม่มีอะไรเป็นเท็จ คำอธิบาย:

≔⁰η

เริ่มต้นตัวชี้คำสั่ง

FX²Lθ«

วนซ้ำหลาย ๆ ครั้งตามที่มีสถานะเป็นไปได้ในทางทฤษฎี

§≔θ籧θη

ลบล้างค่าที่ตัวชี้คำสั่ง

≧⁻§θηη

ลบค่าใหม่ออกจากตัวชี้คำสั่ง การเข้าถึงอาร์เรย์ของ Charcoal เป็นแบบวงกลมดังนั้นนี่จึงเลียนแบบเทปวงกลมของ Foo โดยอัตโนมัติ

»¬§θη

ที่ส่วนท้ายของลูปเอาต์พุตว่าโปรแกรมหยุดทำงานหรือไม่


0

Stax , 11 ไบต์

Ç₧┬òE▐tµ|⌡1

เรียกใช้และแก้ไขข้อบกพร่อง

มันจะใส่ในรูปแบบของอาร์เรย์จำนวนเต็มโดยมีการ0แสดงหยุด

มันจะออกผล1สำหรับการหยุดชะงักและ0สำหรับเครื่องที่ไม่หยุดนิ่ง


0

Pyth , 12 ไบต์

!hu.<+_hGtGh

ชุดทดสอบ!

ใช้วิธีการตรงไปข้างหน้า เรียกคืนจนกว่าเราจะเห็นรายการสองครั้งในสถานะที่เหมือนกัน สำหรับโปรแกรมที่หยุดรายการในที่สุดจะมีผู้นำ0เพราะนั่นคือที่หยุดการเรียกซ้ำ สำหรับโปรแกรมที่ไม่หยุดยั้งรายการจะไม่ขึ้นต้นด้วย0แต่จะอยู่ในสถานะที่กระบวนการนั้นจะเป็นระยะดังนั้นเครื่อง Foo จะไม่หยุดทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.