আমরা টাওয়ার হপিং করি


17

কার্য

অ-নেতিবাচক পূর্ণসংখ্যার অ্যারে দেওয়া হয়েছে a অ্যারে দেওয়া, 0 অবস্থান থেকে শুরু করে অ্যারের "বাইরে" ঝাঁপ দিতে প্রয়োজনীয় ডান দিকের জাম্পগুলি নির্ধারণ করুন বা এটি করা সম্ভব না হলে শূন্য / নাল ফিরে করুন।

সূচক থেকে একটি লাফi সর্বাধিক দ্বারা অ্যারে সূচক বৃদ্ধি হিসাবে সংজ্ঞায়িত করা হয় a[i]

একটি লাফ বাহিরে একটি লাফ যেখানে সূচক লাফ ফলে হয় iতাই 1 ভিত্তিক ইন্ডেক্স জন্য, আউট-অফ-সীমা অ্যারের জন্য i>length(a), এবং 0 ভিত্তিক ইন্ডেক্স জন্য, i>=length(a)

উদাহরণ 1

বিবেচনা করুন Array = [4,0,2,0,2,0]:

Array[0] = 4 -> You can jump 4 field
Array[1] = 0 -> You can jump 0 field
Array[2] = 2 -> You can jump 2 field
Array[3] = 0 -> You can jump 0 field
Array[4] = 2 -> You can jump 2 field
Array[5] = 0 -> You can jump 0 field

সীমার বাইরে যেতে "জাম্পিং" করে সবচেয়ে সংক্ষিপ্ত পথটির দৈর্ঘ্য রয়েছে 2:

আমরা লাফ দিতে পারি 0->2->4->outsideযার দৈর্ঘ্য রয়েছে 3তবে 0->4->outsideদৈর্ঘ্য রয়েছে 2তাই আমরা ফিরে আসি 2

উদাহরণ 2

ধরুন Array=[0,1,2,3,2,1]:

Array[0] = 0 -> You can jump 0 fields
Array[1] = 1 -> You can jump 1 field
Array[2] = 2 -> You can jump 2 field
Array[3] = 3 -> You can jump 3 field
Array[4] = 2 -> You can jump 2 field
Array[5] = 1 -> You can jump 1 field

এই ক্ষেত্রে, এটা অ্যারের বাইরে ঝাঁপ, তাই আমরা একটি শূন্য / নাল বা মত কোনো অ নির্ণায়ক মান উচিত অসম্ভব

উদাহরণ 3

ধরুন Array=[4]:

Array[0] = 4 -> You can jump 4 field

আমরা অ্যারে এর বাইরে সূচক 0 থেকে সরাসরি এক লাফ দিয়ে লাফ দিতে পারি, তাই আমরা ফিরে আসি 1

সম্পাদনা:

ফেরতের মান সম্পর্কে একাধিক প্রশ্নের কারণে: পালানোর কোনও সুযোগ না থাকলে রিটার্নিং সম্পূর্ণ বৈধ। কারণ, যদি কোনও সুযোগ থাকে তবে আমরা সেই সংখ্যাটি সংজ্ঞায়িত করতে পারি।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!


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


3
@ 0x45 কি অনুমান? সত্য যে আমি আপনাকে কিছু সম্পর্কিত চ্যালেঞ্জের সাথে যুক্ত করেছি? আমি কখনই সদৃশ বলিনি । আপনি কি বোঝাতে চাচ্ছেন আমি নিশ্চিত নই?
মিঃ এক্সকোডার

10
@ 0x45 দয়া করে ভাল উদ্দেশ্য অনুমান করুন । আমরা এই প্রশ্নগুলি জিজ্ঞাসা করছি না কারণ আমরা আপনার চ্যালেঞ্জকে মজা করার চেষ্টা করছি। প্রকৃতপক্ষে, এটি সম্পূর্ণ বিপরীত: আমরা আপনার চ্যালেঞ্জে আগ্রহী। কেবল এটির জন্য চিন্তা করুন, আমরা যদি আপনার চ্যালেঞ্জকে অপছন্দ করি তবে আমরা কেন স্পষ্ট করে প্রশ্ন করব? সেই উদ্দেশ্যে আমাদের ডাউনভোটস / নিকট ভোট রয়েছে। (এবং আমি দেখতে পাচ্ছি, কেউই আপনার পোস্টকে
অগ্রাহ্য

13
টেস্টের কেসটি রাখা ভাল হবে যেখানে লোভের সাথে প্রতিটি ধাপে সর্বাধিক দূরত্বে লাফিয়ে পড়া অনুকূল নয়। উদাহরণস্বরূপ [2, 3, 1, 1]
মার্টিন ইন্ডার

উত্তর:


4

কাস্তে , 9 বাইট

Γö→▼Mo₀↓ŀ

রিটার্নস Inf যখন কোন সমাধান বিদ্যমান। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

হুসের ডিফল্ট রিটার্ন মানগুলি এখানে কাজে আসবে।

Γö→▼Mo₀↓ŀ  Implicit input: a list, say [2,3,1,1]
Γ          Deconstruct into head H = 2 and tail T = [3,1,1]
 ö         and feed them into this function:
        ŀ   Range from 0 to H-1: [0,1]
    Mo      For each element in range,
       ↓    drop that many element from T: [[3,1,1],[1,1]]
      ₀     and call this function recursively on the result: [1,2]
   ▼        Take minimum of the results: 2
  →         and increment: 3

যদি ইনপুট তালিকা খালি, তারপর Γএটা deconstruct পারে না, তাই এটি ডিফল্ট পূর্ণসংখ্যা মান, 0. প্রথম উপাদান 0 হয়, তাহলে ফল যদি Mo₀↓ŀহয় একটি খালি তালিকা, যার উপর অনন্ত ফেরৎ।


6

হাস্কেল , 70 58 বাইট

f[]=0
f(0:_)=1/0
f(x:s)=minimum[1+f(drop k$x:s)|k<-[1..x]]

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

সম্পাদনা করুন: -12 বাইটস @ অনাথকে অনুমতি দেওয়ার সিদ্ধান্ত নেওয়ার জন্য @ এসোলেং ফল এবং ওপিকে ধন্যবাদ জানায়!

Infinityকোনও সমাধান না হলে ফিরে আসে যা সমাধানটিকে অনেক সহজ করে তোলে। যেহেতু আমরা কেবল এগিয়ে যেতে পারি কেবল তালিকার শীর্ষের fদিকে তাকাই এবং 1<=k<=xতালিকা থেকে আইটেমগুলি ফেলে দেয় এবং পুনরাবৃত্তি হয়। তারপরে আমরা পুনরাবৃত্ত কলগুলি পাওয়া প্রতিটি সমাধানে কেবল 1 যুক্ত করি এবং সর্বনিম্ন গ্রহণ করি। মাথা 0 হলে ফলাফল অনন্ত হবে (যেহেতু আমরা স্থানান্তর করতে পারি না কোনও সমাধান নেই)। যেহেতু 1+Infinity==Infinityএই ফলাফলটি কলকারীদের কাছে ফিরিয়ে আনা হবে। যদি তালিকাটি খালি থাকে তার অর্থ আমরা অ্যারে ছেড়ে চলে এসেছি তাই আমরা 0 ব্যয়টি ফিরিয়ে দিই।


1
58 বাইট , তবে কেবলমাত্র যদি আপনি Infinityনাল মান হিসাবে অনুমতি দেন (যা ওপি এখনও স্পষ্ট করে না)।
ফল ফলবান

আসলে, ওপি এখন এটি অনুমোদিত করেছে, যাতে এটি বৈধ হওয়া উচিত।
23:55

3

পাইথন 2 , 124 বাইট

def f(a):
 i={0};l=len(a)
 for j in range(l):
	for q in{0}|i:
	 if q<l:i|=set(range(q-a[q],q-~a[q]))
	 if max(i)/l:return-~j

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

-১০
বাইটস মিঃ এক্সকোডারকে ধন্যবাদ -১২ বাইটস মিঃ এক্সকোডার এবং রডকে ধন্যবাদ


আপনি ব্যর্থ print(f([4,1,0,4,1,1,1]))আপনি আসতে 3কিন্তু হওয়া উচিত 2ভালো লেগেছে[0] -> [3] -> outside
0x45

@ 0x45 কীভাবে ... অপেক্ষা করুন, আপনি যখন লাফ দেবেন, তখন কি আপনাকে যথাসম্ভব বা অন্য কোথাও কোথাও লাফ দিতে হবে?
হাইপারনিউট্রিনো

@ মিঃ এক্সকোডার ওহ হ্যাঁ, দুহ। -~কৌতুক জন্য ধন্যবাদ , একটি সম্পর্কে ভুলে গেছেন।
হাইপারনিউট্রিনো

@HyperNeutrino "একজন লাফ সূচি থেকে আমি সংজ্ঞায়িত করা হয় দ্বারা অ্যারের সূচক বৃদ্ধি হতে সর্বাধিক একটি [আমি]।"
মার্টিন ইন্ডার

1
@ 0x45 ঠিক আছে, স্পষ্ট করার জন্য ধন্যবাদ। আমি মনে করি আমি এটি ঠিক করেছি
হাইপারনিউটারিনো

3

এপিএল (ডায়ালগ ক্লাসিক) এনজিএন / এপিএল , 18 বাইট

সম্পাদনা: এপিএলটির নিজস্ব বাস্তবায়নে আমার পরিবর্তন হয়েছে কারণ ডায়ালগ ইনফিনিটিগুলি সমর্থন করে না এবং চ্যালেঞ্জ লেখক সীমাবদ্ধ সংখ্যাগুলিকে "নাল" হিসাবে কাজ করতে দেয় না

⊃⊃{⍵,⍨1+⌊/⍺↑⍵}/⎕,0

এটি অনলাইন চেষ্টা করুন! এটি এনজিএন / এপিএল এর ডেমো পৃষ্ঠায় চেষ্টা করুন

কোন সমাধানের জন্য ফিরে আসে⌊/⍬


"সঠিক যুক্তি" কী ??
এরিক দি আউটগল্ফার

এই চ্যালেঞ্জটি আরও ভাল-পরীক্ষার ক্ষেত্রে মরিয়া প্রয়োজন। তবে আপনার সমাধানটি অবৈধ উদাহরণস্বরূপ2 3 1 12
H.PWiz

@ এরিকথ আউটগলফার 0Nযা কে এর পূর্ণসংখ্যা নাল; যদি তুমি আগ্রহী, আমি আরো APL রুমে ব্যাখ্যা করতে পারেন
ngn

@ H.PWiz এখন এটি যে সঙ্গে মোকাবেলা করতে পারেন
ngn





1

জেলি , 19 18 বাইট

<LḢ
ḊßÐƤṁḢḟ0‘Ṃµ1Ç?

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

ব্যাখ্যা

<LḢ  Helper link. Input: array
<    Less than
 L   Length
  Ḣ  Head - Returns 0 if its possible to jump out, else 1

ḊßÐƤṁḢḟ0‘Ṃµ1Ç?  Main link. Input: array
            Ç   Call helper link
             ?  If 0
           1      Return 1
                Else
          µ       Monadic chain
Ḋ                   Dequeue
 ßÐƤ                Recurse on each suffix
     Ḣ              Head of input
    ṁ               Mold, take only that many values
      ḟ0            Filter 0
        ‘           Increment
         Ṃ          Minimum



0

জুলিয়া 0.6 , 79 বাইট

জাম্পের সংখ্যা বা Infআপনি পালাতে না পারলে ফিরিয়ে দেয়। অবিচ্ছিন্নভাবে প্রথম উপাদানটি দেখুন এবং ফিরে আসা Infবা 1আপনি পালাতে পারবেন কিনা তার উপর নির্ভর করে, অন্যথায় 1প্রতিটি বৈধ জাম্পের প্রতিনিধিত্ব করে কাটা কাটা অ্যারেগুলির সংক্ষিপ্ততম সমাধানে যুক্ত করুন । নিয়ন্ত্রণ প্রবাহ দুটি ত্রৈমাসিক বিবৃতি দিয়ে সম্পন্ন হয় test1 ? ontrue1 : test2 ? ontrue2 : onfalse2

f(a,n=endof(a))=a[1]<1?Inf:a[1]>=n?1:1+minimum(f(a[z:min(z+a[1],n)]) for z=2:n)

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


0

সি # (.নেট কোর) , 97 বাইট

f=l=>{for(int c=l.Count,s=0,j=l[0];j>0;s=f(l.GetRange(j,c-j--)))if(s>0|j>=c)return s+1;return 0;}

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

কোনও পথ না পাওয়া গেলে 0 ফেরত দেয়।

ব্যাখ্যা

f = 
    l =>                                      //The list of integers
    {
        for (
            int c = l.Count,                  //The length of the list
                s = 0,                        //Helper to keep track of the steps of the recursion
                j = l[0];                     //The length of the jump, initialize with the first element of the list
                j > 0;                        //Loop while the jump length is not 0
                s = f(l.GetRange(j, c - j--)) //Recursive call of the function with a sub-list stating at the current jump length. 
                                              //Then decrement the jumplength. 
                                              //Returns the number of steps needed to jump out of the sup-list or 0 if no path was found. 
                                              //This is only executed after the first run of the loop body.
            )
        {
            if (j >= c |                      //Check if the current jump lengt gets you out of the list. 
                                              //If true return 1 (s is currently 0). OR
                s > 0 )                       //If the recursive call found a solution (s not 0) 
                                              //return the number of steps from the recursive call + 1
                return s + 1;
        }
        return 0;                             //If the jump length was 0 return 0 
                                              //to indicate that no path was found from the current sub-list.
    }

0

পাইথন 2 , 83 73 72 বাইট

-10 @ ব্যবহারকারী 202729
-1 কে ধন্যবাদ জানায় -1 @ জোনাথনফ্রেচকে ধন্যবাদ

lambda a:a and(a[0]and-~min(f(a[k+1:])for k in range(a[0]))or 1e999)or 0

এটি অনলাইন চেষ্টা করুন! নাল মানের জন্য অসীমতা প্রদান করে।


and min(...)+1forহতে পারে and-~min(...)for
জোনাথন ফ্রেচ

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