गोल्फ एक बैंगनी दुभाषिया
बैंगनी एक एसोलंग है जिसे दो मुख्य उद्देश्यों के साथ डिज़ाइन किया गया है:
- की एक न्यूनतम होना करने के लिए बैंगन , वहाँ के बाद से सिर्फ पर्याप्त स्वयं संशोधित एक अनुदेश भाषाओं के आसपास नहीं कर रहे हैं।
- भयानक रूप से छोटे गोल्फ व्याख्याकारों की संभावना को स्वीकार करने के लिए । मेरा पहला पास काफी हद तक पाइथन 2 इंटरप्रेटर है जिसमें केवल 702 बाइट्स हैं, और मुझे यकीन है कि एक अधिक अनुभवी गोल्फर इससे थोड़ा बहुत दाढ़ी बना सकता है।
आपका लक्ष्य इस भाषा के लिए दुभाषिया लिखना है।
बैंगनी पर जानकारी:
एक बैंगनी कार्यक्रम एक अनंत, पता योग्य स्मृति सरणी में रखे गए वर्णों का एक क्रम है जैसे कि कार्यक्रम का पहला चरित्र पता शून्य पर रखा गया है। बाकी सरणी (दोनों जहां पहले और बाद में बैंगनी कार्यक्रम संग्रहीत किया जाता है) को शून्य पर आरंभीकृत किया जाता है।
बैंगनी में तीन रजिस्टर होते हैं, जिन्हें ए और बी और आई कहा जाता है , जिनमें से प्रत्येक पर हस्ताक्षर किए गए पूर्णांक को पकड़ कर रखा जा सकता है और इसे शून्य से आरंभ किया जाता है। मैं भी निर्देश सूचक हूं , और हमेशा वर्तमान में निष्पादित बैंगनी निर्देश को इंगित करता हूं ।
प्रत्येक चक्र, दुभाषिया निर्देश सूचक द्वारा इंगित मेमोरी स्थान से शुरू होने वाले तीन सन्निहित वर्णों के अनुक्रम को पढ़ेगा और इस अनुक्रम को बैंगनी निर्देश के रूप में निष्पादित करने का प्रयास करेगा। बाद में, निर्देश सूचक हमेशा 3 से बढ़ जाता है।
सिंथेटिक रूप से, बैंगनी निर्देश में एक पंक्ति में तीन वर्ण (या उसके एनकोडिंग) होते हैं, जैसे " xyz "।
पहला वर्ण x निम्नलिखित में से कोई भी हो सकता है:
abABio
इन प्रतीकों के निम्नलिखित अर्थ हैं:
a - Place the result in register a.
b - Place the result in register b.
A - Place the result in the location in memory referred to by register a.
B - Place the result in the location in memory referred to by register b.
i - Set the instruction pointer to the result.
o - Output the result to stdout.
अन्य दो बाइट्स y और z निम्न में से कोई भी हो सकते हैं:
abABio1
इन प्रतीकों में से प्रत्येक का निम्नलिखित अर्थ है:
a - Return the contents of register a.
b - Return the contents of register b.
A - Return the contents of the memory array at the address stored in register a.
B - Return the contents of the memory array at the address stored in register b.
i - Return the contents of register i (the instruction pointer).
o - Return the value of a single character read from stdin.
1 - Return the literal numeric value 1.
निर्देश प्राप्त करने के बाद, बैंगनी दुभाषिया y का मूल्यांकन करेगा और फिर z , y के परिणाम से z के परिणाम को घटाएगा , और फिर अंतर पर x द्वारा बताई गई क्रिया को करेगा।
यदि तीन वर्णों का क्रम (या उसमें संलग्न) एक मान्य बैंगनी निर्देश नहीं है, तो दुभाषिया बिना कोई त्रुटि दिए तुरंत रुक जाता है।
आपका दुभाषिया होना चाहिए:
- एक पूर्ण कार्यक्रम हो, एक फ़ंक्शन नहीं।
- जब तक EOF को नहीं पढ़ा जाता है , तब तक stderr को आउटपुट नहीं दिया जाता ।
- नीचे दिए गए परीक्षण कार्यक्रमों सहित सभी अच्छी तरह से गठित इनपुट पर संदर्भ कार्यान्वयन के लिए व्यावहारिक रूप से व्यवहार करें, जिसमें बहुत बड़ी संख्या शामिल नहीं है। (खैर, पहचान समय तक - यह धीमी गति से चल सकता है, लेकिन बहुत अधिक नहीं!)
आप किसी भी रूप में आप दुभाषिया को कार्यक्रम प्रदान कर सकते हैं: इसे एक फ़ाइल से पढ़ें, इसे प्रोग्राम में एक स्ट्रिंग के रूप में एम्बेड करें, या इसे स्टड से पढ़ें।
परीक्षण के मामलों:
कार्यक्रम
ooo
जब इनपुट के साथ चलाया जाता है
z!
उपज चाहिए
Y
कार्यक्रम
bbboobiii
जब इनपुट के साथ चलाया जाता है
It's a cat program.
(या कोई अन्य इनपुट) उपज चाहिए
It's a cat program.
(या जो भी इनपुट प्राप्त हुआ है) और फिर शुरू करें और फिर से वही काम करें ।
कार्यक्रम
Aoab11bi1bABoAaiba
जब इनपुट के साथ चलाया जाता है
0
उपज चाहिए
0
और फिर रुका हुआ है, लेकिन जब इनपुट के साथ चलाया जाता है
1
आउटपुट जारी रखना चाहिए
1
सदैव।
कार्यक्रम
b1bbb1oAbabaa1ab1Ab1Bi1b
उपज चाहिए
b1bbb1oAbabaa1ab1Ab1Bi1b
कार्यक्रम
aA1aa1bb1oAbbi1bb1bbAb1Bi1b Purple is the awesomest! Why haven't you tried it yet?
!dlroW ,olleG
उपज चाहिए
Hello, World!
स्कोरिंग:
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे छोटा स्रोत, जैसा कि संभावित रूप से निम्न बोनस द्वारा संशोधित किया गया है, जीतता है।
बक्शीश:
- -10% अगर आपका दुभाषिया स्टाइन से या कमांड लाइन तर्क से फ़ाइल नाम पढ़ता है और फ़ाइल से प्रोग्राम लोड करता है।
uint32
ints के लिए पात्रों और MAXINT का उपयोग करने की आवश्यकता है