একটি শিখর অভিজ্ঞতা: দ্রুত সমস্ত পীকগুলি দেখুন


22

আমি (0,0)একটি Hএক্স Wমানচিত্রে এমন স্থানে দাঁড়িয়ে আছি যেখানে উচ্চতা অঙ্কগুলি দ্বারা উপস্থাপিত হয়, উদাহরণস্বরূপ:

1132
2221
1230    # H = 3, W = 4

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

চ্যালেঞ্জ

চ্যালেঞ্জটি হ'ল সমস্ত চূড়াগুলি দেখার এবং দ্রুত ফিরে আসার দ্রুততম পথটি সন্ধান করা।

সংক্ষিপ্ততম প্রোগ্রামের জয়।

ইনপুট

  • এইচ, ডাব্লু - মানচিত্রের উচ্চতা এবং প্রস্থ (পূর্ণসংখ্যা) (alচ্ছিক, একটি তালিকা / টুপল বা দুটি পৃথক পূর্ণসংখ্যার ইনপুট হতে পারে)
  • মানচিত্র, কোনও সুবিধাজনক বিন্যাসে ( - ) ডিজিটের Hসেট হিসাবে দেওয়া (2D তালিকা, স্ট্রিং নিউলাইন দ্বারা পৃথক করা ইত্যাদি)W09

আউটপুট

  • প্রতিটি শিখর দেখার জন্য আপনার সর্বনিম্ন সময় নেওয়া এবং আপনার প্রারম্ভিক পয়েন্টে ফিরে আসতে (পূর্ণসংখ্যা)

পরিবেশ

  • প্রদত্ত ক্ষেত্রের উচ্চতা থেকে এক অঙ্ক করে প্রতিনিধিত্ব করা 0হয় 9
  • "শীর্ষস্থান" সর্বোচ্চ উচ্চতা সহ অঞ্চল দ্বারা সংজ্ঞায়িত করা হয়।
  • উপরের বাম দিকের (0,0) অঞ্চলে পথ দুটিই শুরু এবং শেষ হওয়া উচিত ।
  • আপনি কেবল আপনার বর্তমান অঞ্চল সংলগ্ন অঞ্চলে যেতে পারেন এবং আপনি তির্যকভাবে স্থানান্তর করতে পারেন না।
    • উচ্চতায় কোনও পরিবর্তন না হলে এক অঞ্চল থেকে অন্য অঞ্চলে যেতে 3 মিনিট সময় লাগে ।
    • উপরে উঠতে 11 মিনিট সময় লাগে ; এটি হ'ল এক অঞ্চল থেকে অন্য অঞ্চলে যা হুবহু 1ইউনিট উচ্চতর।
    • নিচে উঠতে 2 মিনিট সময় লাগে ; এটি হ'ল এক অঞ্চল থেকে অন্য অঞ্চলে যা হুবহু 1ইউনিট কম।
    • আপনি যে অঞ্চলে 1ইউনিটের চেয়ে বেশি বা নীচে সেগুলিতে যেতে পারবেন না । (আপনি উচ্চতা সমেত কোনও অঞ্চল থেকে উচ্চতা 1সংলগ্ন অঞ্চলে যেতে পারবেন না , বলুন 3)
  • সমস্ত শিখরের দিকে যাওয়ার গ্যারান্টি রয়েছে
  • সর্বোচ্চ পিক সংখ্যা 15

নমুনা

ইনপুট

4 5
32445
33434
21153
12343

আউটপুট

96

ব্যাখ্যা

আপনি উপরের-বামে শুরু করুন 3। আপনি দুটি দেখার জন্য আছে 5গুলি যে অবস্থিত হয় (0,4)এবং (3,3)এবং ফিরে আসা 3(0,0)সবচেয়ে কম সময়ের সম্ভব হবে।

3  2  4->4->5
V     ^
3->3->4  3  4

2  1  1  5  3

1  2  3  4  3    # 3 + 3 + 11 + 3 + 3 + 11 = 34 minutes to visit 1st peak


3  2  4  4  5
            V
3  3  4  3  4
            V
2  1  1  5  3
         ^  V
1  2  3  4<-3    # 2 + 2 + 3 + 11 + 11 = 29 minutes to visit 2nd


3  2  4  4  5
^            
3  3  4  3  4
^            
2  1  1  5  3
^        V   
1<-2<-3<-4  3    # 2 + 2 + 2 + 2 + 11 + 11 + 3 = 33 minutes to come back

# 34 + 29 + 33 = 96 minutes total is the answer

ইনপুট

2 7
6787778
5777679

আউটপুট

75

9
পিপিসিজিতে আপনাকে স্বাগতম, এবং দুর্দান্ত প্রশ্ন! আমি এটি একটি কোড গল্ফ প্রশ্নে অত্যন্ত পরিবর্তন করার পরামর্শ দিচ্ছি, যেহেতু উত্তর স্কোর করার জন্য একটি উদ্দেশ্যজয়ী মানদণ্ড থাকতে হবে।
দেউসোভি

4
সুপারিশের জন্য আপনাকে ধন্যবাদ, আমি সহায়তা কেন্দ্রের নিয়মগুলি পড়েছি এবং প্রশ্নটি সম্পাদনা করেছি
cozyconemotel

শিরোনামটি উন্নত করা থাকলে সম্ভবত আপনার চ্যালেঞ্জ আরও হিট পেতে পারে। "পর্বত আরোহণ চ্যালেঞ্জ" সম্ভবত।
ডেভিডসি

1
কোজিকোনমোটেল, আমি আপনার চ্যালেঞ্জের জন্য একটি সংক্ষিপ্ত, সম্ভবত আরও আকর্ষণীয় শিরোনাম প্রস্তাব করেছি। আপনি যদি ইচ্ছা করেন তবে এটিকে মূলটিতে ফিরিয়ে দিতে নির্দ্বিধায় অনুভব করুন। (আপনার জমা দেওয়ার পরে 245 বার দেখা হয়েছে))
ডেভিডসি

@ ডেভিডসি আমি সম্পূর্ণ একমত সম্পাদনার জন্য আপনাকে ধন্যবাদ।
কোজিকোনমোটেল

উত্তর:


5

গণিত 745 681 বাইট

প্রাথমিক ধারণাটি সম্ভাব্য পদক্ষেপের একটি ভারী গ্রাফ তৈরি করা। ওজন হ'ল সময় যা এক জায়গা থেকে অন্য জায়গায় যেতে সময় নেয়। কমপক্ষে ওজনযুক্ত পথটি দ্রুততর হবে।

ইনপুট অঙ্কগুলি একটি r দ্বারা c (কলাম দ্বারা সারি) আয়তক্ষেত্রাকার অ্যারে স্থাপন করা হয় এবং তারপরে তিনটি স্বতন্ত্র উপস্থাপনা খেলতে আসে: (1) সি গ্রিড গ্রাফ দ্বারা একটি আর, যেখানে প্রতিটি শীর্ষবিন্দু অ্যারের একটি ঘরের সাথে মিলিত হয়, (2) (আর সি) দ্বারা (আর সি) ওজনযুক্ত সংলগ্ন ম্যাট্রিক্স যা একটি অবস্থান থেকে (গ্রিড গ্রাফে) অন্য স্থানে যেতে সময় (২, ৩, বা ১১ মিনিট) সময় লাগে তার সাথে সামঞ্জস্য রেখে ওজন ধরে রাখে এবং (৩) নির্দেশিত , ম্যাট্রিক্স থেকে নির্মিত ওজনযুক্ত সংলগ্ন গ্রাফ।

গ্রিড গ্রাফটি নির্ধারণ করতে সহায়তা করে যে কোন কোষগুলি (অর্থাত্ কোনটি শীর্ষে অবস্থিত) প্রতিটি শীর্ষবিন্দু থেকে সম্ভবত পৌঁছনীয় - "সম্ভবত" পৌঁছনীয় "কারণ প্রতিবেশী সেলটি প্রদত্ত ঘরের উপরে কেবল ডান, বাম, নীচে বা নীচে থাকা উচিত নয়। এর মানটি প্রতিবেশী থেকে দূরত্বের 1 এককের মধ্যেও হওয়া আবশ্যক (উদাহরণস্বরূপ, 3 টি প্রতিবেশী 5 বা 1 এর সাথে সংযুক্ত হয় না)। যদি প্রান্তকে ভার্টেক্সের aসাথে সংযুক্ত না হয় bতবে সংলগ্ন ম্যাট্রিক্স কোষ cells a, b} এবং {b, a} এর মান হবে ∞ তদনুসারে, ওজনযুক্ত সংলগ্ন গ্রাফের a থেকে b পর্যন্ত কোনও প্রান্ত থাকবে না, খ থেকে a- তে হবে না।

ওজনযুক্ত সংলগ্ন গ্রাফ GraphDistanceযে কোনও শীর্ষে অবস্থিত সর্বনিম্ন দূরত্ব ( ) এবং সংক্ষিপ্ততম রুট নির্ধারণ করতে পরিবেশন করে । সর্বোত্তম পথটি অবশ্যই 1 দিয়ে শুরু হওয়া উচিত, প্রতিটি শৃঙ্গার প্রতিটি স্পর্শ করুন এবং 1 এ ফিরে আসতে হবে এই ক্ষেত্রে, "সংক্ষিপ্ততম রুট" খুব কম গতিপথ সহকারে এক নয়। প্রান্ত ওজনে পরিমাপ করা সবচেয়ে কম সময়ের সামগ্রিক সময়ের সাথে এটি।


Golfed

o=Sequence;v[a_<->b_,z_]:=(m_~u~q_:={Quotient[m-1,q[[2]]]+1,1+Mod[m-1, q[[2]]]};j=z[[o@@u[a,i=Dimensions@z]]];k=z[[o@@u[b,i]]];Which[j==k,{{a,b}->3,{b,a}->3},j==k-1,{{a,b}->11,{b,a}->2},j==k+1,{{a,b}->2,{b,a}->11},2<4,{{a,b}->∞, {b, a}->∞}]);w@e_:=Module[{d,x,l,y},x=Map[ToExpression,Characters/@Drop[StringSplit@e,2],{2}];d_~l~c_:=d[[2]](c[[1]]-1)+c[[2]];g_~y~p_:=(Min[Plus@@(GraphDistance[g,#,#2]&@@@#)&/@(Partition[#,2,1]&/@({1,o@@#,1}&/@Permutations@p))]);y[WeightedAdjacencyGraph[ReplacePart[ConstantArray[∞,{t=Times@@(d=Dimensions@x),t}],Flatten[#~v~x &/@Union@Flatten[EdgeList[GridGraph@Reverse@d,#<->_]&/@Range@(Times@@d),1],1]]], l[Dimensions@x, #] & /@ Position[x, Max@x]]

দীর্ঘতর, আরও পঠনযোগ্য ফর্ম

(*determines a weight (number of minutes) to go from vertex a to b and from b to a*)
weight[a_ <-> b_, dat_]:= 
  Module[{cellA,cellB,dim,valA,valB,vertexToCell},

  (*Convert graph vertex index to cell location*)
  vertexToCell[m_,dimen_]:={Quotient[m-1,dim[[2]]]+1,1+Mod[m-1,dimen[[2]]]};
     dim=Dimensions[dat];
     cellA = vertexToCell[a,dim];
     cellB = vertexToCell[b,dim];
     valA=dat[[Sequence@@cellA]];
     valB=dat[[Sequence@@cellB]];
     Which[
       valA==valB,{{a,b}-> 3,{b,a}-> 3},
       valA==valB-1,{{a,b}-> 11,{b,a}-> 2},
       valA==valB+1,{{a,b}-> 2,{b,a}-> 11},
       2<4,{{a,b}->∞,{b,a}->∞}]];

(* weights[] determines the edge weights (times to get from one position to the next), makes a graph and infers the shortest distance 
from vertex 1 to each peak and back.  It tries out all permutations of peaks and 
selects the shortest one. Finally, it returns the length (in minutes) of the shortest trip. *)

weights[str_]:=
  Module[{d,dat,neighbors,cellToVertex,peaks,z,gd},
  dat=Map[ToExpression,Characters/@Drop[StringSplit[str],2],{2}];
  cellToVertex[dim_,cell_]:=dim[[2]] (cell[[1]]-1)+cell[[2]];
  peaks[dat_]:= cellToVertex[Dimensions[dat],#]&/@Position[dat,peak =Max[dat]];

     (* to which cells should each cell be compared? neighbors[] is a function defined within weights[]. It returns a graph, g, from which graph distances will be derived in the function gd[] *)
  neighbors[dim_]:=
  Union@Flatten[EdgeList[GridGraph[Reverse@dim],#<->_]&/@Range@(Times@@dim),1];
    d=Dimensions[dat];
    m=ReplacePart[ConstantArray[∞,{t=Times@@d,t}], 
     (*substitutions=*)
    Flatten[weight[#,dat]&/@neighbors[d],1]];
    g=WeightedAdjacencyGraph[m,VertexLabels->"Name",ImageSize->Full,GraphLayout->"SpringEmbedding"];

    (* finds shortest path.  gd[] is also defined within weights[] *)
  gd[g3_,ps_]:=
    Module[{lists,pairs},
    pairs=Partition[#,2,1]&/@({1,Sequence@@#,1}&/@Permutations@ps);
    Min[Plus@@(GraphDistance[g3,#,#2]&@@@#)&/@pairs]]; 

  gd[g,peaks[dat]]]

টেস্ট

weights["4 5
 32445
 33434
 21153
 12343"]

96।


weights@"2 7
 6787778
 5777679"

75।


weights@"3 4
 1132
 2221
 1230"

51।


ব্যাখ্যা

নিম্নলিখিত ইনপুটটির 2-5 লাইনগুলি ভাবেন

"4 5
 32445
 33434
 21153
 12343"

4 টি সারি এবং 5 কলাম সহ একটি অ্যারে উপস্থাপন করে:

gridgraph

যেখানে প্রতিটি ভার্টেক্স ইনপুট অ্যারে থেকে একটি অঙ্কের সাথে মিলে যায়: 3টি ভার্টেক্স 1 এ, 2টি শীর্ষবিন্দু 2 এ, 4 টি 4 টি শীর্ষে 4, 5 আরও অন্যটি 4, 5টি ভার্টেক্স 5 এ, ইত্যাদি গ্রিড গ্রাফটি কেবল মোটামুটি আমরা যে গ্রাফটির জন্য লক্ষ্য রেখেছি তার অনুমান। এটি পুনর্নির্দেশিত হয়। তদুপরি, কিছু কিনারা অনুপলব্ধ থাকবে। (মনে রাখবেন: আমরা একটি অবস্থান থেকে অন্য স্থানে যেতে পারি না যা বর্তমানের 1 বা তারও নীচে 1 উচ্চতা এককের বেশি।) তবে গ্রিড গ্রাফটি সহজেই আমাদের বেছে নেওয়া যেকোনও উল্লম্বগুলি যেকোন নির্বাচিত প্রান্তের পাশে রয়েছে। এটি আমাদের বিবেচনার প্রয়োজন প্রান্তগুলি হ্রাস করে, প্রথম উদাহরণে (একটি 4 বাই 5 গ্রিড), 400 (20 * 20) থেকে 62 (31 * 2 গ্রিড গ্রাফের প্রান্তের সংখ্যা)। একই উদাহরণে, কেবলমাত্র 48 টি প্রবাহ অপারেটিভ; 14 হয় না।

নিম্নলিখিত 20 বাই 20 ওজনযুক্ত সংলগ্ন ম্যাট্রিক্স গ্রিড গ্রাফ থেকে সমস্ত জোড়ের মধ্যকার দূরত্বের প্রতিনিধিত্ব করে।

কী কোডটি নির্ধারণ করবে কোন নম্বরটি নির্ধারণ করবে তা নীচে is

Which[
      valA==valB,{{a,b}-> 3,{b,a}-> 3},
      valA==valB-1,{{a,b}-> 11,{b,a}-> 2},
      valA==valB+1,{{a,b}-> 2,{b,a}-> 11},
      2<4,{{a,b}->∞,{b,a}->∞}]

সেল {1,2} - এক সূচকগুলিতে-- 2 মান রয়েছে কারণ শীর্ষবিন্দু 1 থেকে শীর্ষস্থান 2 এ সরানো উতরাই। সেল {2,1 11 এ 11 টি রয়েছে কারণ ভার্টেক্স 2 থেকে শীর্ষস্থান 1 এ স্থানান্তরিত হয়। Cells 1,6 cells এবং 6,1 {কোষে থাকা 3 টি বোঝায় যে আন্দোলনটি উপরে বা নীচে নেই। সেলটিতে {1,1} রয়েছে ∞ কারণ এটি নিজের সাথে সংযুক্ত নয়।

ওজন

নিম্নলিখিত গ্রাফ উপরের ইনপুট অন্তর্নিহিত কাঠামো দেখায়। রঙিন তীরগুলি শীর্ষস্থান 1 থেকে শিখর (5 এবং 14 এ) এবং পিছনে 1 পর্যন্ত সর্বোত্তম পথ দেখায় নীল তীরগুলি একই স্তরের (3 মিনিট) চলার সাথে সামঞ্জস্য করে; লাল তীরগুলির অর্থ আসমান (11 মিনিট) এবং সবুজ তীরগুলি নীচে (2 মিনিট) নির্দেশ করে।

graph2

শীর্ষবিন্দু 1 (সেল {1,1 from থেকে দুটি শিখরে এবং শীর্ষস্থান 1 এ ফিরে যাওয়ার পথ:

3 + 3 + 11 + 3 + 3 + 11 + 2 + 2 + 3 + 11 + 11 + 2 + 2 + 2 + 2 + 11 + 11 + 3

96


0

পাইথ, 92 বাইট

hSms@Lu.dm,bhS,@Gb+@G,hbH@G,HebG[FQ.dm,(Fb?|tsaMCb>.aJ-F@LQb1.n4@[3hT2)J*QQC.<B+]hSQd1.p.M@Q

ইনপুট ফর্ম্যাট একটি অভি উচ্চতা স্থানাঙ্ক ম্যাপিং হল: {(0, 0): 3, (0, 1): 2, (0, 2): 4, …}। এটি ফ্লয়েড ars ওয়ারশাল অ্যালগরিদম ব্যবহার করে সমস্ত জোড় পয়েন্টের মধ্যে দ্রুততম পাথগুলি সন্ধান করে , তারপরে শিখরগুলির সমস্ত অনুমতি ছাড়াই কাঙ্ক্ষিত চক্রের মোট সময়কে হ্রাস করে।

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

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