मैजिक स्पेलकचर लिखें


14

गेम वेविंग हैंड्स एक पेन-एंड-पेपर मैजिक के बीच कहीं है: गैदरिंग और एक बहुत विस्तृत रॉक पेपर कैंची। आप प्रत्येक हाथ के लिए आठ इशारों में से एक लिखते हैं:

  • wiggled FIngers
  • proffered Palm
  • Sझपकी
  • Wएवेन्यू
  • Dइजी इशारा कर रहा है
  • Cगोद
  • स्टेशनB
  • Nothing

कुछ महत्वपूर्ण नियम हैं जो बाकी पर पूर्वता लेते हैं:

  • यदि दोनों हाथ इशारा करते हैं Pतो आप स्वचालित रूप से आत्मसमर्पण कर देते हैं । (यह एक सरलीकरण है, लेकिन हम इसके साथ जाएंगे।)
  • एक समय में केवल एक हाथ इशारा कर सकता है B

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

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

यहां इशारा अनुक्रमों की सूची दी गई है। ऊपरी मामले के पत्र एक हाथ से किए गए एक इशारे का उल्लेख करते हैं, निचले मामले के पत्र दोनों हाथों से किए गए एक इशारे का उल्लेख करते हैं।

B           Stab
cDPW        Dispel magic               
cSWWS       Summon elemental           
cw          Magic mirror               
DFFDD       Lightning bolt             
DFPW        Cure heavy wounds          
DFW         Cure light wounds          
DPP         Amnesia                    
DSF         Confusion                  
DSFFFc      Disease                    
DWFFd       Blindness                  
DWSSSP      Delayed effect             
DWWFWc      Raise dead                 
DWWFWD      Poison                     
FFF         Paralysis                  
FPSFW       Summon troll               
FSSDD       Fireball                   
P           Shield                     
p           Surrender                  
PDWP        Remove enchantment         
PPws        Invisibility               
PSDD        Charm monster              
PSDF        Charm person
PSFW        Summon ogre
PWPFSSSD    Finger of death
PWPWWc      Haste
SD          Missile
SFW         Summon goblin
SPF         Antispell
SPFPSDW     Permanency
SPPc        Time stop
SSFP        Resist cold
SWD         Fear
SWWc        Fire storm
WDDc        Lightning bolt
WFP         Cause light wounds
WFPSFW      Summon giant
WPFD        Cause heavy wounds
WPP         Counterspell
WSSc        Ice storm
WWFP        Resist heat
WWP         Protection from evil
WWS         Counterspell

हां, Lightning boltऔर Counterspellदो अलग-अलग क्रम हैं।

आप किसी भी सुविधाजनक सूची या स्ट्रिंग प्रारूप में इनपुट लेते हुए एक प्रोग्राम या फ़ंक्शन लिख सकते हैं, जब तक कि यह पूर्व-संसाधित नहीं है, तब तक कमांड-लाइन तर्क या फ़ंक्शन तर्क। आप रिटर्न के जरिए या STDOUT पर प्रिंट करके मंत्रों के जोड़े बना सकते हैं। फिर से, आप किसी भी सुविधाजनक सूची या स्ट्रिंग प्रारूप का उपयोग कर सकते हैं, जब तक कि आउटपुट अस्पष्ट है।

आप मान सकते हैं कि बाएं और दाएं हाथ के लिए अनुक्रम समान लंबाई हैं, और वे वैध हैं (विशेष रूप से, Bएक ही समय में दो हाथों से कभी नहीं किया जाएगा)। ध्यान दें कि इनपुट में केवल ऊपरी केस अक्षर होंगे। लोअर केस लेटर्स का उपयोग उपरोक्त सूची में केवल यह बताने के लिए किया जाता है कि दोनों हाथों को समान (अपर-केस) इशारे करने की आवश्यकता है।

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

यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।

उदाहरण

प्रत्येक उदाहरण में तीन पंक्तियाँ होती हैं: बाएँ हाथ का क्रम, दाएँ हाथ का क्रम (दोनों इनपुट; सबसे दायाँ इशारा सबसे हाल का है), और सभी संभव वर्तनी संयोजनों की सूची (आउटपुट)।

WFP
WWS
[["Cause light wounds","Counterspell"],["Shield","Counterspell"]]

SD
BB
[["Missile","Stab"]]

WWP
WPP
[["Surrender"]]

DFW
CCW
[["Cure light wounds","-"]]

FFW
WWF
[["-","-"]]

DCW
CCW
[["Magic mirror"]]

WFPSFW
PPDDPP
[["Summon goblin","Shield"],["Summon ogre","Shield"],["Summon troll","Shield"],
 ["Summon giant","Shield"],["Summon goblin","Amnesia"],["Summon ogre","Amnesia"],
 ["Summon troll","Amnesia"],["Summon giant","Amnesia"]]

BSWWS
CSWWS
[["Counterspell","Counterspell"]]

CSWWS
CSWWS
[["Counterspell","Counterspell"],["Counterspell","Summon elemental"],
 ["Summon elemental","Counterspell"],["Summon elemental","Summon elemental"]]

PWPWWC
BBSPPC
[["Haste"],["Time stop"]]

@ TheBestOne "विशेष रूप से, बी को एक ही समय में दो हाथों से प्रदर्शन नहीं किया जाएगा"
मार्टिन एंडर

जवाबों:


3

CJam, 987 931 925 663 बाइट्स

qN/:Q;"Üãã0Ш¬Áó:-/ð1$½Ï¶¶òu´dóá3äÑì?´ì>³3cïCà×M×âÀCÒû¬u?xO,ÆFv)pÙû!¼ eÖUÈRÙnÂo/µ¾H¼RÎÚç¡ñ>z"32f-222bCb" BcDPWSwFdps"f=S/"[zõs¢@>2¯f¥sy<éSGÆÄbÚØÜ}}¤ºÅd¸(EWfa¤éõbfXpÀS7éÛM¼å© Ñæ¶a«I³þ>ÙÜ¡/¦$lâ µãÆØ¢§&á¼óÀwÏU¤ôYðçQòÔR#pÓzP×°~ï]v«viÚY¶¨¯`|o(Nê@æGÏ]ÌÉþMNÒÀ2yÌgÊ]Ê4Ê|BÃKWãIowIQ£Í-,_¥÷¶ºK-;Kr ÕtVæWï÷¦?+ÜÌÜó˯çp2Mvmc!hàtc»¬}sIæTÌÂ&ë6º²>Nº¯¦F¤½{ÜOSµ¸Ñ'|`²P³íD¿Z.c¢ Ò¿ñÅ¢MRöDk?à§iõ;­¡k'çTÑñ"31f-225b26b97f+:c"j"Ser'z/{(eu\+}%]z_{{~SaQX={_QV=W):W=={_el+m*}{m*:s}?}/:s{S+2$S+#)1$"-":D?@@}%-2<}%1:V(:X(:W;\}2*m*{z_,1>{)__~=\Da&,!={a+}{;}?$W>}*~}%_&_,({[D_]a-}*_{{`D&,!},}:A~,{A}*_["Surrender"_]a:S&,{;S}*p

ध्यान दें कि इसमें ASCII कोड के सभी ASCII वर्ण 32 से 255 तक ही हैं। एसई द्वारा कुछ पात्रों को छोड़ दिया जा सकता है, इसलिए ऊपर दिए गए लिंक से कोड को कॉपी करना बेहतर होगा

यह उपरोक्त कोड निम्नलिखित 925 बाइट समाधान का एक आधार परिवर्तित संस्करण है:

qN/:Q;
"B|Stab|cDPW|Dispel magic|cSWWS|Summon elemental|cw|Magic mirror|DFFDD|Lightning bolt|DFPW|Cure heavy wounds|DFW|Cure light wounds|DPP|Amnesia|DSF|Confusion|DSFFFc|Disease|DWFFd|Blindness|DWSSSP|Delayed effect|DWWFWc|Raise dead|DWWFWD|Poison|FFF|Paralysis|FPSFW|Summon troll|FSSDD|Fireball|P|Shield|p|""Surrender":R"|PDWP|Remove enchantment|PPws|Invisibility|PSDD|Charm monster|PSDF|Charm person|PSFW|Summon ogre|PWPFSSSD|Finger of death|PWPWWc|Haste|SD|Missile|SFW|Summon goblin|SPF|Antispell|SPFPSDW|Permanency|SPPc|Time stop|SSFP|Resist cold|SWD|Fear|SWWc|Fire storm|WDDc|Lightning bolt|WFP|Cause light wounds|WFPSFW|Summon giant|WPFD|Cause heavy wounds|WPP|Counterspell|WSSc|Ice storm|WWFP|Resist heat|WWP|Protection from evil|WWS|Counterspell"]s'|/2/_
{{~SaQX={_QV=W):W=={_el+m*}{m*:s}?}/:s{S+2$S+#)1$"-":D?@@}%-2<}%1:V(:X(:W;\}2*
m*{z_,1>{)__~=\Da&,!={a+}{;}?$W>}*~}%_&
_,({[D_]a-}*_{{`D&,!},}:A~,{A}*
_[R_]a:S&,{;S}*p

न्यूलाइन्स सिर्फ शो के लिए हैं। यह बहुत बड़ा हो सकता है , लेकिन कम से कम मुझे यह सभी परीक्षण मामलों को पास करने के लिए मिला है -_-।

इसमें उम्मीद से ज्यादा वक्त लगा।

अद्यतन 1 - कोड वाले हिस्से को थोड़ा सा गढ़ा। अभी और गुंजाइश है। स्ट्रिंग भाग को गोल्फ / बेस परिवर्तित भी किया जा सकता है, लेकिन मैं इससे बचना चाहूंगा क्योंकि अब अन्य सभी उत्तर भी ऐसा नहीं कर रहे हैं।

UPDATE 2 - कोड को गोल्फ करना, अब उस स्ट्रिंग को कंप्रेस करने का समय।

अद्यतन 3 - बेस ने 663 बाइट्स के कोड आकार को कम करने के लिए स्ट्रिंग को परिवर्तित कर दिया (इसे 640 बाइट्स तक कम किया जा सकता है, लेकिन फिर 0 से 31 एएससीआईआई कोड वर्ण भी हैं, जो वास्तव में कठिन हैं और मैं केवल उनके पास रहूंगा जब मुझे फिर से पीटा जाएगा)।

इसे यहाँ ऑनलाइन आज़माएँ


4

अजगर 2, 685

एक फ़ंक्शन fको परिभाषित करता है जो दो तारों को स्वीकार करता है । Surrenderयदि खिलाड़ी आत्मसमर्पण करता है तो रिटर्न वैल्यू स्ट्रिंग है ; अन्यथा, स्ट्रिंग्स से युक्त एक सेट (जो दो-हाथ वाले मंत्र दर्शाता है), और स्ट्रिंग्स की लंबाई -2 ट्यूपल्स (प्रत्येक हाथ के लिए अलग-अलग मंत्र का संकेत)।

Base64 एन्कोडेड स्रोत:

I2VuY29kaW5nOkxhdGluCmV4ZWMiIiJ42mVTTWvjMBC951foJntxy+61iwtNjLqFLJhqQYeQg2KPbYEsBUlOGtrub98Zp6Efe7Lm6c2H3jyvy9Y0KVuWXCa940VT1arklYl7sGzUvWkQk0pJJEzj6B0DCyO4pC0vKiGqquRr0w/JGdeznbeJYKqxmgKwAfThxI5+cm2kiwtuKeUdr+uS340OotEYSYEs77opGu8wVlJKJFRg9QlaBl0HXHK1UUoobF97E4knBObVOmh7igarilpSv7exU/AWRxZS0sjCBNhpArCwHAzYFo+VwugRRn9cMAauGbRL9FS8mZNWgw4jw2IxQZhBcQH3EOYZPrX0fVwwhFSNTeXc1PUQmO9YCzpccrwg8LeJ0Vjkfczs/c4aLCdr7HDn0rwOO8fYFXk1hFE7nPGEoBTz2PjoxBpPL5Gki1wwjVMqulzpKX4VXX3WpzeaXorDVhf+5+UpWtIKA3z82zhKfeiMbMonCevgE64It8e64EcGBzOz5ZcC+eK+tHrctZrZIhTrm+f1Jm47H1hkxrE1Mx2z14DtjyZcclm8nvYodJbn2rUMt5eFzV+zLctIn8ulD1zz2xmiSoYqBY3KZxZcFvM8f10sz65vjqg/eZyNJgRMJO8J0cw/XDDoCGQyIdqSL3EdLfozvtkOKY8aObRJck59jCV/cAcTzc5Yk07z3hXxfmm0C62uxuCPGYHF5Pe0I7olIxIQRhSoqpr//yZ0P6IPzYWWL3CeK75ooWNdhrrlN015T4dimb/cZ6GwePgZIE3BbZqX5+ypOOUkxRNJcWauUSbWMkJPZ5TSzujr1XPWFm3+bRasyW+/568F2iQE3AQaf7uxm6sfKHs4f3jNt/9cMNXTZmIiIiIuZGVjb2RlKCd6aXAnKQ==

स्रोत उस फॉर्म का है exec "eu352909HE%#NTHQh".decode('zip')जो निम्नलिखित कोड को निष्पादित करता है:

L=dict(B='Stab',cDPW='Dispel magic',cSWWS='Summon elemental',DFFDD='Lightning bolt',DFPW='Cure heavy wounds',DFW='Cure light wounds',DPP='Amnesia',DSF='Confusion',DWSSSP='Delayed effect',DWWFWD='Poison',FFF='Paralysis',FPSFW='Summon troll',FSSDD='Fireball',P='Shield',PDWP='Remove enchantment',PSDD='Charm monster',PSDF='Charm person',PSFW='Summon ogre',PWPFSSSD='Finger of death',SD='Missile',SFW='Summon goblin',SPF='Antispell',SPFPSDW='Permanency',SSFP='Resist cold',SWD='Fear',WFP='Cause light wounds',WFPSFW='Summon giant',WPFD='Cause heavy wounds',WPP='Counterspell',WWFP='Resist heat',WWP='Protection from evil',WWS='Counterspell')
G=lambda l,r,L:{L[s]for s in L if l.endswith(s.upper())and all(r[~i]==s[~i].upper()or'a'>s[~i]for i in range(len(s)))}
B=dict(cw='Magic mirror',DSFFFc='Disease',DWFFd='Blindness',DWWFWc='Raise dead',PPws='Invisibility',PWPWWc='Haste',SPPc='Time stop',SWWc='Fire storm',WDDc='Lightning bolt',WSSc='Ice storm')
d='-'
def f(l,r):c=G(l,r,B)|G(r,l,B);return[c|{(x,y)for x in G(l,r,L)or d for y in G(r,l,L)or d}-{(d,d)*(len(c)>0)},'Surrender'][l[-1]==r[-1]=='P']

@FryAmTheEggman तय।
feersum

अहा,
उसको

2

जावा, 1565 1388

के साथ बुलाओ java M %leftString %rightString। आउटपुट Surrenderअगर खिलाड़ी आत्मसमर्पण करता है। अन्यथा इस रूप में स्ट्रिंग को आउटपुट करता है bothHandSpell;oneHandSpell,oneHandSpell;...। ध्यान दें, यह एक जटिल समस्या के लिए एक लाइनर समाधान है। :)

class M{String[]a="B,cDPW,cSWWS,DFFDD,DFPW,DFW,DPP,DSF,DWSSSP,DWWFWD,FFF,FPSFW,FSSDD,P,PDWP,PSDD,PSDF,PSFW,PWPFSSSD,SD,SFW,SPF,SPFPSDW,SSFP,SWD,WFP,WFPSFW,WPFD,WPP,WWFP,WWP,WWS,-".split(","),b="Stab,Dispel Magic,Summon elemental,Lightning bolt,Cure heavy wounds,Cure light wounds,Amnesia,Confusion,Delayed effect,Poison,Paralysis,Summon troll,Fireball,Shield,Remove enchantment,Charm monster,Charm person,Summon ogre,Finger of death,Missile,Summon goblin,Antispell,Permanency,Resist cold,Fear,Cause light wounds,Summon Giant,Cause heavy wounds,Counterspell,Resist heat,Protection from evil,Counterspell,-".split(","),c="cw,DSFFFc,DWFFd,DWWFWc,PPws,PWPWWc,SPPc,SWWc,WDDc,WSSc".split(",");public static void main(String[]a){System.out.println(new M().s(a[0],a[1]));}int e,f,g,h,i,j,k,l,m,n;String s(String o,String p){if(m(o,p,"p")>0)return"Surrender";String q="";f=e=0;for(;f<10;f++)q+=(m(o,p,c[f])|m(p,o,c[f]))>0?"Magic mirror,Disease,Blindness,Raise dead,Invisibility,Haste,Time stop,Fire storm,Lightning Bolt,Ice storm".split(",")[f*(e=1)]+";":"";for(f=0;f<33-e;f++)for(g=f<1?1:0,h=0;g<32-h&m(o,p,a[f])>0;)q+=m(p,o,a[++g*(e=1)])>0?b[f]+","+b[g*(h=1)]+";":"";return q;}int m(String o,String p,String r){k=n=0;if(r=="-")n=1;if((i=o.length())<(j=r.length()))return n;for(;k<j;)n|=((o.charAt(l=i-j+k)|32)!=((m=r.charAt(k++))|32)|((m|32)==m&(p.charAt(l)|32)!=(m|32)))?2:0;return n==2?0:1;}}

इंडेंट:

class M{

    String[]a="B,cDPW,cSWWS,DFFDD,DFPW,DFW,DPP,DSF,DWSSSP,DWWFWD,FFF,FPSFW,FSSDD,P,PDWP,PSDD,PSDF,PSFW,PWPFSSSD,SD,SFW,SPF,SPFPSDW,SSFP,SWD,WFP,WFPSFW,WPFD,WPP,WWFP,WWP,WWS,-".split(","),b="Stab,Dispel Magic,Summon elemental,Lightning bolt,Cure heavy wounds,Cure light wounds,Amnesia,Confusion,Delayed effect,Poison,Paralysis,Summon troll,Fireball,Shield,Remove enchantment,Charm monster,Charm person,Summon ogre,Finger of death,Missile,Summon goblin,Antispell,Permanency,Resist cold,Fear,Cause light wounds,Summon Giant,Cause heavy wounds,Counterspell,Resist heat,Protection from evil,Counterspell,-".split(","),c="cw,DSFFFc,DWFFd,DWWFWc,PPws,PWPWWc,SPPc,SWWc,WDDc,WSSc".split(",");

    public static void main(String[]a){
        System.out.println(new M().s(a[0],a[1]));
    }

    int e,f,g,h,i,j,k,l,m,n;

    String s(String o,String p){
        if(m(o,p,"p")>0)
            return"Surrender";
        String q="";
        f=e=0;
        for(;f<10;f++)
            q+=(m(o,p,c[f])|m(p,o,c[f]))>0?"Magic mirror,Disease,Blindness,Raise dead,Invisibility,Haste,Time stop,Fire storm,Lightning Bolt,Ice storm".split(",")[f*(e=1)]+";":"";
        for(f=0;f<33-e;f++)
            for(g=f<1?1:0,h=0;g<32-h&m(o,p,a[f])>0;)
                q+=m(p,o,a[++g*(e=1)])>0?b[f]+","+b[g*(h=1)]+";":"";
        return q;
    }

    int m(String o,String p,String r){
        k=n=0;
        if(r=="-")
            n=1;
        if((i=o.length())<(j=r.length()))
            return n;
        for(;k<j;)
            n|=((o.charAt(l=i-j+k)|32)!=((m=r.charAt(k++))|32)|((m|32)==m&(p.charAt(l)|32)!=(m|32)))?2:0;
        return n==2?0:1;
    }

}

संपादित करें: कम कोड वाले स्ट्रिंग सरणी बनाने के लिए पीटर के सुझाव का उपयोग किया।

इसे सुधारने के लिए किसी भी संकेत की सराहना की जाएगी।


यह सामान्य तकनीक आपको कुछ सौ वर्णों को बचाएगा।
पीटर टेलर

1

जावास्क्रिप्ट (ईएस 6), 1070 941

Base64 एन्कोडेड:

Zj0obCxyKT0+e3k9WyItIl0sRD1bXSxSPVtdLEw9W10sZD17fSxidG9hKGBK1pvQHQOKyl6XWZqCJzRwM9bRK6aaifV6V6Z6e1qXRxJZZLQxqCJzWaKuuivRzDQuKCG2eKeDVuiW3QMUUMPQK6t7WF5q/LXCi6d2zQMU9bQK6t7WWKCG3XCi6d2zQMVbQCad6yJrQM8/QKid+6yKifQKIXQOKx5qx7QKIUUVzQGWKd2d6yzQNYUV3QN6VrJ53V5995y3QNZJJI/RFqKx7V15p3QKZYVZzQ+iKyifQNZYVYPQ9qtqXFysis0FFF0Summon1troll0FPSFW0Fireball0FSSDD0Shield0P0Surrender0p0Remove1enchantment0PDWP0Invisibility0PPws0Charm1monster0PSDD0Charm1person0PSDF0Summon1ogre0PSFW0Finger1of1death0PWPFSSSD0Haste0PWPWWc0Missile0SD0Summon1goblin0SFW0Antispell0SPF0Permanency0SPFPSDW0Time1stop0SPPc0Resist1cold0SSFP0Fear0SWD0Fire1storm0SWWc0Lightning1bolt0WDCs0Cause1light1wounds0WFP0Summon1giant0WFPSFW0Cause1heavy1xcKLp3bNFjxQ9AqLp7Xq7KXpZdFjz9CHHtbLaK5tFkknNEXrIrLdYXmrdFlhT9D66LXnLYqJ9X66JtXr4pdFlj9AqLp7Xq7KXpZdFlkmApLnJlcGxhY2UoLzEvZywiICIpLnNwbGl0KDApLmV2ZXJ5KCh2LHgsYSk9PmRbeCUyfHxhW3grMV1dPXYpO2s9KGgsbyxHKT0+KG49ZFtzXSxxPWgubWF0Y2gocysiJCIsImkiKSkmJlsuLi5zXS5ldmVyeSgoYyxpKT0+ISh3PWMubWF0Y2goIlthLXpdIikpfHxoW2o9aStoLnNlYXJjaChxKV09PW9bal0pJiYodz9+fkQuaW5kZXhPZihuKT9EOltdOkcpLnB1c2gobik7Zm9yKHMgaW4gZCl7ayhsLHIsTCk7ayhyLGwsUik7aWYoRD09ZFsicCJdKXJldHVybiBEfVI9Ui0xP3k6UjtMPUwtMT95Okw7cmV0dXJuIEQtMXx8UiE9TD9MLnNvbWUocz0+Ui5zb21lKHQ9PiFELnB1c2goW3MsdF0pKSl8fEQ6RH0=

आप इसे eval(atob("Zj0obCxyK..."))फ़ायरफ़ॉक्स कंसोल में करके चलाते हैं ।

गोल्फ कोड (स्टैक एक्सचेंज द्वारा समर्थित वर्ण शामिल नहीं हो सकता है):

f=(l,r)=>{y=["-"],D=[],R=[],L=[],d={},btoa(`JÖÐÊ^Y'4p3ÖÑ+¦õzW¦z{ZGYd´1¨"sY¢®º+ÑÌ4.(!¶x§VèÝPÃÐ+«{X^jüµÂ§vÍõ´
êÞÖX Ýp¢éݳ@Å[@&ë"k@Ï?@¨û¬ô
!t+jÇ´
!EÍ)Ýë,Ð5ÝzV²yÝ^}÷·@ÖI$Ñ¢±í]y§t
eYÍ¢+(@ÖXUÐö«j\\¬Í]ºi¨[k¢Ytô[Ab­æÚ]I ÃÑ(bzWt?D®®·§uêô§D^ÞÕéÜ©íéíÐðÖ?B'¾+"n)b·-?4
«Y¨Ë^¯CÒ=ªæÖ«²ô= ÅÑ+¦õ¢
ÞÐô[Ab«Öõuæ­CÖ<TH=jË^ÐõYg42+,W´H=ºi¨X(nX§Ñ!VÐ   íÊ^]<]z¹éÜËDô[Dâíl¶tHóÜѬËur]Ñ$?A^j½X=·µ²Ú+DYÍm)àÕº%·E
ÍjëÖX Ýp¢éݳE?D®j'ÖÝô[@ºÇµæ¯Ë\\(ºwlÑcÅ@¨º{^®Ê^]<ýqíl¶æÑdsD^²+-Ö·Eý®^rبWë¢m^¾)tYcô
§µêì¥éeÑe`).replace(/1/g," ").split(0).every((v,x,a)=>d[x%2||a[x+1]]=v);k=(h,o,G)=>(n=d[s],q=h.match(s+"$","i"))&&[...s].every((c,i)=>!(w=c.match("[a-z]"))||h[j=i+h.search(q)]==o[j])&&(w?~~D.indexOf(n)?D:[]:G).push(n);for(s in d){k(l,r,L);k(r,l,R);if(D==d["p"])return D}R=R-1?y:R;L=L-1?y:L;return D-1||R!=L?L.some(s=>R.some(t=>!D.push([s,t])))||D:D}

चूंकि वर्तनी शब्दकोश में केवल अक्षर होते हैं, इसलिए हम इसे बेस 64-एन्कोडेड स्ट्रिंग के रूप में मान सकते हैं और विभाजकों और रिक्त स्थान के रूप में संख्याओं का उपयोग कर सकते हैं। मैंने बेस 64 जैसे स्ट्रिंग को बाइनरी स्ट्रिंग में "डीकोड" किया है, जो मूल का आकार 3/4 है।

सौम्य:

f=(l,r)=>{

// y - default array
// D,R,L - result arrays for Doublehanded, Right and Left
// d - dictionary mapping of spell combos to spell names
y=["-"],D=[],R=[],L=[],d={},

// split string on `0` and replace `1`s with spaces, to populate `d`
btoa(`<UGLY BINARY STRING>`).replace(/1/g," ").split(0).every((v,x,a)=>d[x%2||a[x+1]]=v);

// given a main hand, off hand, and result array to populate,
// decide if current combo `s` applies
k=(h,o,G)=>
    (n=d[s],q=h.match(s+"$","i")) // does `s` match the end of `h`, case insensitive?
    &&
    [...s].every((c,i)=>
        !(w=c.match("[a-z]")) ||     // is every letter of `s` not lowercase
        h[j=i+h.search(q)]==o[j]  // or (if lowercase), a match between the hands?
    )
    &&
    (w?                    // if the last letter so `s` was lowercase
        ~~D.indexOf(n)?    //   if D doesn't already have this spell
                       D   //      add it to D
                      :    //   else
                       []  //      add it to a throwaway array
      :G).push(n);         // else, add it to this hand's result array

for(s in d){
    k(l,r,L);    // test this spell against each hand
    k(r,l,R);
    if(D==d["p"]) return D  // if the doublehanded result is "Surrender"
                            // return immediately
}

R=R-1?y:R;   // replace empty arrays with ["-"]
L=L-1?y:L;   // (`[]-1` is -1, which is truthy, while ["foo"]-1 is `NaN`, falsy)

return D-1||R!=L         // if D is empty, or R and L not both empty, 
                ?        //   add all pairwise R/L combos to D and return D
                 L.some(s=>R.some(t=>!D.push([s,t])))
                                                     ||D
                :D      //    otherwise, just return D

}

एक गोल्फ जिसे मैं विशेष रूप से पसंद करता हूं उसके साथ खाली सरणियों के लिए परीक्षण कर रहा हूं array - 1

  • एक खाली सरणी एक सत्य मान उत्पन्न करेगी: [] - 1 => "" - 1 => 0 - 1 => -1 (truthy)
  • एक भरा सरणी एक गलत मूल्य का उत्पादन करेगा: ["foo"] - 1 => "foo" - 1 => NaN (falsey)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.