मेरे Nullifiers का अनुकूलन करें


12

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

खेल में, आपका उद्देश्य उन अशक्त लोगों को नष्ट करना है जो क्रीपर स्पॉनिंग कर रहे हैं, एक अशक्त के रूप में जाना जाता है।

अशक्त इस त्रिज्या में किसी भी उत्सर्जक को नष्ट कर सकते हैं:

 eee
eeeee
eenee
eeeee
 eee

प्रत्येक अशक्त एकाधिक उत्सर्जकों को लक्षित कर सकता है।

आपका उद्देश्य

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

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

त्वरित नियम:

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

उदाहरण

इनपुट:

[[ , ,e, , ],
 [ , , , , ],
 [e, , , ,e],
 [ , , , , ],
 [ , ,e, , ]]

आउटपुट:

 [[ , ,e, , ],
  [ , , , , ],
  [e, ,n, ,e],
  [ , , , , ],
  [ , ,e, , ]]

इनपुट:

[[e,e,e,e,e],
 [e, , , ,e],
 [e, , , ,e],
 [e, , , ,e],
 [e,e,e,e,e]]

आउटपुट:

[[e,e,e,e,e],
 [e, ,n, ,e],
 [e, , , ,e],
 [e, ,n, ,e],
 [e,e,e,e,e]]

इनपुट:

[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
 [ , ,e, , ,e, , , ,e,e, , , , ,e, , , , ],
 [ , ,e, , , ,e, ,e, ,e, ,e, ,e, ,e, , , ],
 [e, , , ,e, ,e, , , , , , , , , , , ,e, ],
 [e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
 [ , , ,e, ,e, ,e, , , , , , , , , ,e, , ],
 [ ,e,e, ,e, , , ,e, ,e,e, ,e, ,e, ,e, , ],
 [ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
 [ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
 [e, , , , , , ,e, , , ,e,e, ,e, , , , , ],
 [ ,e,e, , ,e, , , , ,e, , , , , , ,e, , ],
 [ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
 [e,e, , , , ,e, , , ,e, , , , , , , , , ],
 [ , , ,e, , , , , ,e, , ,e, ,e, ,e, ,e, ],
 [ , , , ,e, ,e, , , , , , , , , , , , , ],
 [e,e, , ,e,e, , ,e, , ,e, ,e, ,e, ,e, ,e],
 [e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
 [ , , , ,e, , , , , ,e, , , ,e, , , , , ],
 [ , ,e, , , ,e, ,e, , , ,e, , , , ,e, , ],
 [ , , ,e, ,e, ,e, , ,e,e, , ,e,e, , ,e, ]]

आउटपुट (यह आउटपुट हाथ से बनाया गया है, और यह इष्टतम आउटपुट नहीं हो सकता है):

[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
 [ , ,e, , ,e, , ,n,e,e, , , ,n,e, , , , ],
 [ ,n,e, , ,n,e, ,e, ,e, ,e, ,e, ,e, ,n, ],
 [e, , , ,e, ,e, , , , , , , , , , , ,e, ],
 [e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
 [ , ,n,e, ,e, ,e, , , ,n, , , , , ,e, , ],
 [ ,e,e, ,e, ,n, ,e, ,e,e, ,e, ,e,n,e, , ],
 [ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
 [ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
 [e, ,n, , , , ,e, , , ,e,e, ,e, , , , , ],
 [ ,e,e, , ,e,n, , ,n,e, , , ,n, , ,e,e, ],
 [ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
 [e,e, , , , ,e, , , ,e, , , , , , , , , ],
 [ , , ,e, ,n, , , ,e, , ,e, ,e, ,e, ,e, ],
 [ ,n, , ,e, ,e, , , , , , , ,n, , , ,n, ],
 [e,e, , ,e,e, , ,e,n, ,e, ,e, ,e, ,e, ,e],
 [e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
 [ , , , ,e, , , , , ,e, ,n, ,e, , ,n, , ],
 [ , ,e, ,n, ,e, ,e, , , ,e, ,n, , ,e, , ],
 [ , , ,e, ,e, ,e, ,n,e,e, , ,e,e, , ,e, ]]

इनपुट:

[[e,e],
 [e,e]]

आउटपुट:

null

मैं उपयोग कर सकते हैं 0, 1और 2या इसी तरह की?
user202729

@ user202729 हाँ, जब तक आप निर्दिष्ट करते हैं कि क्या है, और इसे लगातार बनाए रखें, IE यदि एक एमिटर इनपुट में 1 है, तो इसी तरह यह आउटपुट में 1 होना चाहिए
ट्रॉल्स एमबी जेनसन

1
मुझे क्रीपर वर्ल्ड बहुत पसंद था, यह हमेशा के लिए संतोषजनक था कि आखिरकार क्रीपर के अंतिम निशान को मिटा दिया जाए
Jo King

1
@ edc65 रन - टाइम की परवाह किए बिना कोड-गोल्फ का पूरा बिंदु कोड आकार को कम करना है।
user202729

2
मैं भी दुनिया से प्यार करता हूँ!
orlp

जवाबों:


4

पायथन 3 , 558 511 509 बाइट्स

from itertools import*
E=enumerate
L=len
def s(s):
 q=[(x,y)for y,r in E(s)for x,k in E(r)if k==w]
 for i in range(1,L(q)):
  for c in combinations(q,i):
   m=[l*1for l in s]
   for p in c:
    m[p[1]][p[0]]=n
    for y,r in E([list(r) for r in' xxx ,xxxxx,xxnxx,xxxxx, xxx '.split(',')]):
     for x,k in E(r):
      o=(p[0]-x+2,p[1]-y+2)
      if k==d and-1<o[0]<L(m[0])and-1<o[1]<L(m)and m[o[1]][o[0]]==e:
       m[p[1]-y+2][p[0]-x+2]=d
   if e not in ','.join([''.join(r)for r in m]):return(m)
print(s(m))

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

यह बहुत लूपिंग है, लेकिन मैं इसे आगे ऑप्टिमाइज़ करने के लिए पायथन के बारे में पर्याप्त नहीं जानता। मैंने ओवस के जवाब से कुछ चीजें सीखीं, इसलिए यह मजेदार था।

इनपुट ( परीक्षण मामलों को लिखने में आसान बनाने के लिए संशोधित ) '' या 'ई' की अपेक्षा करता है, जबकि आउटपुट nullifier के लिए '', 'n' और nullified emitter के लिए 'x' का उपयोग करता है। फ़ंक्शन अपेक्षित इनपुट लेता है जिसे प्रश्न में वर्णित किया गया था।

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

मजेदार सवाल, ओपी! लता विश्व महान है और यह सवाल के लिए एक अच्छी प्रेरणा थी :)

संपादित करें: -47 बाइट्स आउट्रिकोलर का धन्यवाद


8
क्षमा करें, लेकिन ऐसा लगता है कि यह एक गंभीर रूप से प्रतिस्पर्धा वाली प्रविष्टि नहीं है। जब तक आपके पास इसे अनुकूलित करने का समय न हो, मैं इसे हटाने की सलाह देता हूं।
एरिक आउटगोल्फ

2
उफ़, मेरी बुर! मेरी क्षमता का सबसे अच्छा
संपादन

1
आपको वास्तव में इंडेंटेशन के प्रत्येक स्तर के लिए 2 रिक्त स्थान की आवश्यकता नहीं है, 1 पर्याप्त है।
आउटगोल्फ

3

पायथन 2 , 267 263 बाइट्स

from itertools import*
m=input()
E=enumerate
e=[(x,y)for y,a in E(m)for x,e in E(a)if e]
for n in count():
 for p in combinations(e,n):
	k=[l*1for l in m]
	for x,y in p:k[y][x]=2
	all(e+any(8>(y-Y)**2+(x-X)**2for X,Y in p)for y,a in E(m)for x,e in E(a))>0>exit(k)

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

0emitter के लिए, 2nullifier के लिए और 1खाली जगह के लिए।


1

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 173 168 बाइट्स

t=ToExpression@$ScriptInputString
P=Position
p=t~P~0
q=t~P~2
Print@ReplacePart[t,Thread[p->LinearProgramming[1&/@p,(xBoole[Norm[x-#]^2<6]&/@p)/@q,1&/@q,0,Integers]]]

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

1 सेकंड में सबसे बड़ा परीक्षण मामला हल करता है ।

पूरा कार्यक्रम। एक फ़ंक्शन के रूप में, यह छोटा है, केवल 130 बाइट्स

के 0लिए  , के 1लिए nऔर के 2लिए उपयोग करें e

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

वहाँ कोई समाधान कर रहे हैं यदि यह त्रुटि संदेश प्रिंट होगा lpdimकी तरह इस , या lpsnfकी तरह इस

संस्करण Outer(हालांकि अधिक पढ़ने योग्य) 2 बाइट्स लंबा है, इसके संक्षिप्त नाम के बावजूद Outer: इसे ऑनलाइन आज़माएं!


स्पष्टीकरण।

ध्यान दें कि यह एक पूर्णांक रैखिक प्रोग्रामिंग समस्या को कम किया जा सकता है।

प्रत्येक eसेल 2 पर तय की जाती है, प्रत्येक खाली सेल एक पूर्णांक चर है, जो या तो 0(खाली) या 1(अशक्त) हो सकता है। चर के निर्देशांक की सूची को चर में संग्रहीत किया जाता है p। (इसमें Positions tहै 0)

इसका उद्देश्य उपयोग किए गए अशक्त की संख्या को कम करना है, इसलिए उन पूर्णांक चर का योग कम से कम किया जाना चाहिए। ( 1&/@p, एक वेक्टर सभी के होते हैं 1और लंबाई के बराबर लंबाई के साथ p, उद्देश्य फ़ंक्शन को इंगित करता है)

2q6

यह मैट्रिक्स के साथ तैयार किया गया है m= (xBoole[Norm[x-#]^2<6]&/@p)/@q(प्रत्येक तत्व के लिए q, तत्वों के साथ एक पंक्ति बनाएं 1यदि चौकोर दूरी ( Norm) से संबंधित समन्वय के लिए दूरी pकम है 6) और वेक्टर b= 1&/@q

उसके बाद ReplacePartऔर Threadचर मूल्यों को "लागू" करता है tऔर इसे प्रिंट करता है।


Echoके बजाय इस्तेमाल किया जा सकता है, Printलेकिन उत्पादन में एक पूर्ववर्ती है >>
user202729

दुर्भाग्य से 1^p(के बजाय 1&/@p) काम नहीं करता है ।
user202729
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.