चारकोल में गोल्फ के लिए टिप्स


15

चारकोल ASCII-only और DLosc द्वारा बनाई गई भाषा है जो ASCII कला चुनौतियों में माहिर है।

चारकोल में गोल्फ के लिए आपके पास क्या सुझाव हैं? जाहिर है मैं विशेष रूप से चारकोल से संबंधित युक्तियों की तलाश कर रहा हूं, न कि उन पर जो सबसे अधिक लागू हो सकते हैं - यदि सभी भाषाओं में नहीं।


इसे पेंच, मैं कुछ पर एक लकड़ी का कोयला जवाब करने की कोशिश करूँगा, Brb। हो सकता है कि मैं इस सूत्र पर मामूली बात कर सकूं।
मैजिक ऑक्टोपस Urn

जवाबों:


5

डिवर्बोसिफायर का लाभ उठाएं

Deverbosifier का उपयोग करने का मतलब है कि आप ASCII में लिख सकते हैं ( --dvया फिर --deverbosifydeverbosify, -vया--verbose कोड के रूप में निष्पादित करने के लिए)। इसके अलावा, यह आपके लिए स्ट्रिंग्स को संपीड़ित करता है, जो कुछ ASCII- कला चुनौतियों में उपयोगी हो सकता है जब स्ट्रिंग को बहुत लंबा करना है।

@ नील उपयोग करने की सलाह देता है -vlया -v --sl। यह छोटा है --verbose --showlength, जिसका अर्थ है कि यह क्रिया चारकोल के रूप में व्याख्या की जाएगी, और सामान्य चारकोल कोड की लंबाई दिखाई जाएगी। इसके अलावा, जब deverbosifying, यह सुनिश्चित करने के लिए आउटपुट की जांच करता है कि इनपुट वास्तव में सही ढंग से पार्स किया गया है, क्योंकि चारकोल आमतौर पर पार्स त्रुटियों को अनदेखा करता है। अगर वहाँ है एक सिंटैक्स त्रुटि, उपयोग -a( --astify) या --oa( --onlyastify) समस्या को मदद आंकड़ा करने के लिए।


इसके आगे, मैं उपयोग करने की सलाह देता हूं -v -sl। इसके अलावा, जब deverbosifying, यह सुनिश्चित करने के लिए आउटपुट की जांच करें कि इनपुट वास्तव में सही ढंग से पार्स हो गया है, क्योंकि आपको हमेशा एक पार्स त्रुटि नहीं मिलती है।
नील

3

अधिभार का उपयोग करें

उदाहरण के लिए, कई कमांडों को केवल एक तर्क की आवश्यकता होती है:

  • Rectangle, Oblongऔर Boxएक वर्ग बनाइए यदि केवल एक तर्क दिया जाए
  • Reflect सही को प्रतिबिंबित करने के लिए डिफ़ॉल्ट आदेश
  • Rotate डिफ़ॉल्ट को 90 डिग्री वामावर्त में आदेश देता है
  • Polygonऔर PolygonHollowएक बहुआयामी और एक पक्ष लंबाई स्वीकार कर सकते हैं। इसका उपयोग तब किया जा सकता है जब सभी पक्ष समान लंबाई के हों।

मुझे उस तथ्य के बारे में पता चला PolygonHollow। आपके पास कई बहुआयामी भी हो सकते हैं, लेकिन उन्हें सामान्य तीरों से पहले आना होगा (मुझे नहीं पता कि यह सीमा जानबूझकर है)। मैंने अपने जवाब में "क्यूब खींचना" चुनौती का इस्तेमाल किया।
नील

हम्म मर्यादा थोड़े जानबूझकर है, लेकिन मुझे लगता है कि मुझे इसे बदलना चाहिए क्योंकि यह वैसे भी चोट नहीं पहुंचाएगा
ASCII-only

मैं आपको किसी भी क्रम में तीरों और बहुआयामी को स्वीकार करने के लिए बहुभुज तय करता हूं, धन्यवाद! जब मैं यहां हूं, मैं प्रत्येक दिशा के ReflectButterfly dlsलिए कॉल करने की उम्मीद कर रहा था ReflectButterfly, लेकिन (विकी सही रूप से दस्तावेजों के रूप में) यह वास्तव में कॉल करता है ReflectOverlap
नील

@ नील लोप, मैं उस ASAP को ठीक करने की कोशिश करूंगा (मुझे लगता है कि यह एक संयोग है)
केवल

3

एक ही प्रकार के लगातार स्थिरांक से बचें

उदाहरण के लिए, Plus(Times(i, 2), 1)के रूप में तब्दील हो ⁺×鲦¹, लेकिन आप पैरामीटर स्विचन द्वारा एक बाइट बचा सकते हैं: Plus(1, Times(i, 2))के रूप में तब्दील हो ⁺¹×ι²और Plus(Times(2, i), 1)के रूप में ⁺ײι¹जो दोनों के एक बाइट सहेजें। Plus(1, Times(2, i))(जो अनुवाद करता है ⁺¹×²ι) यदि इसके बाद एक और संख्यात्मक स्थिर होता तो और भी बेहतर होता।


3

पूर्वनिर्धारित चर का उपयोग करें

यहां उन सभी चरों की सूची दी गई है, जिनका उपयोग किया जा सकता है, जो सक्सिनेट ग्रीक अक्षर और वर्बोज़ लेटर देता है।

α/a: The uppercase alphabet
β/b: The lowercase alphabet
γ/g: A string of all the ASCII characters from space to ~
δ/d: The fifth input
ε/e: The fourth input
ζ/z: The third input
η/h: The second input
θ/q: The first input
υ/u: An empty array
φ/f: 1000
χ/c: 10
ψ/y: The null character
ω/w: The empty string

इनपुट्स का प्रतिनिधित्व करने वाले चर खाली होंगे यदि पर्याप्त इनपुट मौजूद नहीं है, लेकिन यहां दिखाए गए अन्य सभी चर उपयोग से पहले असाइन नहीं किए जाने चाहिए।


इन्हें अभी TIO पर तय किया जाना चाहिए, यह अच्छा होगा यदि आप यह सत्यापित कर सकें कि यह काम करता है
ASCII-only

@ ASCII-केवल आपको लगता है कि पुष्टि कर सकते हैं yऔर fअन्य तरह से मैं क्या चिपकाया है से आसपास रहे हैं? (जब मैंने मूल रूप से यह लिखा था, तो मैं ग्रीक पत्रों को फैला सकता हूं।)
नील

हाँ, वे दूसरे तरीके से हैं
ASCII-only

3

अपने प्रतिबिंब और घुमाव जानें

बुनियादी प्रतिबिंब और रोटेशन की बहुत सारी विविधताएं हैं, इसलिए यह जानने के लिए भुगतान करता है कि सूक्ष्म अंतर क्या हैं। तालिकाओं की कुंजी:

  • कमांड: वर्बोस मोड में कमांड का नाम।
  • रूपांतरण: क्या चारकोल को पात्रों को पलटने या घुमाने का प्रयास करना चाहिए क्योंकि यह दर्पण या उन्हें घुमाता है। उदाहरण के लिए, एक चक्कर या फ्लिप के बाद /बन सकता है \
  • मूल रखें: क्या चारकोल को मूल कैनवास के साथ परिणाम का विलय करना चाहिए।
  • ओवरलैप: (केवल तब लागू होता है जब मूल रखें हाँ है।) सीमा से आधे वर्णों में प्रतिबिंब / रोटेशन की धुरी की स्थिति निर्धारित करता है। प्रतिबिंबों के मामले में, पंक्तियों / स्तंभों की संख्या के बराबर जो प्रभावित नहीं होते हैं और परिणाम के बीच में समाप्त हो जाते हैं। रोटेशन के मामले में, घुमाए गए प्रतिलिपि को मूल में स्पष्ट क्षेत्रों (लेकिन रिक्त स्थान नहीं) को अधिलेखित करने की अनुमति है।

कुछ विचार

|         Command         | Transform | Keep Original | Overlap |
|-------------------------|-----------|---------------|---------|
| Reflect                 | No        | No            | n/a     |
| ReflectCopy             | No        | Yes           | 0       |
| ReflectOverlap          | No        | Yes           | 1       |
| ReflectOverlapOverlap   | No        | Yes           | n       |
| ReflectTransform        | Yes       | No            | n/a     |
| ReflectMirror           | Yes       | Yes           | 0       |
| ReflectButterfly        | Yes       | Yes           | 1       |
| ReflectButterflyOverlap | Yes       | Yes           | n       |

प्रतिबिंब की दिशा वैकल्पिक है। डिफ़ॉल्ट को एक बार दाईं ओर प्रतिबिंबित करना है। उन प्रतिबिंबों के लिए जो मूल रखते हैं, एक बहु दिशा की अनुमति होती है, जो बस प्रत्येक दिशा के लिए कमांड दोहराता है। (इसका मतलब है कि उदाहरण के लिए ReflectMirror(:¬)वास्तव में कुल चार प्रतियां बनाएंगे।)

कर्सर को प्रतिबिंब के साथ स्थानांतरित किया जाता है (यहां तक ​​कि जब मूल रखा जाता है)।

रोटेशन

|         Command         | Transform | Keep Original | Overlap |
|-------------------------|-----------|---------------|---------|
| Rotate                  | No        | No            | n/a     |
| RotateCopy              | No        | Yes           | 0       |
| RotateOverlap           | No        | Yes           | 1       |
| RotateOverlapOverlap    | No        | Yes           | n       |
| RotateTransform         | Yes       | No            | n/a     |
| RotatePrism             | Yes       | Yes           | 0       |
| RotateShutter           | Yes       | Yes           | 1       |
| RotateShutterOverlap    | Yes       | Yes           | n       |

उन घुमावों के लिए जो मूल रखते हैं, रोटेशन का एक वैकल्पिक मूल है। डिफ़ॉल्ट कैनवास के नीचे दाईं ओर है। स्वीकार्य मूल्य विकर्ण दिशाओं में से कोई भी हैं।

रोटेशन की मात्रा (45 ° वेतन वृद्धि में) वैकल्पिक है। डिफ़ॉल्ट 2 है, यानी 90 ° एंटीकॉकवाइज (वामावर्त)। उन घुमावों के लिए, जो मूल रखते हैं, दो वैकल्पिक विकल्प हैं: एक मल्टीजेट पूर्णांक प्रत्येक अंक के लिए एक बार कैनवास को घुमाने के लिए निर्दिष्ट करता है और फिर परिणामों को मर्ज करता है, जबकि एक पूर्णांक सूची केवल प्रत्येक घुमाव के लिए कमांड दोहराती है, चर परिणामों के आधार पर कैसे बीच में कैनवास बदल जाता है।


प्रश्न: क्या Transformमतलब है?
कैलक्यूलेटरफ्लीन

@ कलकटरफलाइन अच्छा सवाल है। जिन मामलों में ट्रांसफ़ॉर्म नहीं है, वे केवल एक चरित्र के लिए चरित्र की नकल हैं। उदाहरण के लिए, "4> 2" का एक मानक प्रतिबिंब केवल विपरीत क्रम में वर्ण हैं, "2> 4"। यह हमेशा वांछनीय नहीं होता है, इसलिए वर्णों को सबसे उपयुक्त तरीके से बदलने का प्रयास करें, इस प्रकार "4> 2" का प्रतिबिंब "2 <4" बन जाएगा। ट्रांस्फ़ॉर्म इसका सबसे अच्छा विवरण नहीं हो सकता है, इसलिए कुछ बेहतर सुझाव देने के लिए स्वतंत्र महसूस करें।
नील

कुछ भी बेहतर नहीं सोच सकते हैं, इसलिए आपको केवल यह बताना चाहिए Transformकि उत्तर में कैसे काम करता है।
कैलकुलेटर

@CalculatorFeline मैंने तालिका में एक कुंजी जोड़ दी है, यदि अन्य कॉलम या तो स्पष्ट नहीं थे।
नील

कीड़े को अब ठीक किया जाना चाहिए। इस स्पष्टीकरण को लिखने के लिए समय निकालने के लिए भी बहुत-बहुत धन्यवाद!
केवल

2

कमांड कैरेक्टर के बिना कमांड का उपयोग करें

एक अभिव्यक्ति जो एक कमांड का हिस्सा नहीं है, मुद्रित होती है।
यदि यह एक दिशा से पहले है, तो अभिव्यक्ति निर्दिष्ट दिशा में मुद्रित होती है।
किसी वर्ण से चयनित वर्ण का उपयोग करके संख्या को एक निर्दिष्ट लंबाई के साथ एक पंक्ति के रूप में मुद्रित किया जाता है\/-|

यदि किसी निर्देश का किसी अभिव्यक्ति द्वारा पालन नहीं किया जाता है, तो इसे निर्दिष्ट दिशा में एक स्थान पर एक चाल के रूप में गिना जाता है।

नोट: इसे कभी-कभी पिछले कमांड के हिस्से के रूप में गिना जा सकता है, इसलिए कमांड कैरेक्टर की वास्तव में आवश्यकता हो सकती है। ( मुझे याद दिलाने के लिए धन्यवाद नील )


1
आपको अस्पष्टताओं के लिए बाहर देखना होगा, क्योंकि पिछली कमांड एक वैकल्पिक पैरामीटर को स्वीकार कर सकती है।
नील

2

मल्टीडायरेक्शनल का उपयोग करें

कुछ आदेश बहुदलीय स्वीकार कर सकते हैं +X*|-\/<>^KLTVY7¬⌊⌈:। वे यहाँ क्या करने के लिए विस्तार । सामान्य तौर पर, दिशा सूची ऊपर से शुरू होती है और दक्षिणावर्त जारी रहती है।


कोई विशेष कारण क्यों कुछ आज्ञाओं को बहु-स्तरीय स्वीकार करते हैं लेकिन दूसरों को एक दिशा सूची की आवश्यकता होती है? (इसके लिए एक अच्छा कारण हो सकता है कि मैं बहुत अधिक प्रभावित हो रहा हूं, लेकिन मैं करने की कोशिश कर रहा था ReflectButtterflyOverlap(:¬, Modulo(g, 2));।)
नील

@ मुझे ऐसा नहीं लगता, ASAP
केवल

0

का पूरा उपयोग करें Sum

Sum बहुत सारे अधिभार हैं:

  • तार की एक सूची पर, उन्हें एक साथ मिलाया जाता है। हालांकि, अगर यह संभव है कि सूची खाली हो सकती है, तो यह कोई भी नहीं देगा, इसलिए इस मामले में, Join(..., "")इसके बजाय उपयोग करें ।
  • संख्याओं की गैर-रिक्त सूची में, बस उनका योग होता है।
  • सूचियों की गैर-रिक्त सूची में, उन्हें एक साथ समेटता है (1 गहराई तक समतल करता है)।
  • पूर्णांक पर, इसके अंकों का योग लेता है। (फ़्लोटिंग-पॉइंट वैल्यूज़ को पूर्णांक में काट दिया जाता है। यदि आप दशमलव स्थानों का योग चाहते हैं, तो पहले स्ट्रिंग करें।)
  • स्ट्रिंग पर केवल अंक और वैकल्पिक रूप से एक .वर्ण होता है, अंकों का योग लेता है।
  • संख्याओं और विभाजकों से युक्त एक स्ट्रिंग पर, संख्याओं का योग इंट या फ्लोट करने के लिए लिया जाता है (लेकिन ध्यान दें कि -एक विभाजक के रूप में गिना जाता है)।

पिछले दो नियमों का एक सुविधाजनक दुष्परिणाम यह है कि यदि आप Sumकिसी वर्ण पर प्रयोग करते हैं तो अंक 1-9अपने मूल्य पर आ जाते हैं और बाकी सब शून्य हो जाता है, इसके विपरीत Cast, जो गैर-अंक मानों के लिए विफल रहता है।


0

एक स्ट्रिंग सरणी के लिए विभाजन का उपयोग करें, संख्या सरणी के लिए विभाजन और कास्ट करें

एक स्ट्रिंग सरणी के लिए विभाजन ओवरहेड के केवल तीन वर्ण हैं, और विभाजित और कास्ट ओवरहेड के केवल चार वर्ण हैं। यह सरणी को शाब्दिक रूप से लिखने के लिए तुलना करें, जिसके लिए सरणी प्रारंभ और समाप्ति की आवश्यकता होगी, और प्रत्येक सरणी तत्व के बीच एक विभाजक।

यदि आपकी संख्या सरणी में केवल 95 से कम संख्याएँ हैं, तो किसी एक कास्ट का उपयोग करें (यदि सभी संख्याएँ 10 से कम हैं) या पूर्वनिर्धारित चर में से एक में अनुक्रमणिका।


0

किसी ऐरे या स्ट्रिंग से पहले अक्षर को स्लाइस करने के लिए फ़िल्टर का उपयोग करें

यहां तक ​​कि अगर तुम भाग्यशाली हो, Sliceएक स्ट्रिंग से पहला चरित्र टुकड़ा करने के लिए उपयोग 2 बाइट्स लेता है Slice(..., 1):। यह अधिक समय लेगा जब अभिव्यक्ति को कटा हुआ एक संख्या में समाप्त किया जाता है, एक विभाजक की आवश्यकता होती है, या यदि निम्न कोड को एक अभिव्यक्ति के रूप में व्याख्या की जा सकती है, क्योंकि उस मामले में Sliceयह एक अतिरिक्त पैरामीटर के रूप में उपभोग करना चाहेगा।

इसके बजाय, बस उपयोग करें Filter(..., k), जो पहले तत्व को गिरा देता है, इस प्रकार वांछित परिणाम प्राप्त करता है। (स्पष्ट रूप से उपयुक्त लूप इंडेक्स चर का उपयोग करें यदि आपकी अभिव्यक्ति किसी अन्य लूप के अंदर नेस्टेड है।) यह हमेशा 2 बाइट्स होता है और आसपास के कोड से प्रभावित नहीं हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.