পথ এবং সময় নষ্ট করার সময়


22

প্রতিজ্ঞা

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

সবিস্তার বিবরণী

আপনাকে একটি তালিকা দেওয়া হবে, এই অঞ্চলের মানচিত্র, যা অন্তর্ভুক্ত থাকবে " "অথবা "#", যা মুক্ত স্থান এবং কোনও ধরণের বাধা উপস্থাপন করে। ফ্রি স্পেস কেবল একবার অতিক্রম করা যায় এবং এটি অতিক্রম করতে 1 মিনিট সময় লাগে। আপনার প্রারম্ভিক অবস্থানটি "@"প্রতি প্রতি রুলুয়ালাইক traditionতিহ্য দ্বারা স্বাক্ষরিত হবে এবং লক্ষ্যটি একটির সাথে উপস্থাপিত হবে "$"কারণ এটিই আপনি হারাতে যাচ্ছেন। আপনাকে একটি পূর্ণসংখ্যাও দেওয়া হবে যা প্রতিনিধিত্ব করবে যে আপনাকে অনুপ্রবেশ করছে বলে মনে না করার আগে আপনাকে কত মিনিট নষ্ট করতে হবে। আপনি যখন অবতরণ"$", এটি সঠিক পরিমাণ মিনিট থাকতে হবে (সুতরাং আপনি যদি গণনা করছেন, এটি সংলগ্ন টাইলের উপর 1 এবং টাইলের উপরে 0 হতে হবে)। গন্তব্যে পৌঁছানো সর্বদা সম্ভব হবে। আপনার প্রোগ্রাম বা ফাংশনটি চারটি সম্ভাব্য দিকনির্দেশনা উপস্থাপন করতে <,>, ^, এবং v এর সাথে সংক্ষিপ্ততম পথ দেখানো একটি তালিকা ফিরে আসতে হবে।

উদাহরণ

ইনপুট:

[[" ", " ", " ", " "],
 ["@", " ", " ", "$"],
 [" ", " ", " ", " "],
 [" ", " ", " ", " "]]

এবং

5

Ouput:

[[">", ">", ">", "v"],
 ["^", " ", " ", "$"],
 [" ", " ", " ", " "],
 [" ", " ", " ", " "]]

ইনপুট:

[[" ", "#", " ", " ", " "],
 [" ", "#", " ", " ", " "],
 ["@", "#", " ", "$", " "],
 [" ", " ", " ", " ", " "],
 [" ", "#", " ", " ", " "],
 [" ", "#", " ", " ", " "]]

এবং

7

আউটপুট:

[[" ", "#", " ", " ", " "],
 [" ", "#", ">", "v", " "],
 ["v", "#", "^", "$", " "],
 [">", ">", "^", " ", " "],
 [" ", "#", " ", " ", " "],
 [" ", "#", " ", " ", " "]]

ইনপুট:

[[" ", "#", " ", " ", " "],
 [" ", "#", " ", " ", " "],
 ["@", "#", " ", "$", " "],
 [" ", " ", " ", " ", " "],
 [" ", "#", " ", " ", " "],
 [" ", "#", " ", " ", " "]]

এবং

17

আউটপুট:

[[" ", "#", " ", "v", "<"],
 [" ", "#", " ", "v", "^"],
 ["v", "#", " ", "$", "^"],
 [">", ">", "v", ">", "^"],
 [" ", "#", "v", "^", "<"],
 [" ", "#", ">", ">", "^"]]

বিধি

  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য
  • প্রতিটি টাইল শুধুমাত্র একবারে সরানো উচিত
  • সঠিক পরিমাণ সময় বোর্ডে ব্যয় করতে হবে
  • একাধিক পাথের ক্ষেত্রে কেবল একটি পাথ প্রদর্শিত হওয়া দরকার
  • এটি একটি কোড গল্ফিং প্রশ্ন তাই সংক্ষিপ্ত উত্তর জেতে
  • মন্তব্যগুলিতে ব্যবহারকারী 202729 এর প্রশ্ন অনুসারে আপনি বৈধ ইনপুট ধরে নিতে পারেন।

আরও স্পষ্টতা প্রয়োজন হলে একটি মন্তব্য যুক্ত করুন


1
এটি কি গ্যারান্টিযুক্ত যে " নির্দিষ্ট সময়ে গন্তব্যে পৌঁছানো সর্বদা সম্ভব হবে "?
ব্যবহারকারী 202729

হ্যাঁ, এটি হবে, সবসময় একটি উপায় থাকবে, এমনকি যদি
বিঘ্নিতও হয়

5
পিপিসিজিতে আপনাকে স্বাগতম! :) প্রথম প্রথম চ্যালেঞ্জ।
জিউসেপে

প্রতিটি প্রান্তে অর্ধ মিনিটের কী হয়েছিল ?! (এটি সুস্পষ্ট না হলে কোনও কিছু পরিবর্তন করার দরকার নেই)
জোনাথন অ্যালান

উত্তর:


6

জাভাস্ক্রিপ্ট (ES6), 171 বাইট

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (a)(n)। ইনপুট ম্যাট্রিক্স পরিবর্তন করে আউটপুট

a=>g=(n,y=a[F='findIndex'](r=>~(i=r[F](v=>v>'?'))),x=i,R=a[y])=>!n--|[-1,0,1,2].every(d=>(R[x]='<^>v'[d+1],(c=(a[Y=y+~-d%2]||0)[X=x+d%2])<1?g(n,Y,X):n|c!='$')&&(R[x]=' '))

এটি অনলাইন চেষ্টা করুন!

মন্তব্য

a =>                           // a[] = input matrix
g = (                          // g = recursive function taking:
  n,                           //   n = number of remaining moves
                               //   (x, y) = current coordinates, initialized as follows:
  y = a[F = 'findIndex'](r =>  //     y = index of the row containing the starting point,
    ~(i = r[F](v => v > '?'))  //         found by iterating over all rows r until we
  ),                           //         find some i such that r[i] > '?'
  x = i,                       //     x = index of the column of the starting point
  R = a[y]                     //   R[] = current row
) =>                           //
  !n-- |                       // decrement n; force failure if we're out of moves
  [-1, 0, 1, 2].every(d =>     // for each direction d, where -1 = left, 0 = up,
    (                          // 1 = right and 2 = down:
      R[x] = '<^>v'[d + 1], (  //   update the current cell with the direction symbol
        c = (                  //   c = content of the new cell at (X, Y) with:
          a[Y = y + ~-d % 2]   //     Y = y + dy
          || 0                 //     (use a dummy value if this row does not exist)
        )[X = x + d % 2]       //     X = x + dx
      ) < 1 ?                  //   if c is a space:
        g(n, Y, X)             //     we can go on with a recursive call
      :                        //   else:
        n | c != '$'           //     return false if n = 0 and we've reached the target
    ) &&                       //   unless the above result is falsy,
    (R[x] = ' ')               //   restore the current cell to a space
  )                            // end of every()

5

পাইথন 2 , 310 256 বাইট

ধন্যবাদ -২ except:0বাইটের
জন্য কায়ারডকোইনারিংহিংহিংকে ধন্যবাদ -8 বাইটের
জন্য
স্মৃতিচারণ করুন ধন্যবাদ -৩ বাইটের জন্য জোনাথান অ্যালান ধন্যবাদ -৫ বাইটের জন্য @ ওভসকে ধন্যবাদ

G,L=input()
R=[]
def S(x,y,G,c,R):
 try:
	if x>-1<y<G[y][x]in' @':i=0;exec"T=[r[:]for r in G];T[y][x]='<v^>'[i];S(x+~-i/2,y+~-(i^2)/2,T,c-1,R);i+=1;"*4
	R+=[G]*(0==c<'$'==G[y][x])
 except:0
for i,y in enumerate(G):"@"in y>S(y.index("@"),i,G,L,R)
print R[0]

এটি অনলাইন চেষ্টা করুন!

কিছু ব্যাখ্যা:

try-exceptউভয় xএবং yস্থানাঙ্ক সীমানা হয় তা নিশ্চিত করার জন্য ব্যবহার করা হয়। অ্যাক্সেসের পরে ব্যতিক্রম উত্থাপিত হবে G[y][x]। পাইথন খুব ভাল এবং নেতিবাচক সূচকগুলি গ্রহণযোগ্য, তাই চেক x>-1<yযুক্ত করা হয়।

T=[r[:]for r in G]Gমান দ্বারা কপি তৈরি করতে ব্যবহৃত

~-i/2এবং ~-(i^2)/2জোড়া তৈরি করতে ব্যবহৃত হয় (-1, 0), (0, 1), (0, -1), (1, 0), যা গ্রিডে স্থানান্তরিত করতে ব্যবহৃত হত (এখনও আরও ছোট পথ হওয়া উচিত!)

R+=[G]*(0==c<'$'==G[y][x])চেক করুন, '$'প্রয়োজনীয় পদক্ষেপে পৌঁছেছে যে । Rপুনরাবৃত্তি ফাংশন কলগুলি থেকে এই ফলাফলটি পেতে ব্যবহার করা হয়।

for i,y in enumerate(G):"@"in y>S(y.index("@"),i,G,L,R)পাওয়া xএবং yএর '@'ইনপুট এবং কল ফাংশনে S

print R[0] R আরও একটি সমাধান থাকতে পারে, তাই আউটপুট ঠিক আগে



1
আপনি প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন if G[y][x]=='$':সঙ্গে if'$'==G[y][x]:

1
আসলে, সেই পুরো শর্তটি R+=(G[y][x]=='$')*(c==0)*[G]অন্য বাইটের জন্য প্রতিস্থাপন করা যেতে পারে ।

1
হু, নিশ্চিত যে আমি কী দেখছিলাম। আপনি প্রথম কন্ডিশনে একটি দম্পতি বাইট সংরক্ষণ করতে পারেনif(x>-1<y)*(G[y][x]in' @'):

1
আপনার জন্য একটি ছোট উপায় y+cmp(i%2,i/2)হবে y+~-(i^2)/2; ভাল এখনও সংক্ষিপ্ত হতে পারে।
জোনাথন অ্যালান

2

পাইথন 2 , 264 261 251 249 বাইট

def f(a,n,r=-1,s=0):
 j=len(a[0]);x=1;z=y=0
 if r<0:s,r=divmod(sum(a,[]).index('@'),j)
 for c in'>v<^':
	u=r+x;v=s+y;x,y=-y,x
	if j>u>-1<v<len(a):b=[e[:]for e in a];b[s][r]=c;w=a[v][u];z=n*(w<'!')and f(b,n-1,u,v)or n==1and w=='$'and b
	if z:return z

এটি অনলাইন চেষ্টা করুন!


1
@ আরনল্ড: ওফ! কিছুটা অভিনবও পেয়েছি। সংশোধন করা হয়েছে।
চ্যাস ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.