Befunge एक 2-आयामी गूढ़ प्रोग्रामिंग भाषा है। मूल विचार यह है कि (एक-चरित्र) कमांड को 2-आयामी ग्रिड पर रखा गया है। नियंत्रण प्रवाह ग्रिड के पार चलता है, कमांड को निष्पादित करता है जो इसे पार करता है, और दिशा बदलता है जब यह एक तीर मारता है ( >^<v
)। कमांड स्टैक-आधारित हैं; इस सूची को देखें । Http://esolangs.org/wiki/Befunge भी देखें ।
Befunge-98 के लिए विनिर्देश उपलब्ध है।
मुसीबत
एक प्रोग्राम लिखें जो एक Befunge प्रोग्राम को अधिक कॉम्पैक्ट प्रतिनिधित्व में बदल देता है। उदाहरण के लिए, निम्नलिखित प्रोग्राम प्रिंट करता है 0
:
> 0 v
> @ .
^ <
इस मामले में, इसे देने के लिए रिक्त स्थान की पंक्तियों को हटाकर कार्यक्रम के व्यवहार को बदलने के बिना कॉम्पैक्ट किया जा सकता है
>0v
>@.
^ <
अधिक परिष्कृत रूपांतरों को कमांड के दर्पण अनुक्रमों को घुमा या मिरर कर सकते हैं और प्रोग्राम को कॉम्पैक्ट करने के लिए अनावश्यक नियंत्रण-प्रवाह आदेशों को समाप्त कर सकते हैं। उदाहरण के लिए, इस कार्यक्रम के साथ:
>12345v
6
v....7<
.
.
.
@
आप कार्यक्रम के अंत में छेद में टक सकते हैं:
>12345v
>...@ 6
^....7<
पहले उदाहरण के लिए, सबसे कॉम्पैक्ट कार्यक्रम संभव है
>0.@
आप किसी भी परिवर्तन का उपयोग तब तक कर सकते हैं जब तक आउटपुट प्रोग्राम समान परिणाम नहीं देता।
इनपुट प्रोग्राम
इनपुट प्रोग्राम वैध Befunge-98 प्रोग्राम हैं।
आप मान सकते हैं कि इनपुट प्रोग्राम निर्धारक है। यही है, यह बाहरी राज्य को पढ़ने वाले आदेशों का उपयोग नहीं करता है: उपयोगकर्ता इनपुट कमांड &
और ~
, रैंडमाइज़र ?
, और स्वयं-संशोधित कोड कमांड p
और g
।
आप मान सकते हैं कि इनपुट प्रोग्राम समाप्त हो गया है।
स्कोरिंग
यह एक कोड गोल्फ नहीं है, लेकिन एक प्रोग्राम लिखने के लिए एक समस्या है जो कोड गोल्फिंग करती है।
इनपुट परीक्षण मामलों का एक सेट है (Befunge प्रोग्राम जो ऊपर दिए गए इनपुट प्रतिबंधों को पूरा करते हैं)। कुल स्कोर परीक्षण मामलों के लिए अंकों का योग है।
प्रत्येक परीक्षण मामले के लिए स्कोर
स्कोर आउटपुट प्रोग्राम में गैर-रिक्त कोशिकाओं के उत्तल पतवार का क्षेत्र है, जहां प्रत्येक कोशिका को एक वर्ग के रूप में माना जाता है जिसके चार कोने कार्टेशियन विमान में जाली बिंदु हैं। उदाहरण के लिए, का एक कार्यक्रम
> v
@ <
9.5 का स्कोर मिलता है।
यदि आपका प्रोग्राम किसी विशेष इनपुट पर उचित समय और मेमोरी में समाप्त नहीं होता है, तो स्कोर इनपुट प्रोग्राम का है। (यह इसलिए है क्योंकि आप तुच्छ समय-सीमित आवरण जोड़ सकते हैं जो इनपुट प्रोग्राम को अपरिवर्तित करता है यदि आपका कार्यक्रम समय पर समाप्त नहीं होता है।)
यदि आपके प्रोग्राम के साथ प्रसंस्करण के बाद टेस्ट-केस प्रोग्राम का एक अलग परिणाम है (या समाप्त करने में विफल रहता है), स्कोर इनपुट प्रोग्राम का स्कोर है और साथ ही 100 अंकों का जुर्माना है।
.
आउटपुट पूर्णांक का अर्थ है, लेकिन यदि आप शीर्ष बाएं से शुरू करते हैं, तो स्टैक में आउटपुट में पूर्णांक नहीं है।
.
एक पूर्णांक आउटपुट करता है। लेकिन यह भी, जब स्टैक पर पर्याप्त पैरामीटर नहीं हैं, तो दिखावा करें कि वहां पर्याप्त मात्रा में शून्य है। तो दूसरा उदाहरण आउटपुट होगा 000
।
g
और p
अनुमति नहीं है (क्षमा करें, उन लोगों के बारे में भूल गए; संपादित)।