पिरामिड स्कीम @ ConorO'Brien द्वारा विकसित की जा रही भाषा है । पिरामिड योजना में, आपके द्वारा लिखा गया कोड इस तरह दिखता है:
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
अब, उस कोड के दो स्पष्ट गुण हैं: पार्स करना मुश्किल है, और लिखना मुश्किल है। कॉनर ने पहले वाले को हल कर लिया है, हालांकि उस दूसरे मुद्दे को हल करना आपका काम होगा।
उपरोक्त कोड इस तरह से एक नेस्टर्ड स्ट्रिंग सरणी में पिरामिडसिमेह दुभाषिया द्वारा संसाधित किया जाता है:
[["+", ["9123", "3"]], "3"]
आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है, जिसने स्ट्रिंग, आउटपुट या फिर से बनाए गए PyramidSchemes कोड का नेस्टेड सरणी दिया गया है। आप मान सकते हैं कि इनपुट सरणी हमेशा मान्य होगी।
एक पिरामिड एक समद्विबाहु त्रिभुज है। शीर्ष है ^
, पक्ष तिरछे ढलान के साथ दूर /
और \
, और नीचे है -
। दो निचले कोने या तो खाली हैं या उनमें अन्य पिरामिडों की शुरुआत है, जो तर्क हैं। लाइन के टूटने को अनदेखा करते हुए बीच को पिरामिड के नाम से भरा गया है।
यहां बताया गया है कि कैसे पार्सर कोड को एक प्रयोग करने योग्य प्रारूप में परिवर्तित करता है। सबसे पहले, यह एक शीर्ष-स्तरीय पिरामिड के लिए स्कैन करता है। यदि यह कोई तर्क नहीं लेता है, तो यह एक स्ट्रिंग के साथ इसका प्रतिनिधित्व करता है और आगे बढ़ता है। अन्यथा, यह एक सरणी के रूप में ["name",[arg1,arg2]]
या का प्रतिनिधित्व करता है ["name",[arg1]]
। तर्क पिरामिड के निचले बाएँ और नीचे दाईं ओर पिरामिड हैं, जो ऊपर वर्णित स्ट्रिंग या अधिक सरणियाँ हो सकते हैं। आप देख सकते हैं कि यह कुछ हद तक लिस्प से मिलता-जुलता है, जिस स्थिति में आपने भाषा के नाम का भयानक वाक्य भी देखा होगा। पिरामिड का पूरी तरह से प्रतिनिधित्व करने के बाद, पार्सर अगले एक पर चला जाता है।
यह कोड-गोल्फ है , सबसे छोटा कोड जीतता है!
परीक्षण मामले: ये केवल मान्य आउटपुट नहीं हैं, ये मान्य आउटपुट का उदाहरण हैं।
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
दूसरे परीक्षण मामले में सूचना, दूसरे और तीसरे out
पिरामिड में दोनों ["chr", ["108"]]
एक पैरामीटर के रूप में होते हैं, जो दो शीर्ष-स्तरीय लोगों द्वारा साझा किए गए एक पिरामिड स्टैक में ढह जाता है। यह एक वैध अनुकूलन है जो आपका कोड समर्थन कर सकता है, लेकिन यह पूरी तरह से वैकल्पिक है; स्कोरिंग आपके आउटपुट की लंबाई पर आधारित नहीं है।
जिज्ञासु के लिए, पहला मामला 9126 3
टॉपलैव पिरामिड, दूसरे एक प्रिंट की अंतर्निहित छपाई के कारण प्रदर्शित होता है Hello
, और अंतिम एक वाक्यविन्यास त्रुटि है, इसमें सिर्फ इसलिए शामिल है क्योंकि इसमें एक साफ संरचना है।
आप मान सकते हैं कि इनपुट केवल प्रिंट योग्य ASCII, को छोड़कर रिक्त स्थान, शामिल हैं ^
, /
, \
, और -
। इनपुट हमेशा मान्य होगा, और कम से कम एक पिरामिड शामिल होगा। सरणी या इनपुट स्ट्रिंग्स के आकार की कोई सीमा नहीं है, हालांकि आप अपना कोड लिख सकते हैं जैसे कि आपकी भाषा का डिफ़ॉल्ट पूर्णांक प्रकार अनंत सटीक था और आपके कंप्यूटर की मनमानी स्मृति है। यदि एकल स्ट्रिंग के रूप में इनपुट लेते हैं, तो आप कुछ भी उचित (अल्पविराम, स्थान इत्यादि) का उपयोग कर सकते हैं, जब तक कि यह प्रिंट करने योग्य एएससीआई और नहीं "
या नहीं []
) को सीमांकित करने के लिए हो। आपको पूरी चीज़ के चारों ओर कोष्ठक शामिल करने की आवश्यकता नहीं है, और इसके बजाय अपने सीमांकक द्वारा अलग किए गए कई सरणियों को लें।
आपके आउटपुट को गोल्फ होने की ज़रूरत नहीं है, आप अतिरिक्त स्थान डाल सकते हैं या अपने पिरामिड को आवश्यकता से अधिक बड़ा बना सकते हैं। टॉपलेवल पिरामिड पहली पंक्ति में होना चाहिए । आउटपुट न्यूलाइन्स या स्ट्रिंग्स की सूची के साथ एक स्ट्रिंग होना चाहिए।
जो कोई भी अपने कोड के एक संस्करण को शामिल करता है जो कि पिरामिड को आसानी से गोल्फ देता है उसे अपवोट्स / बाउंटी (लेकिन शायद सिर्फ अपवोट्स) के रूप में कुछ प्रतिनिधि मिल सकता है।