อนุพันธ์ Brainfuck
มานิยามภาษาโปรแกรมง่ายๆเหมือนBrainfuckกัน มันมีเทปสองทิศทางของเซลล์และแต่ละเซลล์เก็บหนึ่งบิต บิตทั้งหมดเป็น 0 เริ่มแรกมีหัวที่เคลื่อนที่อยู่บนเทปเริ่มต้นที่ตำแหน่ง 0 โปรแกรมคือสตริงที่อยู่เหนืออักขระ<>01!
เรียกใช้จากซ้ายไปขวาด้วยซีแมนทิกส์ต่อไปนี้:
<
ย้ายหัวหนึ่งก้าวไปทางซ้าย>
ย้ายหัวหนึ่งก้าวไปทางขวา0
ใส่ 0 ในเซลล์ปัจจุบัน1
ใส่ 1 ในเซลล์ปัจจุบัน!
พลิกเซลล์ปัจจุบัน
ไม่มีลูปดังนั้นโปรแกรมของอักขระnจะยุติหลังจากnขั้นตอนทั้งหมด โปรแกรมน่าเบื่อถ้าเซลล์ทั้งหมดมี 0 เมื่อสิ้นสุดการดำเนินการและน่าตื่นเต้นถ้ามีอย่างน้อยหนึ่ง 1 โปรดทราบว่าขนาดของเทปไม่ได้ระบุไว้ดังนั้นขึ้นอยู่กับการนำไปใช้อาจเป็นอนันต์แบบสองทางหรือ กลม
ตัวอย่างโปรแกรม
1>>>!<<<<0>!>>>!
พิจารณาโปรแกรม บนเทปที่ไม่มีที่สิ้นสุดการดำเนินการจะเป็นดังนี้:
v
00000000000000 Put 1
v
00000100000000 Move by >>>
v
00000100000000 Flip
v
00000100100000 Move by <<<<
v
00000100100000 Put 0
v
00000100100000 Move by >
v
00000100100000 Flip
v
00000000100000 Move by >>>
v
00000000100000 Flip
v
00000000000000
ในตอนท้ายเซลล์ทั้งหมดเป็น 0 ดังนั้นโปรแกรมนี้น่าเบื่อ ทีนี้มารันโปรแกรมเดียวกันบนเทปวงกลมความยาว 4
v
0000 Put 1
v
1000 Move by >>>
v
1000 Flip
v
1001 Move by <<<< (wrapping around at the edge)
v
1001 Put 0
v
1000 Move by > (wrapping back)
v
1000 Flip
v
0000 Move by >>>
v
0000 Flip
v
0001
ครั้งนี้มีเซลล์ที่มีค่า 1 ดังนั้นโปรแกรมจึงน่าตื่นเต้น! เราเห็นว่าโปรแกรมนั้นน่าเบื่อหรือน่าตื่นเต้นขึ้นอยู่กับขนาดของเทป
งาน
ข้อมูลที่คุณป้อนเป็นสตริงที่ไม่ว่างเปล่า<>01!
ซึ่งแสดงถึงโปรแกรมในภาษาโปรแกรมด้านบน อาร์เรย์ของอักขระยังเป็นรูปแบบอินพุตที่ยอมรับได้ โปรแกรมรับประกันว่าจะน่าเบื่อเมื่อทำงานบนเทปที่ไม่มีที่สิ้นสุด ผลลัพธ์ของคุณจะเป็นรายการความยาวของเทปที่โปรแกรมน่าตื่นเต้น โปรดทราบว่าคุณจะต้องทดสอบโปรแกรมบนเทปที่สั้นกว่าความยาวของโปรแกรม
การแก้ปัญหาด้วยจำนวนไบต์ต่ำสุดในแต่ละภาษาเป็นผู้ชนะ ใช้กฎมาตรฐานของกอล์ฟ
กรณีทดสอบ
> : []
110 : []
1>0<! : [1]
0>>1>0<<>! : [1]
1>>>!<<<<0>!>>>! : [2, 4]
!<!<><<0>!>!<><1!>>0 : [2]
>>!>><>001>0<1!<<!>< : [1, 2, 3]
1!><<!<<<!!100><>>>! : [1, 3]
!!1>!>11!1>>0<1!0<!<1><!0<!<0> : [3, 4]
<><<>>!<!!<<<!0!!!><<>0>>>>!>> : [1, 2, 4]
0>>><!<1><<<0>!>>!<<!!00>!<>!0 : [3]
0000!!!!><1<><>>0<1><<><<>>!<< : []
!>!>!>!>!>1>!>0<!<!<!<0<!<0<!<!<!<1>!>0<<! : [1, 2, 5, 7]
<!!>!!><<1<>>>!0>>>0!<!>1!<1!!><<>><0<<!>><<!<<!>< : [1, 2, 4, 5]
!>1<<11<1>!>!1!>>>0!!>!><!!00<><<<0<<>0<<!<<<>>!!> : [1, 2, 3, 5, 6]
<>01!
หรือไม่?