सिद्ध इष्टतम!
((([()][()][()])))
इसे ऑनलाइन आज़माएं!
व्याख्या
ब्रेन-फ्लैक, ब्रेन-फ्ल्यू, मिनिफ्लक और फेनकैक
([()][()][()]) Push -3
( ) Copy
( ) Copy
यह प्रिंट:
-3
-3
-3
(एक अनुगामी न्यूलाइन है)
ब्रेन-फ्लैक क्लासिक
ब्रेन-फ्लैक क्लासिक ब्रेन-फ्लैक का मूल संस्करण है और आधुनिक ब्रेन-फ्लैक से कुछ महत्वपूर्ण अंतर हैं। BFC [...]
इसकी सामग्री को नकारने के बजाय प्रिंट करता है।
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
स्टैक की सामग्री को निष्पादित करने के अंत में ( 3 3 3
) मुद्रित किया जाता है।
यह प्रिंट:
1
1
1
3
3
3
(एक अनुगामी न्यूलाइन है)
Flakcats
फ्लैक्कट अन्य 4 फ्लैक्स से काफी अलग है और मुझे आश्चर्य है कि यह फ्लैकट्स में काम करता है। ब्रेन-फ्लैक का उपयोग करने वाले यहां के तीन ऑपरेटर लगभग समान हैं।
Flakcats के बीच इस विशेष कार्यक्रम में मुख्य अंतर (...)
ऑपरेटर है जो Flakcats ([{}]...)
में ब्रेन-फ्लैक के बराबर है । हालाँकि इससे हमें कोई फर्क नहीं पड़ता क्योंकि यह शून्य को चुनता है और इस तरह उसी तरह से संचालित होता है जैसा ब्रेन-फ्लैक करता है।
यहाँ वह कार्यक्रम ब्रायन-फ्लैक में संकलित है:
([{}]([{}]([{}][()][()][()])))
यह प्रिंट:
-3
-3
-3
(एक अनुगामी न्यूलाइन है)
में optimality का प्रमाण ब्रेन-आलोचना और Miniflak
यह एक औपचारिक प्रमाण नहीं है, बल्कि एक अनौपचारिक प्रमाण है जिसे और अधिक कठोर बनाने के लिए विस्तार करना होगा
प्रतिबंधों के कारण कि ब्रेन-फ्लैक प्रोग्राम एक संतुलित-स्ट्रिंग होना चाहिए और प्रोग्राम की लंबाई 3 से अधिक होनी चाहिए किसी भी मान्य सबमिशन की लंबाई 6 में से कई होनी चाहिए। इसका मतलब है कि 18 से छोटे किसी भी समाधान की लंबाई 12 होनी चाहिए।
न्यूलाइन को पीछे छोड़ते हुए आउटपुट की वजह से स्टैक की अंतिम ऊंचाई तीन से अधिक होनी चाहिए या हम आउटपुट पर प्रतिबंध तोड़ देंगे।
लंबाई 12 के किसी भी वैध जमाव में 2 प्रकार के ब्रेसिज़ होने चाहिए (कम होने से विभिन्न वर्णों की संख्या पर प्रतिबंध टूट जाएगा और 12 से अधिक वर्णों का मतलब होगा)। चूंकि कार्यक्रम आउटपुट का उत्पादन करता है इसलिए इसमें एक पुश होना चाहिए।
यह हमें हमारे ब्रेसिज़ के दूसरे सेट को चुनने के लिए छोड़ देता है। विकल्प हैं:
<...>/<>
यह विफल हो जाता है क्योंकि हमें शून्य के अलावा किसी भी संख्या को बनाने के लिए "मूल्य" उत्पन्न करने की आवश्यकता होती है हमें एक ()
बनाने के लिए एक छोड़ देना चाहिए जो दो बार से अधिक धक्का देना असंभव बनाता है।
[...]/[]
यह उसी कारण से विफल हो जाता है जब अंतिम विफल हो जाता है। वर्गाकार ब्रेसिज़ वास्तव में मूल्य बनाने में खराब हैं। []
इकाई कर सकते हैं मूल्य बनाने, लेकिन हम पहले नंबर पुश करने के लिए की जरूरत है और हम तो पर्याप्त कोष्ठक बचे तीन बार पुश करने के लिए नहीं है।
{...}/{}
यह एक आशाजनक है, हम एक लूप बना सकते हैं और एक ()
का उपयोग कई बार पुश करने के लिए कर सकते हैं, लेकिन अफसोस यह संभव नहीं है।
लूप को समाप्त करने के लिए कुछ बिंदु पर स्टैक पर एक शून्य होना चाहिए और सही आउटपुट के लिए हमारे पास कार्यक्रम के अंत में स्टैक पर शून्य के अलावा कुछ और होना चाहिए। चूँकि हमारे पास लूप के अंत में []
न <>
तो शून्य है और न ही स्टैक के नीचे से एक निहित शून्य होना चाहिए। इसका मतलब यह है कि लूप किसी भी नए नंबर को जोड़ नहीं सकता है ताकि यह बेकार हो जाए।
चूंकि ब्रेस विकल्पों में से कोई भी लंबाई 12 का कार्यक्रम नहीं बना सकता है, इसलिए कोई भी मौजूद नहीं हो सकता है।
चूंकि मिनिफ्लक ब्रेन-फ्लैक का सबसेट है, इसलिए कोई भी छोटा मिनिफलाक प्रोग्राम भी छोटा ब्रेन-फ्लैक प्रोग्राम होगा और इस प्रकार इसका अस्तित्व नहीं है।
ब्रेन-फ्ल्यू ब्रेन-फ्लाक से हटकर एक मजाक भाषा है। दोनों समान हैं, उनके व्याख्याकार हर जगह समान हैं लेकिन दो लाइनें हैं। दोनों के बीच का अंतर है, जैसा कि उनके नाम से पता चलता है, ब्रेन-फ्ल्यू अपने डेटा को कतारों में संग्रहीत करता है जबकि ब्रेन-फ्लैक अपने डेटा को ढेर में संग्रहीत करता है।
शुरू करने के लिए हमारे पास ब्रेन-फ्लैक द्वारा बनाए गए कार्यक्रम के आकार पर समान प्रतिबंध हैं, इस प्रकार हम आकार 12 के एक कार्यक्रम की तलाश कर रहे हैं। इसके अलावा हमें (...)
किसी भी आउटपुट और एक अन्य जोड़ी बनाने के लिए आवश्यकता है । <>
और []
जोड़े में ठीक उसी कारण वे ब्रेन-आलोचना में काम नहीं करते के लिए ब्रेन-Flueue में काम नहीं करते।
अब हम जानते हैं कि हमारे कार्यक्रम में पात्रों का समावेश होना चाहिए ((())){{{}}}
।
पिछले प्रमाण में उपयोग की गई समान विधियाँ हम प्रदर्शित कर सकते हैं कि अंतिम कार्यक्रम में एक लूप होना चाहिए।
अब यहां वह जगह है जहां साक्ष्यों में अंतर होता है, क्योंकि ब्रेन-फ्लेयू स्टैक के बजाय कतारों में संचालित होता है, प्रोग्राम कतार पर मानों के साथ एक लूप से बाहर निकल सकता है।
लूप से बाहर निकलने के लिए हमें कतार में एक शून्य की आवश्यकता होगी (या एक खाली कतार लेकिन अगर कतार खाली है तो हमें ब्रेन-फ्लैक जैसी ही समस्या आती है) इसका मतलब यह होगा कि हमें अपना प्रोग्राम खोलने के ({})
लिए इसे बनाना होगा शून्य। हमें आवश्यक संख्याओं को कतार में धकेलने के लिए लूप के अंदर एक पुश की आवश्यकता होगी। हमें लूप से पहले एक गैर शून्य संख्या को भी धक्का देना होगा ताकि हम लूप में प्रवेश कर सकें; यह हमें कम से कम पर खर्च करेगा (())
। हमारे पास अब हमारे मुकाबले अधिक पार्न्स का उपयोग किया गया है।
इस प्रकार 12 बाइट्स वाले कार्य को करने के लिए कोई ब्रेन-फ्ल्यू कार्यक्रम नहीं है, और इसके अलावा हमारा कार्यक्रम इष्टतम है।
निम्नलिखित समाधान फ्लैकाट्स और ब्रेन-फ्लैक क्लासिक में इष्टतम है।
((([][][])))
व्याख्या
[][][] -3
((( ))) push 3 times
वैकल्पिक 24 बाइट ब्रेन-फ्लैक समाधान
(<((<((<(())>)())>)())>)
इसे ऑनलाइन आज़माएं!
((<((<((<>)())>)())>)())
इसे ऑनलाइन आज़माएं!
((((((()()()){}){}){})))
इसे ऑनलाइन आज़माएं!