मेरे अवोकाडोस को रस देने में मेरी मदद करें


14

इस चुनौती में, मेरे पास एवोकाडोस का एक क्षेत्र है जिसे मैं जल्द से जल्द और पूरी तरह से रस करना चाहता हूं। क्या आप सभी अवोकाडो को पूरी तरह से रस देने के लिए मुझे काम करने में मदद करने के लिए एक कार्यक्रम या फ़ंक्शन लिख सकते हैं?

इनपुट के रूप में, आपको एवोकाडोस एक mएक्स mस्क्वायर ग्रिड के रूप में मिलेगा , जहां m3 और 6 के बीच पूर्णांक है। प्रत्येक वर्ग में बिल्कुल एक एवोकैडो होता है। एवोकैडो के रस के कई चरण हैं:

चरण 1: एवोकैडो का रस बिल्कुल नहीं लिया गया है।
स्टेज 2: एवोकैडो को आंशिक रूप से रस दिया गया है।
चरण 3: एवोकैडो को पूरी तरह से रस दिया गया है।
स्टेज 4: ओवर-जूसिंग के कारण एवोकैडो फट गया है।

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

यहाँ एवोकाडोस की एक ग्रिड का एक उदाहरण है। इन उदाहरणों में, मैंने 0,0नीचे-बाएं कोने के लिए समन्वय का उपयोग किया है , और 2,2शीर्ष-दाएं कोने के लिए समन्वय का उपयोग किया है, हालांकि आप अपनी भाषा के अनुरूप समन्वय प्रणाली को समायोजित कर सकते हैं।

112
221
231

लक्ष्य सभी एवोकाडो को पूरी तरह से जूस (यानी स्टेज 3) बनाना है। इसे प्राप्त करने के लिए आपके पास अपने कब्जे में तीन अलग-अलग जूसिंग उपकरण हैं। प्रत्येक जूसिंग टूल का प्रभाव का एक अलग क्षेत्र होता है, लेकिन वे सभी प्रभावित एवोकैडो के रस को 1 से बढ़ा देते हैं।

यहां आपके पास अपने निपटान में सभी उपकरण हैं। आप उपकरण के पहले अक्षर को निर्दिष्ट करके जूसर का उपयोग करते हैं, फिर निर्देशांक जिन्हें आप रस करना चाहते हैं। उदाहरण के लिए, स्क्वायर पर स्लीकर का उपयोग करने के लिए 5,2, आप आउटपुट करेंगे S 5,2

स्लीकर : जूस लक्ष्य का समन्वय करता है और एवोकैडो दोनों तरफ।

112     112     112
221 --> XXX --> 332
231     231     231

ग्रेटर : जूस लक्ष्य को समन्वयित करता है और एवोकैडो ऊपर और नीचे।

112     1X2     122
221 --> 2X1 --> 231 --> kaboom!
231     2X1     241

रॉकेट लॉन्चर : जूस लक्ष्य का समन्वय करता है और सभी आसन्न एवोकैडो।

112     1X2     122
221 --> XXX --> 332
221     2X1     231

नमूना इनपुट और आउटपुट

323
212
323

G 1,1
S 1,1

3312
3121
1213
2133

R 0,0
R 1,1
R 2,2
R 3,3

22322
22222
22222
33233
33333

G 0,3
G 1,3
G 2,2
G 3,3
G 4,3

222332
333221
222332
333222
222333
333222

S 1,5
S 1,3
S 1,1
S 4,5
S 4,3
S 4,1
G 5,4

आप स्पष्ट रूप से यह नहीं कहते हैं, लेकिन क्या समाधान निश्चित रूप से सबसे कम चालें लेना है?
FryAmTheEggman

1
इसने सैंडबॉक्स से कुछ रचनात्मक टिप्पणियों को अनदेखा किया है। यहाँ एक है: मुझे लगता है कि आपको लचीले ढंग से उपयोगकर्ता को अपनी समन्वय प्रणाली चुनने की अनुमति देनी चाहिए (जैसे, जहां मूल है, 0-अनुक्रमित या 1-अनुक्रमित)।
ग्रेग मार्टिन

3
@Pavel धन्यवाद पोस्ट या सवाल के रूप में पोस्ट न करने के लिए बहुत बहुत।
NoOneIsHere

1
मैंने इस प्रश्न को देखा, और मैं स्पैम के रूप में वीटीसी, और ध्वज को डाउनवोट करने के लिए तैयार था। इसके बजाय, +1।
NoOneIsHere

1
@ फावेल मैं शीर्षक बनाने के लिए इतना ललचा गया था ...
absinthe

जवाबों:


1

गणितज्ञ - 350 बाइट्स

नहीं एक बहुत ही कम समाधान है, लेकिन सब पर कोई समाधान से बेहतर है, है ना?

t[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}];""<>Cases[StringReplace[(First@Solve[(Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}]/.(G|S|R)[___,0|n+1,___]->0)==3-#&&And@@t[#[i,j]>=0&],t[#[i,j]&],Integers])/.{(x_->m_):>ToString[m x]},{"["->" ","]"->"\n",", "->","}],Except@"0"]&

अधिक पठनीय संस्करण (अतिरिक्त स्थान और इंडेंट और सामान के साथ):

t[x_] := Flatten@Table[x /@ {G, S, R}, {i, n}, {j, n}]; 
"" <> Cases[
   StringReplace[(First@
       Solve[(Table[
             G[i, j] + G[i - 1, j] + G[i + 1, j] + S[i, j] + 
              S[i, j - 1] + S[i, j + 1] + R[i, j] + R[i - 1, j] + 
              R[i + 1, j] + R[i, j - 1] + R[i, j + 1], {i, 
              n = Length@#}, {j, n}] /. (G | S | R)[___, 
              0 | n + 1, ___] -> 0) == 3 - # && 
         And @@ t[#[i, j] >= 0 &], t[#[i, j] &], 
        Integers]) /. {(x_ -> m_) :> ToString[m x]}, {"[" -> " ", 
     "]" -> "\n", ", " -> ","}], Except@"0"] &

इनपुट एक सरणी (जैसे {{3,2,3},{2,2,2},{3,2,3}}) है, आउटपुट एक स्ट्रिंग है (एक अनुगामी न्यूलाइन के साथ - यदि यह अस्वीकार्य है, तो StringDrop[...,-1]अतिरिक्त 15 बाइट्स के लिए फ़ंक्शन को संलग्न करें )। मैंने समन्वय प्रणाली का उपयोग किया है जो कहता है (1,1) शीर्ष-बाएँ कोने है, (n, n) नीचे दाईं ओर (जहाँ n मैट्रिक्स का आयाम है)। कभी-कभी, यदि समाधान को कई बार एक ही ऑपरेशन करने की आवश्यकता होती है, तो आउटपुट में चीजें शामिल होती हैं 3 G 2,2( जैसे "ग्रेटर एट (2,2) तीन बार उपयोग करें") - चूंकि आपने यह नहीं बताया कि इस मामले में क्या करना है, मुझे आशा है कि ठीक है।

स्पष्टीकरण:

  • Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}]प्रत्येक स्थान पर चर [G, i] के साथ एक सरणी बनाता है, जो कि (i, j) पर grater का उपयोग करके प्रभावित होता है, और इसी तरह S [i, j] और R [i, j] के लिए होता है। ये चर उस स्थिति में उपकरण का उपयोग करने की संख्या का प्रतिनिधित्व करते हैं।
  • .../.(G|S|R)[___,0|n+1,___]->0 एवोकैडो क्षेत्र के बाहर की स्थिति में उपकरणों का उपयोग करने के प्रभावों को हटाता है।
  • ...==3-# इसकी तुलना इनपुट और पूरी तरह से रस वाले एवोकैडो के क्षेत्र के बीच अंतर से की जाती है।
  • ...&&And@@t[#[i,j]>=0&]कहते हैं कि चर जी [i, j], S [i, j], R [i, j] को गैर-ऋणात्मक होना चाहिए (आप एवोकैडो को अन-जूस नहीं कर सकते!), आशुलिपि का उपयोग करते हुए t[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}]
  • First@Solve[...,t[#[i,j]&],Integers] चर [G, i], S [i, j], R [i, j] के संदर्भ में हमारे समीकरणों का पहला पूर्णांक समाधान खोजता है।
  • /.{(x_->m_):>ToString[m x]} चर को छुपाता है जो शून्य के बराबर होता है, जबकि समाधान को एक अच्छे स्ट्रिंग रूप में भी रखता है।
  • StringReplace[...,{"["->" ","]"->"\n",", "->","}]तार "2 G[1, 4]"को तार की तरह बदल देता है "2 G 1,4", और अंत में एक नई रेखा जोड़ता है।
  • ""<>Cases[...,Except@"0"]सभी बचे हुए "0"एस को हटा देता है और सभी तारों को एक साथ जोड़ देता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.