সেল ফোন চার্জ


10

আমার বিশ্ববিদ্যালয় কোড চ্যালেঞ্জ প্রতিযোগিতার অনুমতি নিয়ে চ্যালেঞ্জ নেওয়া হয়েছে


মোবাইল ফোনে আমাদের যে নির্ভরতা রয়েছে তা আমাদের প্রতি ব্যাটারির সর্বাধিক স্তর পর্যন্ত প্রতি রাতে সেগুলি চার্জ করে দেয়, তাই আমরা পরের দিনের মাঝামাঝি সময়ে বিদ্যুতের বাইরে চলে যাওয়ার ঝুঁকিটি চালাই না। এমন কি এমন লোকেরাও রয়েছে যারা দিনের বেলা কোনও ফ্রি আউটলেট দেখে, যা ঘটতে পারে তার জন্য এটি চার্জ করে দেয়।

আমি তাদের মধ্যে একজন।

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

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

সমস্যার প্রতি আমার প্রথম পদ্ধতির মধ্যে, আমি ধরে নিচ্ছি যে আমি উপরের-বাম কোণ থেকে নীচে-ডান কোণে একটি "চেসবোর্ড" এর আশেপাশে যেতে চাই। প্রতিটি "সেল" এ আমি মোবাইলটিকে একটি নির্দিষ্ট পরিমাণে চার্জ করতে পারি, না পারব না এবং এর লোডের স্তর হ্রাস পাবে।

চ্যালেঞ্জ

পূর্ণসংখ্যার একটি FxC ম্যাট্রিক্স দেওয়া, আউটপুট ন্যূনতম ব্যাটারি স্তর স্তর পরিমাণ আমি উপরের বাম কোণে নীচে ডান দিকে যেতে প্রয়োজন লোড স্তর কখনও 2 ইউনিটের নীচে না পড়ে।

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


প্রদত্ত উদাহরণ :

[📱-11-1-1-1-1-1-11-1-111-10]

আমার যে ব্যাটারি কম ব্যাটারি প্রয়োজন তা হ'ল:

[📱-11-1-1-1-1-1-11-1-111-10]

এবং আমার সর্বনিম্ন ব্যাটারি স্তরের পরিমাণের প্রয়োজন 4

মন্তব্য

  • শুরুটি সর্বদা শীর্ষ বাম কোণে হতে চলেছে
  • শেষটি সর্বদা নীচের অংশে ডানদিকে থাকবে
  • আপনি ইতিমধ্যে পাস করেছেন এমন কোনও কক্ষে আপনি যেতে পারবেন না। উদাহরণ: একবার অবস্থান (0,1) এ গেলে আপনি প্রাথমিক বিন্দুতে (0,0) যেতে পারবেন না
  • আপনার ব্যাটারি স্তরটি (কোনও কারণে) ২ এর নিচে যেতে পারে না
  • আপনি ধরে নিতে পারেন যে সর্বদা শুরু এবং শেষ থাকবে
  • আপনার প্রয়োজন হলে 1-মাত্রিক অ্যারেগুলি বহুমাত্রিক হিসাবে নিতে পারেন [1,2,3] == [[1,2,3]]
  • একাধিক সঠিক (সর্বনিম্ন প্রয়োজনীয় চার্জ) পাথ থাকতে পারে
  • আপনার লক্ষ্যটি কেবলমাত্র সর্বনিম্ন প্রাথমিক ব্যাটারির স্তরটি আউটপুট করা, রুট নয়
  • আপনি কেবল উলম্ব এবং অনুভূমিকভাবে যেতে পারেন (তির্যক নয়)

পরীক্ষার কেস

[0, 0] => 2
[0, 1, 0] => 2
[0, -1, 0] => 3
[0, 15, -20, 5, 0] => 7
[[0, -3],[-5, 0]] => 5
[[0, -5, -9, 5], [-3, 5, 2, -2], [2, -4, -4, 0]] => 5
[[0, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, 0]] => 4

আমি চ্যালেঞ্জের দিনটি ভুলে গিয়েছিলাম। স্যান্ডবক্স পোস্ট
লুইস ফিলিপ দে জেসুস মুনোজ

যে কারও মনে রাখার জন্য: "দ্য হাংরি মুজ" চ্যালেঞ্জটি কখনই এটিকে স্যান্ডবক্স থেকে বের করে আনেনি, সুতরাং এটি কোনও ধাপ নয়।
কালো আউল কাই

@ ব্লাকওলকাই আমার মনে হয় উভয় চ্যালেঞ্জই আলাদা
লুইস

1
সর্বোত্তম পথে কি কখনও বাম বা উপরে চলতে হবে? উদাহরণস্বরূপ[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
কামিল দ্রাকারী

1
@ ডানা না, উপরে কেবল দুটি 0sবাম কোণে একটি এবং অন্যটি নীচে ডানদিকে রয়েছে
লুইস ফেলিপ দে জেসুস মুনোজ

উত্তর:


3

জাভাস্ক্রিপ্ট (ES7),  162 156  154 বাইট

m=>(M=g=(x,y,n,k)=>m.map((r,Y)=>[r[x+1]]+[m[y+1]]?r.map((v,X)=>r[1/v&&(x-X)**2+(y-Y)**2==1&&g(X,Y,u=v+n,k<u?k:u,r[X]=g),X]=v):M=M>k?M:k))(0,0,0)|M<0?2-M:2

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

মন্তব্য

m => (                          // m[] = input matrix
  M =                           // initialize M to a non-numeric value
  g = (x, y, n, k) =>           // g = recursive depth-first search function
    m.map((r, Y) =>             // for each row r[] at position Y in m[]:
      [r[x + 1]] +              //   if either r[x + 1]
      [m[y + 1]] ?              //   or m[y + 1] is defined:
        r.map((v, X) =>         //     for each value v at position X in r[]:
          r[                    //
            1 / v &&            //       if v is numeric
            (x - X) ** 2 +      //       and the squared Euclidean distance
            (y - Y) ** 2 == 1   //       between (x, y) and (X, Y) is 1:
            &&                  //
              g(                //         do a recursive call:
                X, Y,           //           with (X, Y)
                u = v + n,      //           with n = n + v
                k < u ? k : u,  //           with k = min(k, n + v)
                r[X] = g        //           set r[X] to a non-numeric value
              ),                //         end of recursive call
            X                   //       then restore r[X]
          ] = v                 //       to its initial value
        )                       //     end of inner map()
      :                         //   else (we've reached the bottom right corner):
        M = M > k ? M : k       //     update M to max(M, k)
    )                           // end of outer map()
)(0, 0, 0) |                    // initial call to g with x = y = n = 0 and k undefined
M < 0 ? 2 - M : 2               // return 2 - M if M is negative, or 2 otherwise

3

পাইথন 2 , 208 202 বাইট

lambda s:2-f(s)
def f(s,x=0,y=0):
 if x>-1<y<s[y:]>[]<s[y][x:]!="">s[y][x]:k=s[y][x];s[y][x]="";return k+min(0,max([len(s[y+1:]+s[y][x+1:])and f(eval(`s`),x+a/3-1,y+a%3-1)for a in 7,1,5,3]))
 return-9e9

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


পাইথন 2 , 217 211 বাইট

i=input()
X,Y=len(i[0]),len(i)
s=[[0]*4+[i]];r=[]
for m,l,x,y,g in s:
 if X>x>-1<y<Y<"">g[y][x]:r+=[m]*(Y-y<2>X-x);l+=g[y][x];g[y][x]="";s+=[[min(m,l),l,x+a/3-1,y+a%3-1,eval(`g`)]for a in 7,1,5,3]
print 2-max(r)

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



1

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 242 বাইট

a=>{int m=1<<31,n=~m;void g(int w,int x,int y,int z){for(int i=4,t,c,d,e;i-->0;)try{t=a[c=i<1?w-1:i<2?w+1:w,d=i>2?x-1:i>1?x+1:x];n=t==0&z<n?z:n;a[c,d]=m;e=y+t<2?2-y-t:0;if(t!=m)g(c,d,y+t+e,z+e);a[c,d]=t;}catch{}}a[0,0]=m;g(0,0,2,2);return n;}

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

//a: input matrix
a=>{
  // m: marker for used cells
  // n: result, initialized to a huge value
  int m=1<<31,n=~m;
  // recursive function
  // w: 1st dim coordinate
  // x: 2nd dim coordinate
  // y: current charge level
  // z: initial charge for current path
  void g(int w,int x,int y,int z){
    // i: loop variable
    // t: temp holds overwritten value
    // c: adjacent 1st dim coordinate
    // d: adjacent 2nd dim coordinate
    // e: delta charge needed
    for(int i=4,t,c,d,e;i-->0;)
      // avoid index out of range errors
      // by using try/catch
      try{
        // determine neighbor
        // coordinates and save value
        t=a[c=i<1?w-1:i<2?w+1:w,
            d=i>2?x-1:i>1?x+1:x];
        // if we have found a 0, check if
        // initial charge is lower than the
        // lowest so far. save it if it is.
        n=t==0&z<n?z:n;
        // mark current cell used
        a[c,d]=m;
        // determine if we need to
        // increase the initial charge
        e=y+t<2?2-y-t:0;
        // make recursive call if current
        // cell was not previously in use
        if(t!=m)g(c,d,y+t+e,z+e);
        // restore current cell value
        a[c,d]=t;
      }catch{}
  }
  // mark starting cell used
  a[0,0]=m;
  // start the recursive function
  g(0,0,2,2);
  // return the result to the caller
  return n;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.