একটি কচ্ছপ একটি পোর্টাল সন্ধান করে


30

কচ্ছপ তার খাবারটি পেতে গ্রিড ধরে এগিয়ে যেতে চায়। তিনি জানতে চান যে সেখানে যাওয়ার জন্য তার কতটা পদক্ষেপ নিতে হবে।

পাশাপাশি ধীরে ধীরে তিনি তার ডোমেনের চারপাশে টেলিপোর্টার স্থাপন করেছেন যা এটি যদি তার পথটি সংক্ষিপ্ত করে তবে সে কাজে লাগাবে। অথবা যদি সে তার পথ দীর্ঘায়িত করে তবে এগুলি এড়িয়ে চলুন।

কচ্ছপের সাথে দেখা করুন

🐢

কচ্ছপ একটি গ্রিডে থাকে কচ্ছপটি কোনও

এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স🐢এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স
এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স🐢এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স

যাইহোক, কচ্ছপ একটি পর্বত

এক্স🌄এক্সএক্সএক্সএক্সএক্সএক্স🌄🐢এক্সএক্স🌄এক্সএক্স🌄এক্সএক্সএক্স

কচ্ছপ তার স্ট্রবেরি খেতে চায় এবং জানতে চায় যে তার স্ট্রবেরি থেকে এই উদাহরণটিতে কচ্ছপ লাগবে পালাক্রমে সৌভাগ্য যে, কচ্ছপ একটি টেলিপোর্টার খুঁজে! গ্রিডে দুটি টেলিপোর্ট রয়েছে যা একে অপরের কাছে মানচিত্র। টেলিপোর্টারটিতে পদক্ষেপ নেওয়া তাত্ক্ষণিকভাবে কচ্ছপটিকে সংশ্লিষ্ট টেলিপোর্টারটিতে স্থানান্তরিত করে। টেলিপোর্টাররা খুব অস্থির এবং একবার ব্যবহার করার পরে, তারা অদৃশ্য হয়ে যায় এবং আর ব্যবহারযোগ্য হয় না।

এক্স🌄🍓🐢🌄এক্সএক্স🌄এক্সএক্সএক্সএক্স
5
এক্স🌄🍓🌄🌄এক্সএক্স
🔵🌄🍓🐢🌄🔴এক্স🌄এক্সএক্সএক্সএক্স
কচ্ছপের পক্ষে দু'বার উপরে উঠে আসা এখন আরও দ্রুত। এখন কচ্ছপগুলির সংক্ষিপ্ততম পথটি2
🔵🌄🐢🌄🔴এক্স🌄এক্সএক্সএক্সএক্স

চ্যালেঞ্জ

একটি প্রাথমিক গ্রিড কনফিগারেশন আউটপুট দেওয়া হয়েছে যাতে এটি তার স্ট্রবেরিতে পৌঁছাতে কচ্ছপকে নিয়ে যাবে moves

বিধি

  • আপনি ধরে নিতে পারেন ইনপুট গ্রিডটির একটি সমাধান রয়েছে

  • প্রতিটি গ্রিডে কেবল একটি strawberryএবং দুটি portalsএবং একটি থাকবেturtle

  • ইনপুট গ্রিড যে কোনও সুবিধাজনক বিন্যাসে প্রবেশ করতে পারে

  • আপনার teleportersব্যবহার করা উচিত একক ব্যবহারের আইটেম

  • কচ্ছপটি যে teleporterস্কোয়ারের দিকে চলে যায় সে ইতিমধ্যে সংশ্লিষ্ট teleporter। সে কখনই কোনও দিকে যায় না teleporterএবং সেখানে চলাফেরার জন্য থাকে না

  • সবচেয়ে ছোট পথটির জন্য পোর্টালটি ব্যবহারের দরকার নেই

  • কচ্ছপ পাহাড়ের টাইলসে যেতে পারে না

  • আপনি প্রতিনিধিত্ব করেন কোনো হওয়া ASCII অক্ষর বা পূর্ণসংখ্যা ব্যবহার করতে পারেন mountains, turtle, empty grid square,strawberry

  • আপনি প্রতিনিধিত্ব করার পারেন একই অক্ষর বা দুটি ভিন্ন ASCII অক্ষর বা ইন্টিজার ব্যবহার করতে পারেন teleporterজোড়া

  • গ্রিডে একই সংক্ষিপ্ততম দৈর্ঘ্যের দৈর্ঘ্যের একাধিক পথ থাকতে পারে

  • এটি

বিধি সম্পর্কে স্পষ্টতা

  • আপনার 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
আমি মনে করি যে কোনও টেস্ট কেস যুক্ত করা ভাল ধারণা হবে যেখানে টেলিপোর্টারটি ব্যবহার করতে আরও বেশি সময় লাগবে।
ওকএক্স

@ ওকএক্স তৈরি এবং এখন যোগ করা।
আকোজি

সম্পাদিত, ধন্যবাদ
আকোজি

1
@ এক্সনর আমি অনুভব করি যে এটি আমার মূল নিয়ম থেকে বিমূর্ত হতে পারে। সুতরাং সম্ভবত এটি একটি ব্যবহার আইটেম পোর্টাল ভাল?
আকোজি

1
সম্পর্কিত (আমার মনে হয়)
চার্লি 10

উত্তর:


13

জাভাস্ক্রিপ্ট (ES7),  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)(এক্স,ওয়াই)

আমিআরসর্বনিম্ন(আর,আমি)

কচ্ছপের প্রারম্ভিক অবস্থানটি খুঁজতে এটি প্রথমে দিয়ে ডাকা হয় ।টি=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 বাইটস অক্ষর ব্যবহার করে সংখ্যায় ইনপুট পরিবর্তন করে কুইন্টেককে ধন্যবাদ জানায়।

- জোনাথন ফ্রেচ, এলপেড্রো এবং জোনাথন অ্যালানকে প্রচুর বাইট ধন্যবাদ thanks


2
আপনি সম্ভবত প্রতিটি অক্ষর একটি স্ট্রিং অক্ষরের পরিবর্তে একটি সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয় একটি তালিকা গ্রহণ করে কয়েক অক্ষর শেভ করতে পারেন।
কুইন্টেক

@ কুইন্টেক যোগ হয়েছে, ধন্যবাদ আমি দিকনির্দেশগুলির জন্য একই কাজ করতে চাই তবে ত্রিভুজগুলি আলাদাভাবে করতে হবে। এখনও তাদের সংখ্যায় সরিয়ে নেওয়া সম্ভব হতে পারে।
nedla2004

1
@ElPedro Ahha আমি বন্ধ 4 শেভ করতে ভালো
জনাথন অ্যালান


2
@ জোনাথান অ্যালান এবং এলপেড্রো এবং জোনাথন ফরাসি। আপনার সবার দুর্দান্ত টিপস এবং আমি যে কয়েকটি জিনিস নিয়ে এসেছি সেগুলির সাথে আমি সেগুলি যুক্ত করেছি। (অনেক বিলম্বের পরে)
নেডেলা ২০০৪

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.