एक कछुआ एक पोर्टल ढूँढता है


30

कछुआ अपने भोजन के लिए ग्रिड में जाना चाहता है। वह जानना चाहता है कि उसे वहां पहुंचने के लिए कितनी चालें चलनी होंगी।

साथ ही जब से वह धीमा है, उसके पास अपने डोमेन के आसपास टेलीपोर्टर्स सेट हैं जो वह उपयोग करेगा यदि यह उसका रास्ता छोटा करता है। या इससे बचें अगर यह उसके रास्ते को लंबा करता है।

कछुए से मिलो

🐢

एक ग्रिड पर कछुआ जीवन कछुआ किसी भी आसन्न वर्ग के लिए स्थानांतरित कर सकते हैं ...

एक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्स🐢एक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्स
एक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्स🐢एक्सएक्सएक्सएक्सएक्सएक्सएक्सएक्स

हालाँकि, कछुआ एक पर्वत के साथ एक पर्वत पर नहीं जा सकता है

एक्स🌄एक्सएक्सएक्सएक्सएक्सएक्स🌄🐢एक्सएक्स🌄एक्सएक्स🌄एक्सएक्सएक्स

कछुआ अपने स्ट्राबेरी को खाना चाहता है, और जानना चाहता है कि उसकी स्ट्राबेरी को शुरू करने में कितना समय लगेगा

एक्स🌄🍓🐢🌄एक्सएक्स🌄एक्सएक्सएक्सएक्स
यह उदाहरण कछुए को 5 मोड़
एक्स🌄🍓🌄🌄एक्सएक्स
सौभाग्य से, सौभाग्य से, कछुए को मिला एक टेलिफोनर! ग्रिड पर दो टेलीपोर्ट हैं जो एक-दूसरे को मैप करते हैं। टेलिपोर्टर पर कदम रखते ही कछुए को संबंधित टेलिफ़ोन पर ले जाता है। Teleporters बहुत अस्थिर हैं और एक बार उपयोग करने के बाद, वे गायब हो जाते हैं और अब उपयोग करने योग्य नहीं हैं।
🔵🌄🍓🐢🌄🔴एक्स🌄एक्सएक्सएक्सएक्स
अब कछुए के लिए दो बार ऊपर जाना आसान है। अब कछुए का सबसे छोटा रास्ता2
🔵🌄🐢🌄🔴एक्स🌄एक्सएक्सएक्सएक्स

चुनौती

एक प्रारंभिक ग्रिड कॉन्फ़िगरेशन आउटपुट को देखते हुए यह अपने स्ट्रॉबेरी तक पहुंचने के लिए कछुए को ले जाएगा।

नियम

  • आप मान सकते हैं कि इनपुट ग्रिड में एक समाधान है

  • प्रत्येक ग्रिड में केवल एक strawberryऔर दो portalsऔर एक होगाturtle

  • इनपुट ग्रिड को किसी भी सुविधाजनक प्रारूप में दर्ज किया जा सकता है

  • आप का teleportersउपयोग करना चाहिए एकल उपयोग आइटम हैं

  • वह मोड़ जो कछुआ एक teleporterवर्ग पर चलता है वह पहले से ही संगत है teleporter। वह कभी भी teleporterवहाँ नहीं जाता है और वहाँ एक चाल के लिए रहता है

  • सबसे छोटा रास्ता पोर्टल का उपयोग करने की आवश्यकता नहीं है

  • कछुआ पहाड़ी टाइलों में नहीं जा सकता

  • आप का प्रतिनिधित्व करने के लिए किसी भी ASCII वर्ण या पूर्णांक का उपयोग कर सकते mountains, turtle, empty grid square,strawberry

  • आप teleporterजोड़ों का प्रतिनिधित्व करने के लिए या तो एक ही चरित्र या दो अलग-अलग ASCII वर्ण या पूर्णांक का उपयोग कर सकते हैं

  • एक ग्रिड में एक ही छोटी पथ लंबाई के साथ एक से अधिक पथ हो सकते हैं

  • यह

नियमों का स्पष्टीकरण

  • आप का teleportersउपयोग करना चाहिए एकल उपयोग आइटम हैं।

रीज़निंग : यह बताया गया कि:

🐢एक्स🔵एक्स🍓🌄🌄🌄🌄🌄🔴एक्सएक्सएक्सएक्स

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

सूचियों के रूप में परीक्षण मामले प्रारूपित किए गए

[ ['T', 'X', 'X', 'S', 'X'], ['X', 'X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X', 'X'] ] --> 3
[ ['T', 'M', 'X', 'S', 'X'], ['X', 'M', 'X', 'X', 'X'], ['O', 'X', 'X', 'X', 'O'] ] --> 4
[ ['T', 'M', 'X', 'S', 'O'], ['O', 'M', 'X', 'X', 'X'], ['X', 'X', 'X', 'X', 'X'] ] --> 2
[ ['T', 'M', 'X', 'S', 'X'], ['O', 'M', 'X', 'X', 'X'], ['O', 'X', 'X', 'X', 'X'] ] --> 4
[ ['T', 'M', 'S', 'X', 'O'], ['X', 'M', 'M', 'M', 'M'], ['X', 'X', 'X', 'X', 'O'] ] --> 7
[ ['T', 'X', 'X', 'S', 'X'], ['O', 'M', 'M', 'M', 'X'], ['X', 'X', 'O', 'X', 'X'] ] --> 3

इंसानों के लिए टेस्ट केस फॉर्मेट किए गए

T X X S X
X X X X X
X X X X X --> 3

T M X S X
X M X X X
O X X X O --> 4

T M X S O
O M X X X
X X X X X --> 2

T M X S X
O M X X X
O X X X X --> 4

T M S X O
X M M M M
X X X X O --> 7

T X X S X
O M M M X
X X O X X --> 3

क्रेडिट

डिजाइन और संरचना के माध्यम से: अरनल्ड द्वारा भूखे माउस

प्रस्तावित चुनौतियां संपादित करें सलाह: कामिल-दकरी , बीफ़स्टर

सामान्य संपादन सलाह: okx nedla2004 mbomb007


2
मुझे लगता है कि एक परीक्षण मामले को जोड़ना एक अच्छा विचार होगा जहां टेलीपोर्टर का उपयोग करने में अधिक समय लगेगा।
ओकेएक्स

@Okx अभी बनाना और जोड़ना।
एकोजी

संपादित, धन्यवाद।
एकोजी

1
@ xnor मुझे लगता है कि यह मेरे मूल नियमों से अलग हो सकता है। तो शायद किसी एक उपयोग की वस्तु को पोर्ट करना बेहतर है?
एकोजी

1
संबंधित (मुझे लगता है)।
चार्ली

जवाबों:


13

जावास्क्रिप्ट (ईएस 7),  140 139  138 बाइट्स

निम्नलिखित मैपिंग के साथ पूर्णांकों के मैट्रिक्स के रूप में इनपुट लेता है:

  • -1
  • 0एक्स
  • 1
  • 2
  • 3
m=>(R=g=(t,X,Y,i)=>m.map((r,y)=>r.map((v,x)=>r[(u=0,t?v-t:(x-X)**2+(y-Y)**2<3?v-3?~v?v:u--:R=R<i?R:i:1)||g(u,x,y,u-~i,r[x]=1),x]=v)))(2)|R

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

कैसे?

जीटीटी0(एक्स,y)(एक्स,Y)

मैंआरमिनट(आर,मैं)

कछुए की शुरुआती स्थिति का पता लगाने के लिए इसे पहले साथ बुलाया जाता है ।टी=2

एक पोर्टल तक पहुंचने पर यह साथ खुद को कॉल करता है, ताकि कछुए को दूसरे पोर्टल पर टेलीपोर्ट किया जा सके। हम नहीं बढ़ाते इस तरह के एक यात्रा के दौरान।टी=-1मैं

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

टिप्पणी की गई

m => (                        // m[] = input matrix
  R =                         // initialize R to a non-numeric value
  g = (t, X, Y, i) =>         // g = recursive search function taking t = expected tile,
                              //     (X, Y) = current coordinates, i = path length
    m.map((r, y) =>           // for each row r[] at position y in m[]:
      r.map((v, x) =>         //   for each tile v at position x in r[]:
        r[                    //     this statement will eventually restore r[x] to v
          ( u = 0,            //     u = next tile to look for, or 0 if none
            t ?               //     if we're looking for a specific tile:
              v - t           //       test whether we've found it
            :                 //     else:
              (x - X) ** 2 +  //       compute the squared Euclidean distance between
              (y - Y) ** 2    //       (x, y) and (X, Y)
              < 3 ?           //       if it's less than 3 (i.e. reachable from (X, Y)):
                v - 3 ?       //         if v is not equal to 3:
                  ~v ?        //           if v is not equal to -1:
                    v         //             test if v = 0
                  :           //           else (v = -1):
                    u--       //             set u = -1 to find the other portal
                :             //         else (v = 3):
                  R = R < i ? //           we've found the strawberry: set R = min(R, i)
                      R : i   //
              :               //       else (this tile can't be reached):
                1             //         yield 1
          ) ||                //     if the above result is falsy:
          g(                  //       do a recursive call:
            u,                //         t = u
            x, y,             //         move to (x, y)
            u - ~i,           //         unless u is set to -1, increment i
            r[x] = 1          //         set this tile to a mountain
          ),                  //       end of recursive call
          x                   //     restore r[x] ...
        ] = v                 //     ... to v
    ))                        // end of both map() loops
)(2) | R                      // initial call to g with t = 2; return R

1
"प्रत्येक दौरा किया टाइल अस्थायी रूप से एक पहाड़ पर दो बार एक ही टाइल पर चलने से रोकने के लिए पहाड़ पर सेट है" क्या एक सुंदर चाल है। महान उत्तर, और हमेशा की तरह मैं स्पष्टीकरण के साथ उत्तर की सराहना करता हूं :)
akozi

5

पायथन 2 , 441 431 341 बाइट्स

from itertools import*
G=input()
W=len(G[0])
H=len(G)
A=[0]*5
E=enumerate
for y,r in E(G):
 for x,C in E(r):A[C]=[x,y]
for L in count():
 for M in product(*[zip('UDLR'*2,'LRDU    ')]*L):
  x,y=A[0]
  for m in M:
    x+='R'in m;x-='L'in m;y+='D'in m;y-='U'in m
    if(x,y)==A[3]:x,y=A[2]
    if 1-(W>x>-1<y<H)or G[y][x]>3:break
  if[x,y]==A[1]:exit(L)

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

सूचियों के रूप में इनपुट, लेकिन वर्णों के बजाय संख्याओं का उपयोग करना (क्विंटेक के लिए धन्यवाद) और दूरदर्शी के गंतव्य के लिए एक अलग मूल्य। यदि स्टैक एक्सचेंज उन्हें हटा देता है तो उन बड़े इंडेंटेशन में टैब वर्ण होना चाहिए। किसी भी सुझाव या विचारों का स्वागत करते हैं, विशेष रूप से, के रूप में मुझे लगता है कि यह हो सकता है कि ज्यादा कुछ कम।

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

Challenge | My program
T         | 0
S         | 1
E         | 2
O         | 3
M         | 4
X         | -1

-10 बाइट्स वर्णों का उपयोग करके संख्याओं में इनपुट बदलकर क्विंट को धन्यवाद।

-जॉनथन फ्रेच, एलपेड्रो और जोनाथन एलन के लिए बहुत सारे बाइट्स धन्यवाद।


2
आप संभवतः कुछ वर्णों को एक सूची में ले जाकर बंद कर सकते हैं जहाँ प्रत्येक वस्तु को एक स्ट्रिंग वर्ण के बजाय एक संख्या द्वारा दर्शाया जाता है।
क्विंटेक

@ क्विंट जोड़ा गया, धन्यवाद। मैं दिशाओं के लिए ऐसा ही करना चाहूंगा, लेकिन फिर विकर्णों को अलग से करना होगा। हालांकि अभी भी उन्हें संख्याओं में ले जाना संभव हो सकता है।
nedla2004

1
@ElPedro अहहा मैं इस तरह
जोनाथन एलन


2
@ जोनाथनअलन और एलपेड्रो और जोनाथन फ्रेंच। आप सभी के महान सुझाव, और मैंने उन्हें उन दो चीजों के साथ जोड़ा है जिनके साथ मैं आया था। (बहुत देरी के बाद)
nedla2004

2

पायथन 2 , 391 397 403 422 बाइट्स

M=input()
from networkx import*
a=b=c=d=0
N,h,w,S=[-1,0,1],len(M),len(M[0]),[]
for i in range(h):
 for j in range(w):
  I,m=(i,j),M[i][j]
  if m>7:c,d=a,b;a,b=I
  if m<0:Z=I
  if m==5:F=I
  S+=[I+I]
S+=[(a,b,c,d),(c,d,a,b)]
print len(shortest_path(from_edgelist([((A+p,B+q),(C,D))for A,B,C,D in S for p,q in[(p,q)for p in N for q in N]if-1<A+p<h and-1<B+q<w and M[C][D]*M[A+p][B+q]]),Z,F))-1

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

इस समस्या का एक ग्राफ में अनुवाद किया गया है और इसका हल यह है कि कछुए को स्ट्रॉबेरी का सबसे छोटा रास्ता बनाया जाए।

Challenge | This code
T         | -1
S         |  5
O         |  8
M         |  0
X         |  1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.