Starry एक मज़ेदार गूढ़ प्रोग्रामिंग भाषा है जिसमें कोड केवल उसी जगह होता है +*.,`'
जहाँ उन वर्णों में से प्रत्येक के द्वारा दर्शाया गया वास्तविक कमांड उसके सामने रिक्त स्थान की संख्या से निर्धारित होता है। यह गोल्फ-आउटपुट चुनौतियों को भी मुश्किल बना देता है, क्योंकि विभिन्न कमांड बाइट्स की अलग-अलग संख्याओं के लिए जिम्मेदार हो सकते हैं। विशेष रूप से, संख्या शाब्दिक में एक अभिन्न प्रतिनिधित्व होता है जो छोटे लोगों पर काम करके बड़ी संख्या का निर्माण करना आवश्यक बनाता है।
इसलिए, यह चुनौती एक कार्यक्रम लिखने के बारे में है जो इस तरह के स्टाररी कार्यक्रमों को गोल्फ कर सकती है।
तारों से काम कैसे चलता है?
(कुछ विवरणों को एसोलैंग्स पर अनिर्दिष्ट छोड़ दिया गया है, इसलिए मैं रूबी दुभाषिया के व्यवहार के साथ जा रहा हूं ।)
Starry एक स्टैक-बेस्ड लैंग्वेज है, जिसमें सिंगल स्टैक ऑफ़ आर्बिटिस-प्रिसिजन इंटीजर वैल्यूज़ (जो शुरू में खाली है) है।
केवल सार्थक वर्ण हैं:
+*.,`'
और रिक्त स्थान। अन्य सभी पात्रों को अनदेखा किया जाता है। उन गैर-अंतरिक्ष वर्णों में से एक के बाद रिक्त स्थान का प्रत्येक क्रम एक एकल निर्देश का प्रतिनिधित्व करता है। निर्देश का प्रकार गैर-अंतरिक्ष वर्ण और रिक्त स्थान की संख्या पर निर्भर करता है ।
निर्देश हैं:
Spaces Symbol Meaning
0 + Invalid opcode.
1 + Duplicate top of stack.
2 + Swap top 2 stack elements.
3 + Rotate top 3 stack elements. That is, send the top stack element
two positions down. [... 1 2 3] becomes [... 3 1 2].
4 + Pop and discard top of stack.
n ≥ 5 + Push n − 5 to stack.
0 mod 5 * Pop y, pop x, push x + y.
1 mod 5 * Pop y, pop x, push x − y.
2 mod 5 * Pop y, pop x, push x * y.
3 mod 5 * Pop y, pop x, push x / y, rounded towards -∞.
4 mod 5 * Pop y, pop x, push x % y. The sign of the result matches the sign of y.
0 mod 2 . Pop a value and print it as a decimal number.
1 mod 2 . Pop a value and print it as an ASCII character. This throws an error
if the value is not in the range [0, 255].
n ` Mark label n.
n ' Pop a value; if non-zero, jump to label n.
ध्यान दें कि निष्पादन शुरू होने से पहले दुभाषिया लेबल के लिए स्रोत कोड को स्कैन करता है, इसलिए आगे और पीछे कूदना संभव है।
बेशक, Starry में भी इनपुट कमांड्स ( ,
अनुरूप रूप से .
) का उपयोग किया गया है , लेकिन वे इस चुनौती के लिए अप्रासंगिक हैं।
चुनौती
एक स्ट्रिंग को देखते हुए, एक तारों वाला प्रोग्राम उत्पन्न करें जो कोई इनपुट नहीं लेता है और उस स्ट्रिंग को बिल्कुल STDOUT में प्रिंट करता है।
आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं।
आप मान सकते हैं कि स्ट्रिंग 128 वर्णों से अधिक लंबी नहीं है और इसमें केवल मुद्रण योग्य ASCII वर्ण (कोड अंक 0x20 से 0x7E) शामिल होंगे।
आपके समाधान को किसी उचित डेस्कटॉप मशीन पर 5 मिनट से कम समय में किसी भी ऐसे इनपुट को संसाधित करना चाहिए (इसमें कुछ लेवे है; यदि यह मेरे लैपटॉप पर कुछ मिनट अधिक लेता है तो मुझे कोई आपत्ति नहीं है, लेकिन अगर यह 15 साल का है, तो मैं इसे अयोग्य घोषित कर दूंगा। यह)।
आपके समाधान को नीचे सूचीबद्ध कई अलग-अलग तारों पर परीक्षण किया जाएगा। आपका स्कोर संबंधित तारों के कार्यक्रमों की कुल बाइट गिनती है। एक टाई के मामले में, सबसे छोटा metagolfer जीतता है। यही है, जब तक कि कोई टाई नहीं है, तब तक अपने स्वयं के कोड को परेशान न करें (जो मुझे लगता है कि केवल इस मामले में होगा कि एक इष्टतम समाधान संभव है)।
आपको नीचे सूचीबद्ध विशिष्ट परीक्षण मामलों के लिए अपने कोड का अनुकूलन नहीं करना चाहिए। विशेष रूप से, आपको उनके लिए हाथ से तैयार किए गए समाधानों को हार्डकोड नहीं करना चाहिए। स्ट्रिंग्स के वर्गों के प्रति अनुकूलन जिनकी संरचना दिए गए स्ट्रिंग्स के समान है, ठीक है। अगर मुझे किसी हार्डकॉडिंग समाधान पर संदेह है, तो मैं कुछ या सभी परीक्षण मामलों (तुलनीय संरचनाओं के तार के साथ) को बदलने का अधिकार सुरक्षित रखता हूं।
परीक्षण के मामलों
प्रत्येक पंक्ति एक अलग परीक्षण मामला है:
Hello, World!
pneumonoultramicroscopicsilicovolcanoconiosis
.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
Hickory, dickory, dock. The mouse ran up the clock. The clock struck 1. The mouse ran down. Hickory, dickory, dock.
36912059868043514648560046917066768694455682545071266675083273015450033938555319356951628735735013250100789433961153496780296165
bVZ48121347GLtpYnt76CZSxTpMDs6791EJE808077eySXldY162424ddTB90707UupwlWGb63618542VhA252989453TXrWgqGm85899uHOAY2oAKE198GOVUttvW63
7MYxoWBNt180CDHS5xBGvU70HHVB17bh8jYzIIiU6n6g98Rose1nOe8Svcg56nax20q30kT3Ttb2jHl5q2Iuf1vPbjPxm9cyKXwxc0OUK8pr13b2n7U9Y7RwQTc26A1I
n9}unwxVa}[rj+5em6K#-H@= p^X/:DS]b*Jv/_x4.a5vT/So2R`yKy=in7-15B=g _BD`Bw=Z`Br;UwwF[{q]cS|&i;Gn4)q=`!G]8"eFP`Mn:zt-#mfCV2AL2^fL"A
दूसरे टेस्ट केस का श्रेय डेनिस को जाता है । चौथे टेस्ट केस का श्रेय Sp3000 को जाता है।
संदर्भ समाधान
यहाँ CJam में वास्तव में बुनियादी संदर्भ समाधान है:
q{S5*\iS*'+S'.}%
आप इसे पूरे टेस्ट सूट के खिलाफ यहां चला सकते हैं। स्कोर हैं:
1233
5240
4223
11110
7735
10497
11524
11392
Total: 62954
यह सबसे सरल संभव तरीका है: प्रत्येक चरित्र के कोड बिंदु को शाब्दिक के रूप में धक्का दें, और फिर इसे प्रिंट करें। यह लगातार पात्रों, पूर्णांक मुद्रण, स्ट्रिंग के दोहराव वाले भागों आदि के बीच छोटे अंतर का उपयोग नहीं करता है। मैं उन चीजों को आपके पास छोड़ दूँगा।
मेरा मानना है कि सुधार की बहुत गुंजाइश है। संदर्भ के लिए, सबसे छोटा दस्तकारी "हैलो, वर्ल्ड!" केवल 169 बाइट्स लंबी है।