शेक्सपियर प्रोग्रामिंग भाषा में गोल्फ के लिए युक्तियाँ


43

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

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


17
मुझे यकीन नहीं है कि आप एसपीएल को गोल्फ कर सकते हैं । एसपीएल इतनी क्रिया है कि मुझे लगभग ऐसा लगता है कि इस प्रश्न को कोड ट्रोलिंग टैग की आवश्यकता है। : पी
एलेक्स ए।

तुम सिर्फ गोल्फ SPL नहीं कर सकते। कम से कम, शेक्सपियरियन विद्या के मेरे कमजोर ज्ञान के लिए ...
रोडोल्फो डायस

@ रोडोफोडीस: फीबल? मुझे लगता है कि आप पीपीसीजी के निवासी शेक्सपियर विद्वान हैं।
एलेक्स ए।

8
@AlexA। जो एक अच्छी बात नहीं हो सकती है: इसका मतलब यह है कि मैं एसपीएल :-) को समझने और समझने के लिए पर्याप्त रूप से तैयार हूं।
रोडोल्फो डायस

@AlexA। Sp इसे कर सकते हैं ...
कॉनर ओ'ब्रायन

जवाबों:


18

(खैर - चूंकि यह मेरी अपनाई गई भाषा 1 है , मुझे लगता है कि मैं यहाँ कुछ जोड़ने के लिए बाध्य हूँ)

छोटे चर नामों का उपयोग करें

हाँ, हाँ, हाँ, यह कोड-गोल्फ के लिए बहुत मानक है, आप बस एक-अक्षर-लंबाई चर नाम का उपयोग करते हैं, यहां कोई खबर नहीं है। या है? चूँकि SPL बनाने वाले चैप्टर अपनी भाषा के चरों के लिए किसी भी नाम की अनुमति नहीं देने के लिए पर्याप्त निराधार थे: उन्हें शेक्सपेरियन नाटकों से आना चाहिए , जो कि चरित्र की लंबाई के संदर्भ में, शाही tush में एक दर्द है - लेकिन, यदि आप SPL में कोडिंग कर रहे हैं , आप पहले से ही जानते हैं। इसलिए, मेरी सलाह प्रति उदाहरण के लिए, कैंटरबरी के आर्कबिशप के बजाय अजाक्स , फोर्ड , पेज या पक जैसे लघु नामों वाले पात्रों का उपयोग करना होगा ।

यही सब मुझे मिला, मुझे डर है।


1 - चूंकि मेरे जावा कौशल एक नवजात शिशु के बराबर हैं।



13

(पिछले एक करने के बाद, मुझे बस कुछ बातें याद हैं)

अपना कोड सावधानी से चुनें

एक उदाहरण, कोशिश करने और समझाने का कि इसका क्या अर्थ है।

Ajax:
 You are as warm as a big red rich fair cute bold cat!

तथा

Ajax:
 Thou art as blossoming as an embroidered trustworthy bottomless peaceful charming handsome chihuahua!

ठीक उसी परिणाम का उत्पादन करें, जो मान 64 मानने के लिए बोला जा रहा चरित्र बनाता है (चूँकि, आपने SPL के साथ मेरी लंबी लड़ाई को पढ़ा है , आप जानते हैं कि दोनों पंक्तियाँ 2 * 2 * 2 * 2 * 2 * 2 * के बराबर हैं। 1); हालाँकि, पहले वाले के पास 59 बाइट्स हैं, जबकि दूसरे वाले के पास 107 का बाइटकाउंट है।

फिर भी, कोई भी SPL के साथ चुनौती दर्ज करने के लिए पर्याप्त रूप से समाप्त नहीं होने जा रहा है , इसलिए ...


10
क्या आप एक विवरण में कई बार एक ही विशेषण का उपयोग कर सकते हैं? जैसे a big big big big big big cat, 4 और बाइट्स बचाना? मुझे पता है कि यह कलात्मकता को बर्बाद करता है ... लेकिन यह कोड गोल्फ है। ;)
डीएलओएस

@ डलास, मैंने जो देखा है, उसमें ऐसा करने के लिए आपको कुछ भी मना नहीं है। इसलिए ... आप मुझसे बेहतर गोल्फर हैं ^ _ ^
रोडोल्फो डायस

1
अहम। रॉबर्ट फ्रेजर को डॉन्टेड मत कहो। codegolf.stackexchange.com/a/69360/43394
wizzwizz4

12

कोई भी रोमन अंक एक मान्य दृश्य संख्या है

इसका मतलब है कि इसके बजाय:

Scene I
Scene II
Scene III
Scene IV
Scene V

तुम कर सकते हो:

Scene L
Scene I
Scene C
Scene X
Scene V

है Dकोई मान्य रोमन अंक? IIRC, यह 500 है (लेकिन मुझे यकीन नहीं है कि यह SPL में मान्य है)
Giuseppe

@Giuseppe मुझे समझ नहीं आता कि आप सिर्फ इतना ही क्यों नहीं जाँचते, लेकिन आधिकारिक SPL दुभाषिया M, C, D, X, L, I और V का समर्थन करता है
NieDzejkob

10

अनावश्यक शब्दों को हटा दें

इसे देखें (पठनीयता के लिए नए अंक और व्हाट्सएप डालें):

Puck:You is a big big cat!
     Open your heart!
Ajax:Be you worse than I?
     If so, let us return to Scene V!
     If not, you is a cat.
     You is the sum of I and the sum of a cat and you
     Speak thy mind!
     [Exeunt]

बहुत गोल्फ लग रहा है एह? यहाँ एक और भी अनपेक्षित रूप से छीन लिया गया है:

Puck:You big big cat!
     Open heart!
Ajax:Be you worse I?
     If so, let us Scene V!
     If not, you cat.
     You is the sum of I the sum of a cat you
     Speak mind!

संदर्भ के लिए, यहां कोड से आसानी से हटाने योग्य शब्दों की एक सूची दी गई है:

  • अपना मन बोले -> तेरा बोलो
  • दिल खोलो -> दिल खोलो *
  • अपने दिल की सुनो -> सुनो tothy
  • अपना दिमाग खोलें -> खुला दिमाग *
  • आप एक बिल्ली हैं -> आप बिल्ली *
    • केवल ऐसे स्थिरांक पर लागू होता है big cat, अन्यथा आपको अभी भी 'की आवश्यकता है'
  • हमें -> हम पर वापस आते हैं
  • Y की तुलना में X [op] बनें? -> Be X [op] Y?
  • आप X और Y के [op] हैं -> आप ofX Y के [op] हैं
  • [जारी रखें] -> (पूरी तरह से हटा दिया गया)

लीजेंड:

  • Xऔर Yजैसे cat, Iया लगातार हैंyou
  • [op]क्या ऑपरेशन जैसे हैं nicer,the sum of
  • * इसका मतलब है कि आप विराम चिह्न को हटा सकते हैं यदि यह नाटक का अंतिम वाक्य है

अगर मुझे कोई और आता है तो मैं इसे सूची में जोड़ दूंगा।

अतिरिक्त संदर्भ के लिए, यहां एक कार्यक्रम शुरू करने के लिए सबसे छोटा शीर्ष लेख है:

,.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]

इसे ऑनलाइन आज़माएं!

आवश्यक के रूप में अतिरिक्त पात्रों के रूप में पेज और फोर्ड जोड़ें।


1
यदि आपको और भी अधिक वर्णों की आवश्यकता है, तो यहां
NieDzejkob

: | धारीदार
केवल

6

छोटे शब्दों का प्रयोग करें

तो यहाँ वे हैं:

  • या के aबजाय का उपयोग करें , भावों और समान को छोड़कर , क्योंकि वे साथ काम नहीं करेंगे ।anthethe sum ofa
  • का उपयोग करें am, beया के isबजाय areया art
  • या के Iबजाय का उपयोग करें ।memyself
  • का प्रयोग करें youबजाय thee, thou, thyselfया yourself
  • bigविशेषण के लिए उपयोग करें ।
  • catसकारात्मक संख्या के लिए उपयोग करें ।
  • pigनकारात्मक संख्याओं के लिए उपयोग करें ।
  • zeroशून्य के लिए उपयोग करें ।
  • का प्रयोग करें worseके लिए A < B(बजाय smallerया punier)।
  • का प्रयोग करें nicerके लिए A > B(के बजाय better, bigger, fresher, friendlierया jollier)।
  • चरित्र के नाम:
    • 4 पत्र: अजाक्स, फोर्ड, पेज, पक
    • 5 पत्र: एगस, हेलेन, जूलिया, लुसियो, मोपसा, पेरिस, पिंच, प्रियम, रेगन, रॉबिन, रोमियो, टिमोन, टाइटस, वीनस, वियोला
    • 6 पत्र: एडोनिस, आइजन, अलोंसो, एंजेलो, आर्थर, बानको, बियंका, ब्रूटस, सिसरो, डोरकास, डंकन, एमिलिया, फेंटन, हैमलेट, हेक्टेट, हेक्टर, हेलेना, हर्मिया, इमोजेन, जूलियट, लेनोक्स, ओबेरनिया, ओलिविया, ओरिसा, ओरिसा , पोर्टिया, थासा, थुरियो, टायबाल्ट
    • 7 पत्र: एड्रियाना, एमिलिया, एग्रीप्पा, एंटोनियो, कैपुलेट, कैसियस, क्लाउडियो, डायोनिजा, एस्केलस, गोनेरिल, होराटो, लियोनाटो, लुसियाना, मैकबेथ, मैकडफ, मैल्कम, मारियाना, मिरांडा, ऑक्टेविया, ओफेलिया, ओथेलो, ओथेलो, पन्थालिनो, पन्थिनो , पब्लियस, शालो, शीलॉक, स्लेंडर, सोलिनस, थ्यूस, टाइटेनिया, ट्रिलस, यूलिस
    • 8 पत्र: एच्लीस, बीट्राइस, बेनेडिक, बेनवोलियो, क्लॉडियस, कॉर्डेलिया, क्रेसिडा, डॉगबेरी, डॉन जॉन, फालस्टाफ, गर्ट्रूड, हर्मोनी, इसाबेला, लिसेन्डर, मर्कुटियो, मोंटेग, पर्ल्स, पोलोनियस, पॉम्पीओस, प्रोस्पेरो, रोसेलिंड, स्टेपोहान
    • 9 पत्र: अगेम्नॉन, एंटिओकस, ऑटोलाइकस, बालथाजार, ब्रेबेंटियो, कैसेंड्रा, क्लियोपेट्रा, कॉर्नेलियस, डेमेट्रियस, डेसडेमोना, डोनाल्बैन, डॉन पेड्रो, फर्डिनेंड, फ्रांसिस्का, हिप्पोल्टा, किंग जॉन, किंग लियर, लिकोरोरिडा, सेबबेरिडा, सेबेरिस्बियन।
    • 10 पत्र: एंड्रोमैचे, सिम्बरलाइन, फोर्टिनब्रस, फ्रायर जॉन, किंग हेनरी
    • 11 पत्र: मार्क एंटनी
    • 12 पत्र: डॉक्टर कैयस, किंग रिचर्ड, लेडी कैपुलेट, लेडी मैकबेथ, लेडी मैकडफ, प्रिंस हेनरी, क्वीन एलिनॉर
    • 13 पत्र: जॉन ऑफ गौंट, जूलियस सीजर, लेडी मोंटेग, मिस्ट्रेस फोर्ड, मिस्ट्रेस पेज
    • 14 पत्र: फ्रायर लारेंस, द एपोथेक्सेरी
    • 15 पत्र: क्रिस्टोफर स्ली, ऑक्टेवियस सीज़र
    • 17 पत्र: जॉन ऑफ लैंकेस्टर, मिस्ट्रेस ओवरडोन, द ड्यूक ऑफ मिलान
    • 18 पत्र: वेनिस के ड्यूक
    • 24 पत्र: वेस्टमिंस्टर के मठाधीश
    • 28 पत्र: द आर्कबिशप ऑफ कैंटरबरी
    • यदि आपको वास्तव में अधिक की आवश्यकता है, तो आपको निश्चित रूप से प्रत्येक चरित्र के ढेर का उपयोग करने पर विचार करना चाहिए।

ध्यान दें कि बहु-शब्द वर्ण अपने नाम ( user202729 की नोक से ) के बाद किसी भी स्थान को छोड़ सकते हैं , इसलिए वे केवल एक शब्द के साथ वर्णों के लिए बेहतर हैं
जो किंग

5

"आइए हम दृश्य X पर लौटते हैं" का उपयोग तब भी किया जा सकता है जब चरित्र बोला जा रहा हो। इसलिए इसके बजाय:

Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
Ajax:If not,let us return to scene III.
[Exit Puck]
[Enter Page]
Ajax:You is a big big big big big big cat.

तुम कर सकते हो:

Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
[Exit Puck]
[Enter Page]
Ajax:If not,let us return to scene III.You is a big big big big big big cat.

5

अनावश्यक रिक्त स्थान निकालें

तुच्छ लोगों के अलावा (दो आसन्न रिक्त स्थान, एक विराम चिह्न से सटे, एक नई रेखा के समीप, अंत में) (कुछ अपवादों के साथ), निम्न टोकन के बाद का स्थान हटाया जा सकता है:

  • the sum of
  • let us
  • the ghost( इस तरह ) (लेकिन जो भी इस चरित्र का उपयोग करेगा)
  • if soऔर if not(हटाने ,इस के बाद, और किसी भी स्थान को जोड़ने के लिए की जरूरत नहीं है उदाहरण:। if solet usact I)
  • listen to(इसलिए listen tothyकाम करता है, इस तरह )
  • और मूल रूप से कोई भी बहु-शब्द टोकन

नोट: यह पर्ल दुभाषिया के साथ काम नहीं करता है । यह शायद फ्लेक्स के पार्सिंग व्यवहार के कारण सिर्फ एक अनपेक्षित प्रभाव है। उस बारे में "भाषा मानक" स्पष्ट नहीं है।


वापस करने के लिए और मेरे कुछ जवाब संपादित करें ... बहुत अच्छा लगता है!
जो किंग

क्या टोकन में एक बग है, या क्या भाषा में व्यवहार को परिभाषित किया गया है?
सेर

2
@ C @ur अपडेट देखें।
user202729

5

आपको सशर्त लोगों को स्विच करने की आवश्यकता नहीं है।

उदाहरण के लिए,

Ajax:Is you better than the sum of a fat fat fat fat cat and a fat cat?
Puck:If so,let us return to Scene I.

से लंबा है

Ajax:Is you better than the sum of a fat fat fat fat cat and a fat cat?If so,let us return to Scene I.

1
ओह। फिक्सिंग।
ओलिवर नी

4

स्थानापन्न करने के बजाय, स्थिरांक जोड़ें

You is the difference between I and a big cat.

से लंबा है

You is the sum of I and a big pig.

4

छलांग छोटी हो सकती है

return toयदि दृश्य आगे है, और इसके विपरीत भी आप उपयोग कर सकते हैं । वास्तव में, अगर आप इसे पूरी तरह से छोड़ देते हैं, तो दुभाषिया भी परवाह नहीं करता है। इसका अर्थ है कि ये तीनों कथन 100% समतुल्य हैं:

Let us proceed to Scene X.
Let us return to Scene X.
Let us Scene X.

जो किंग ( codegolf.stackexchange.com/a/164394/76162 ) ने पाया है कि "लेट अस सीन एक्स" काफी है।
एड वेन

@EdWynn जानना अच्छा है। मैंने इसे शामिल करने के उत्तर को फिर से लिखा।
निएडजेककोब


4

केवल एक दृश्य का उपयोग करें

आम तौर पर, आप किसी कार्य के पहले दृश्य का पुन: उपयोग नहीं कर सकते हैं, क्योंकि इसमें हमेशा [Enter Ajax and Puck]पहली चीज होती है। हालाँकि, आप [Exeunt]किसी नाटक के पहले दृश्य का पुन: उपयोग करने में सक्षम होने के लिए इसे प्रस्तुत कर सकते हैं। [Exeunt]एक नया दृश्य घोषित करने की तुलना में एक बाइट कम है, और एक अधिनियम में कूदना एक दृश्य में कूदने से दो बाइट कम है।

जैसे: एक साधारण बिल्ली का कार्यक्रम

,.Ajax,.Page,.Act I:.Scene I:.[Enter Page and Ajax]Scene V:.Ajax:Open mind!Speak thy!Let usScene V!

इसे ऑनलाइन आज़माएं!

सेवा:

,.Ajax,.Page,.Act I:.Scene I:.[Exeunt][Enter Page and Ajax]Ajax:Open mind!Speak thy!Let usAct I!

इसे ऑनलाइन आज़माएं!


3

छोटे शब्दों का प्रयोग करें

उदाहरण:

Thyऔर thyselfकी तुलना में कम कर रहे हैं yourऔर yourself

Isसे छोटा है are

और अधिक...


3

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

उदाहरण के लिए, उपयोग न करें

Ajax:Are you as good as or better than me?If so,let us return to Scene I.

बल्कि,

Ajax:Are you worse than me?If not,let us return to Scene I.

3

If (so|not) तुलना का तुरंत पालन करने की आवश्यकता नहीं है।

Am I as big as you?You big big big big big cat.If so, you is the sum of you and a big big cat.

4
वास्तव में, एक तुलना के परिणामों को एक ध्वज के रूप में संग्रहीत किया जाता है और इसका उपयोग बार-बार दृश्य संक्रमणों के दौरान या कई If soएस में किया जा सकता है । यह तुलनाओं को दोहराने से बचने में मददगार हो सकता है!
जो किंग

2

बड़ी संख्या में स्टोर करने के लिए स्थिरांक का उपयोग करें

उदाहरण के लिए, यदि आपके पास है

Ajax:You is a fat fat fat fat fat fat fat fat fat fat cat!
Puck:You is the sum of thyself and a fat fat fat fat fat fat fat fat fat fat cat
Ajax:You is the sum of the difference of me and thyself and a fat fat fat fat fat fat fat fat fat fat cat!

आप बस किसी अन्य व्यक्ति को शीर्ष पर घोषित कर सकते हैं

Ford,a fat fat fat fat fat fat fat fat fat fat cat.

और अपने कोड को बदल दें

Ajax:You is Ford.
Puck:You is the sum of thyself and Ford.
Ajax:You is the sum of the difference of me and thyself and Ford.

8
आधिकारिक दुभाषिया इस तरह से स्थिरांक घोषित करने का समर्थन नहीं करता।
नीदजजकोब

2

गॉटोस केवल कमांड के साथ प्रयोग करने योग्य नहीं हैं If (so|not)

Am I as big as you?If so,you is the sum of you and a big big cat.If not,you is the sum of you and twice I.

2

सभी नई कहानियों को नजरअंदाज कर दिया जाता है

,.Ajax,.Puck,.Page,.Act:.Scene:.[Enter Ajax and Puck]Ajax:You Puck.[Exeunt]

2

के बजाय का उपयोग करें <या>==

हर स्थिति के लिए लागू नहीं है, लेकिन यह थोड़ा कम है:

पक == अजाक्स

Puck:Is I as bad as you?

पक <अजाक्स या पक> अजाक्स

Puck:Is I worse you?
Puck:Is I nicer you?

दोनों के लिए 4 बाइट्स छोटी!


2

आपको समाप्ति की आवश्यकता नहीं है .या !

इसे ऑनलाइन आज़माएं!

यह भी एक से पहले इस्तेमाल किया जा सकता है [। (धन्यवाद jimmy23013)

,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat[Exeunt]

उदाहरण:

  • ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat
  • ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]

में काम नहीं करता है:

  • ,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax](ठीक बाद Scene {number}:) (हालांकि यह काम करता है, मुझे नहीं पता क्यों)
  • ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart (और छोटे संस्करण)
  • ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I (और छोटे संस्करण)
  • ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall(केवल खाली होने के बाद Recall, Recall xया Recall@काम करता है)
  • ,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy(बिना mind)

इस तरह के रूप में जहाँ आप पहले से ही एक शब्द को हटा दिया है कुछ स्थितियों में काम करने के लिए नहीं है Speak thyयाLet us Scene I
जो राजा

2

'दो बार' और वितरण योग्य संपत्ति का उपयोग करें

के बजाय:

You is the sum of a big big big big cat a big big big cat.

उपयोग:

You is twice twice twice the sum of a big cat a cat.

यह 2 बाइट्स बचाता है twiceचूंकि 2 उपयोग big8 बाइट्स (एक स्थान के साथ) है और twiceकेवल 6 बाइट्स है।

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