यह साप्ताहिक चुनौती # 2 है। थीम: अनुवाद
एक प्रोग्राम या समारोह है कि में एक कार्यक्रम के लिए स्रोत कोड में लेता लिखें प्रस्तावना में एक समान कार्यक्रम के लिए और आउटपुट कोड Befunge-93 । कार्यक्रम के समतुल्य होने के लिए, इसे किसी भी इनपुट के लिए, प्रोल्यूड प्रोग्राम के समान आउटपुट का उत्पादन करना चाहिए, और यदि केवल और केवल प्रील्यूड प्रोग्राम रुकता है तो रोकें।
इनपुट भाषा: प्रस्तावना
अजगर दुभाषिया:
एक प्रस्तावना कार्यक्रम में कई "आवाज़ें" होती हैं जो एक साथ निर्देशों को निष्पादित करती हैं। प्रत्येक आवाज के निर्देश एक अलग लाइन पर हैं। प्रत्येक आवाज में एक अलग स्टैक होता है, जिसे अनंत राशि के शून्य के साथ आरंभ किया जाता है। निष्पादन सबसे बाएं स्तंभ पर शुरू होता है, और एक कॉलम को दाईं ओर प्रत्येक टिक को आगे बढ़ाता है, सिवाय इसके जब )
या (
निर्देश प्रभावित होते हैं । अंतिम कॉलम पर पहुंचने पर प्रोग्राम समाप्त हो जाता है।
इस चुनौती के लिए कल्पना को छोड़ें:
Digits 0-9 Push onto the stack a number from 0 to 9. Only single-digit
numeric literals can be used.
^ Push onto the stack the top value of the stack of the above
voice.
v Push onto the stack the top value of the stack of the below
voice.
# Remove the top value from the stack.
+ Pop the top two integers from the stack and push their sum.
- Pop the top two integers from the stack, subtract the topmost
from the second, and push the result.
( If the top of the stack is 0, jump to the column after the
matching `)` after the current column executes.
) If the top of the stack is not 0, jump to the column after
the matching `(` after the current column executes.
? Read an integer from STDIN.
! Pop one value from the stack and print it to STDOUT as an
integer.
<space> No-op
टिप्पणियाँ
v
और^
चक्रीय रूप से कार्य करें, इसलिएv
नीचे की आवाज़ ऊपर की आवाज़ के स्टैक तत्व को कॉपी करेगी, और^
नीचे की आवाज़ को नीचे की आवाज़ से कॉपी करेगी। कोरोलरी: एकल-आवाज कार्यक्रम में दोनोंv
और^
स्टैक के शीर्ष को डुप्लिकेट करें।- A
(
और उसका मिलान)
विभिन्न रेखाओं पर स्थित हो सकता है। हालांकि ,)
वसीयत हमेशा उस आवाज के ढेर पर लगेगी, जहां संगत(
को रखा गया था, न कि उस स्टैक को जहां)
खुद को रखा गया था। - एक ही कॉलम में किसी भी अन्य संचालन के पूरा होने से पहले मौजूद मूल्यों
^
औरv
निर्देशों द्वारा उत्पादित मूल्य संचालित होते हैं। ?
और!
esolangs.org पर पाए गए विनिर्देश से अलग तरीके से काम करते हैं, इसलिए इस पोस्ट में प्रदान किए गए थोड़ा संशोधित दुभाषिया के साथ परीक्षण करना सुनिश्चित करें।
इनपुट की गारंटी है:
- कोष्ठक मिलान
- एक कॉलम में एक से अधिक कोष्ठक नहीं
- प्रत्येक पंक्ति पर समान वर्ण
- कम से कम एक लाइन
- एक से अधिक I / O (
!
या?
) निर्देश के साथ कोई कॉलम नहीं - प्रत्येक आवाज के निर्देशों के बाद एक लाइनफीड चरित्र
- ऊपर वर्णित लोगों के अलावा कोई वर्ण नहीं
आउटपुट भाषा: Befunge-93
Befunge एक स्टैक-आधारित भाषा है जिसका प्रोग्राम काउंटर (PC; वर्तमान निर्देश का सूचक) दो-आयामी ग्रिड पर स्वतंत्र रूप से चलता है। यह शीर्ष बाएं कोने में शुरू होता है, दाईं ओर बढ़ते हुए। प्लेफील्ड टॉरॉयडल है, यानी पीसी मूवमेंट दोनों किनारों पर घूमता है। Befunge में एक स्टैक भी होता है जिसे अनंत संख्या में शून्य से आरंभ किया जाता है। Befunge के निम्नलिखित कार्य हैं:
आप Befunge-93 संकलक / दुभाषिया की निम्नलिखित विशेषताओं को मान सकते हैं:
- पूर्णांक असीमित-सटीक हैं।
- यह किसी भी आकार के ग्रिड की अनुमति देता है।
- ग्रिड निर्देशांक (के लिए
g
औरp
) 0-आधारित हैं।
स्कोरिंग
सबमिशन को रोकने के लिए जो कि बस Befunge में एक Prelude दुभाषिया का उत्पादन करते हैं और इसमें Prelude स्रोत को हार्डकोड करते हैं, लक्ष्य परिणामस्वरूप Befunge स्रोत कोड के आकार को कम करना होगा।
नीचे कई प्रस्ताव कार्यक्रम प्रदान किए गए हैं। आपका अनुवादक इन सभी पर चलाया जाएगा। आपका स्कोर Befunge कार्यक्रमों के आकार का योग है, बशर्ते कि सभी वैध हों।
आपके अनुवादक को विशेष रूप से इन परीक्षण मामलों के लिए अनुकूलित नहीं किया जाना चाहिए (उदाहरण के लिए हार्डकोडिंग हस्तलिखित Befunge प्रोग्राम उनके लिए)। अगर मुझे ऐसा करने के किसी भी उत्तर पर संदेह है, तो मैं इनपुट बदलने या अतिरिक्त बनाने का अधिकार सुरक्षित रखता हूं।
नमूना इनपुट
n-1
नीचे प्रिंट करें 0
:
?(1-^!)
तार्किक और:
? (0)
?(0 )
1 !
तार्किक या:
? (0)
? (0)
1 1 !
नॉनगेटिव नंबर के इनपुट (यानी मोडुलो 2) की समता की जाँच करें:
?(1-)
^ v
v1-^^-!
इनपुट वर्ग:
^
^+ !
?(1-)
N वें फाइबोनैचि संख्या को प्रिंट करें , जहां n = 0
0 से n = 1
मेल खाती है और 1 से मेल खाती है:
0 v+v!
1 ^
?(1-)
पासवर्ड:
1) v # - !
vv (##^v^+)
?(# ^ ##
गैर-नकारात्मक इनपुट के लिए प्रभाग:
1 (# 1) v # - 1+)
vv (##^v^+)
? v-(0 # ^ #
?
1+ 1-!
बेशक, आपके कार्यक्रम को सभी मामलों के लिए समान व्यवहार प्रदर्शित करना चाहिए, भले ही नकारात्मक संख्याओं के लिए नमूना कार्यक्रम का व्यवहार निर्दिष्ट न हो।
अंत में, आपके अनुवादक को अनुचित रूप से लंबा नहीं होना चाहिए:
- यह एक स्टैक एक्सचेंज पोस्ट के अंदर होना चाहिए
- यह एक सामान्य डेस्कटॉप कंप्यूटर पर 10 मिनट के भीतर नमूना आदानों को संसाधित करना चाहिए।
ध्यान दें कि Prelude या Befunge के लिए एक संख्यात्मक इनपुट को एक वैकल्पिक ऋण चिह्न के रूप में दिया जाता है, जिसके बाद एक या एक से अधिक दशमलव अंक होते हैं, उसके बाद एक नई रेखा। अन्य इनपुट अपरिभाषित व्यवहार है।
आप अपने अनुवादक को किसी भी भाषा में लिख सकते हैं। सबसे कम अनुवाद किए गए Befunge कोड जीतता है।
लीडरबोर्ड
- Sp3000 : 16430 बाइट्स
1
एक लूप के अंदर है, इसलिए इसे धक्का नहीं दिया जा सकता है। 0 0 अनंत राशि से आ सकता है जो स्टैक पर शुरू होता है।