एक ब्रेनफॉक व्युत्पन्न
आइए एक सरल ब्रेनफैक जैसी प्रोग्रामिंग भाषा को परिभाषित करें । इसमें कोशिकाओं का दो-दिशात्मक टेप होता है, और प्रत्येक कोशिका में एक बिट होता है। सभी बिट्स शुरू में 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!
?