2 डी भाषाओं में गोल्फ के लिए टिप्स


18

2 आयामी प्रोग्रामिंग भाषाओं में गोल्फ के लिए आपके पास क्या सामान्य सुझाव हैं? मैं उन युक्तियों की तलाश कर रहा हूं जिन्हें कोड-गोल्फ समस्याओं पर लागू किया जा सकता है और 2 डी प्रोग्रामिंग भाषाओं के लिए विशिष्ट हैं, लेकिन किसी एक भाषा के लिए विशिष्ट नहीं हैं ("टिप्पणियों को हटा दें" और " Mऑपरेशन का उपयोग करें " जैसे उत्तर उत्तर नहीं हैं)।

कृपया प्रति उत्तर एक टिप पोस्ट करें।


क्या यह सवाल मेटा पर नहीं होना चाहिए?
मिस्टर लिस्टर

2
यहाँ एक संबंधित मेटा प्रश्न है: 2 डी कार्यक्रम का आकार क्या है ? ढंका हुआ हिस्सा? उत्तल हल का क्षेत्र? अक्ष-संरेखित का क्षेत्रफल जिसमें आयत है? सभी ASCII आकार के कुछ रूप से बेहतर उपाय हो सकते हैं।
MSalters

मुख्य साइट के लिए @MrLister टिप्स प्रश्न विषय पर हैं। यदि आप देखें तो आप देख सकते हैं कि हमारे पास पहले से ही युक्तियों के टैग के तहत प्रश्नों का एक अच्छा सौदा है।
पोस्ट रॉक गार्फ हंटर

@MSalters हर दूसरी प्रोग्रामिंग लैंग्वेज की तरह ही बाइट्स में मापा जाता है। कुछ भाषा डिजाइनर वहां 2 डी भाषाओं को अलग-अलग शिष्टाचार में व्यवस्थित करने की अनुमति देते हैं, जैसे हेक्सागोनी या क्यूबिक्स, और उनके ऊपर thats।
पोस्ट रॉक गार्फ हंटर

जवाबों:


19

क्षैतिज अंतराल से बचें

अक्सर, कोड कार्यक्रम के बाएं हाथ की तरफ व्हॉट्सएप के लार्स अंतराल को छोड़ देगा, जैसे।

abc
  d
  e

यह 4 बाइट्स जोड़ता है, जब इसे बाएं संरेखण द्वारा बचा जा सकता है।

cde
b
a

यदि आपको व्हॉट्सएप के बड़े अंतराल का उपयोग करने की आवश्यकता है, तो उन्हें क्षैतिज के बजाय ऊर्ध्वाधर बनाने की कोशिश करें।

########
#      #
#      #
#      #

बनाम

####
#
#
#
#
#
#
####

11

जब संभव हो एक आयाम का उपयोग करें

आमतौर पर, सरल कार्यक्रमों को एक पंक्ति में लिखा जा सकता है। उदाहरण के लिए, क्लासिक बिल्ली कार्यक्रम हो सकता है:

>iv
^o<

लेकिन एक रैपिंग व्यवहार का दुरुपयोग कर सकता है और यह कर सकता है:

io

या, इस तरह के रैपिंग व्यवहार के बिना भाषाओं में:

> ?oi<

(मान लें ?कि पॉप नहीं है।) एक गैर-रैपिंग भाषा के मामले में, एक स्पष्ट लूप अक्सर बेहतर होता है।

जम्प कमांड के साथ

जम्प और सशर्त जम्प कमांड के साथ 2 डी भाषाओं में, एक प्रोग्राम इस तरह दिख सकता है:

abc >de?v;
    ^hgf<

यह भी हो सकता है:

abc de?!;hgf04&

(यदि !एक ट्रैम्पोलिन है, और &स्थिति में कूद गया है)


क्या आपका तीसरा उदाहरण ioiioiioiआदि नहीं है?
केवल

@ ASCII- केवल वास्तव में यह करता है। उफ़।
कॉनर ओ'ब्रायन

1
आपको शायद यह बताना चाहिए कि कुछ कम नियमित कमांड क्या करते हैं। उदाहरण के लिए मुझे नहीं पता कि मैं क्या io;करूं, और मुझे पता है कि ?पॉप नहीं है। ऐसा लगता है कि ये मछली के आदेश हैं, लेकिन मुझे नहीं लगता कि वे बहुत मानक हैं।
पोस्ट रॉक गार्फ हंटर

2
सशर्त लंघन आदेशों (जैसे भूलभुलैया) के बिना कुछ 2D भाषाओं में, आप अक्सर प्रोग्राम को शून्य से विभाजन के साथ सशर्त रूप से समाप्त करके एकल-लाइन प्रोग्राम भी लिख सकते हैं।
मार्टिन एंडर

10

कैरिज रिटर्न्स बाइट्स भी हैं

जितना कम 2 डी आप इसे बना सकते हैं, उतना बेहतर होगा। एक गाड़ी वापसी एक और नो-ऑप है। @ATaco और @ ASCII- केवल से युक्तियों की अनदेखी किए बिना, Y आयाम को यथासंभव छोटा रखने का प्रयास करें।

इस

###
####
########

से बेहतर है

###
###
###
##
#
#
#
#

कैरिज रिटर्न हमेशा बाइट्स नहीं होते हैं। \n(लाइन-फीड) एक लाइन-एंडिंग है जो नियमित रूप से POSIX सिस्टम पर बाएं-संरेखित पाठ में उपयोग किया जाता है, हालांकि विंडोज और मैक ओएस (प्री-मैकओएस) \n(लाइन-फीड) और \r(कैरिज-रिटर्न) के संयोजन का उपयोग करते हैं ।
wizzwizz4

9

DRY (खुद को दोहराएं नहीं)

फ़ंक्शंस के साथ अमूर्तता आमतौर पर कोड गोल्फ में लंबी होती है, यह वास्तव में 2 डी भाषाओं के लिए मदद कर सकती है। अपने कोड को फिर से तैयार करने की कोशिश करें ताकि यह एक ही स्निपेट का फिर से उपयोग कर सके, प्रवेश करने / निष्पादन की दो अलग-अलग शाखाओं के साथ इसे बाहर निकालने के लिए।


8

परस्पर पथ

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


2

दर्पण का उपयोग करें

दर्पण को कभी-कभी एक ही समय में दो रास्तों में उपयोग किया जा सकता है (प्रत्येक पथ दर्पण के एक तरफ से उछलता है)। यह मदद करने के लिए प्रतीत नहीं हो सकता है, लेकिन यह आपको अपने कार्यक्रम को पुनर्व्यवस्थित करने की अनुमति दे सकता है, या यदि आपके पास बहुत कुछ है अगर दिशा में परिवर्तन होता है तो उन्हें कम दर्पणों के साथ बदलने में सक्षम हो सकता है।


2

मुहावरों को याद करना

यहाँ कुछ "मुहावरे" हैं जो भाषा की प्रकृति के आधार पर कुछ चीजें करते हैं।

छद्म-रैखिक कोड

यदि डायनेमिक कोड जेनरेशन की आवश्यकता है, तो यह छद्म रैखिक कोड मॉडल का उपयोग करने के लिए हो सकता है:

v
\"line 1"
\"line 2"
.
.
\"line N"

मान लिया \और vमतलब है कि वे आम तौर पर क्या करते हैं।

अनंत लूप

लगभग सभी 2D भाषाओं में, ><एक अनंत, अटूट लूप है। यदि, किसी कारण से, आपको यह करने की आवश्यकता है, तो यह सबसे अच्छा तरीका है, भले ही यह कितना अच्छा लग सकता है:

>v
^<

वास्तव में, यदि आप अपना कोड 1-लाइनर बनाते हैं , तो आप इसका उपयोग कर सकते हैं ^या v, जैसे:

i?vo;

यह vचारों ओर लपेटते हुए, आईपी को स्वयं भेज देगा। आप अभी भी किसी भी उदाहरण में इस दिशा का उपयोग करने में सक्षम हो सकते हैं, जहां एक दिशात्मक कमांड (रिश्तेदार) नो-ऑप्स की एक श्रृंखला को इंगित करता है।

काफी ढाँचा

आमतौर पर, स्ट्रिंग / उद्धरण ढांचे वाली भाषाओं में इस तरह से एक क्वीन हो सकता है:

<quote><generate "><output stack><terminate>

> <> के लिए, यह ऐसा दिखेगा:

":1-r>o<#

सिवाय इसके कि एक समाप्ति के रूप में एक त्रुटि के साथ बाहर निकलता है। यह शायद सबसे छोटा > <> क्वीन है , या, कम से कम, सबसे छोटा जो मैंने पाया है।


यह वास्तव में एक टिप की तरह प्रतीत नहीं होता है।
पोस्ट रॉक गार्फ हंटर

@WheatWizard मैंने उन्हें एक साथ रखा क्योंकि उन्हें विभाजित करने से मुझे कम समझ में आया, सभी सामान्य प्रोग्राम-लेआउट मुहावरे हैं।
कॉनर ओ'ब्रायन

आपके पास <> <> क्वीन में क्यों है?
जो राजा

@ जोकिंग मैं विशेष रूप से योग्य नहीं हूं
कॉनर ओ'ब्रायन

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