অ্যারে এস্কেপ - সেখান থেকে বেরিয়ে আসুন


32

একদিন আপনি নিজেকে জাগিয়ে তোলেন কেবল নিজেকে একটি অ্যারেতে ধরা পড়ে। আপনি একবারে একটি সূচক নিয়ে কেবল সেখান থেকে বেরিয়ে আসার চেষ্টা করেছেন, তবে মনে হয় অন্যান্য নিয়ম রয়েছে:

অ্যারেটি সম্পূর্ণ প্রাকৃতিক সংখ্যায় পূর্ণ।

  • আপনি যদি কোনও সূচকে নিজেকে খুঁজে পান তবে আপনি সূচকগুলিতে nযান array[n]:
  • যদি আপনি নিজেকে একটি সূচকটিতে খুঁজে পান nযা একটি প্রধান সংখ্যা, আপনি array[n]পিছনে পদক্ষেপ গ্রহণ করবেন

উদাহরণ: আপনি সূচীতে শুরু করুন 4, এই অ্যারেতে (সূচকটি 0 হ'ল):

array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here

আপনি যে ক্ষেত্রটির উপরে রয়েছেন তার মান হ'ল 8, আপনি 8প্রথম পদক্ষেপ হিসাবে সূচকে যান । আপনি যে জমিতে অবতরণ করছেন তার মান রয়েছে 2। আপনি তারপরে 2আপনার দ্বিতীয় পদক্ষেপ হিসাবে সূচিতে যান । 2একটি প্রাথমিক সংখ্যা হিসাবে , আপনি 5 টি পদক্ষেপ পিছনে নিয়ে যান, এটি আপনার তৃতীয় পদক্ষেপ। কোনও সূচক না থাকায় -3আপনি মোট 3 টি পদক্ষেপে সফলভাবে অ্যারে থেকে রক্ষা পেয়েছেন।

আপনার কাজটি হ'ল:

এমন একটি প্রোগ্রাম বা ফাংশন লিখতে যা কোনও অ্যারে এবং একটি সূচনা সূচককে প্যারামিটার হিসাবে গ্রহণ করে এবং অ্যারে থেকে বেরিয়ে আসার পদক্ষেপের পরিমাণকে আউটপুট করে। আপনি যদি অ্যারে থেকে বাঁচতে না পারেন (যেমন [2,0,2]স্টার্ট-ইনডেক্স 2=> আপনি ক্রমাগত সূচক থেকে 2যান 0), একটি মিথ্যা মান আউটপুট। আপনি এক-ভিত্তিক সূচক বা শূন্য-ভিত্তিক সূচক ব্যবহার করতে পারেন তবে দয়া করে আপনি কোনটি ব্যবহার করবেন তা নির্দিষ্ট করুন।

পরীক্ষার মামলা

ইনপুট: [2,5,6,8,1,2,3], 3

আউটপুট: 1

ইনপুট: [2, 0, 2], 2

আউটপুট: false

ইনপুট: [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5;

আউটপুট: 6

সংক্ষিপ্ত উত্তর জেতে।


7
পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি শালীন প্রথম চ্যালেঞ্জ। :) আমরা কি 1-ভিত্তিক সূচকগুলিও ব্যবহার করতে পারি? এছাড়াও আরও কয়েকটি পরীক্ষার কেস হওয়া ভাল হবে। ভবিষ্যতের চ্যালেঞ্জগুলির জন্য আপনি স্যান্ডবক্স ব্যবহার করার বিষয়েও বিবেচনা করতে পারেন যেখানে কোনও চ্যালেঞ্জ লাইভ হওয়ার আগে আপনি সম্প্রদায় থেকে প্রতিক্রিয়া পেতে পারেন।
মার্টিন ইন্ডার


1
@ মার্টিন ইন্ডার এটি প্রশ্নের সাথে সম্পর্কিত নয় ... তবে মোবাইল ব্যবহারকারী হিসাবে আমার পক্ষে স্যান্ডবক্স ব্যবহার করা অসম্ভব বলে মনে হয়। আমার প্রশ্নগুলি আসলে পোস্ট করার আগে আমার প্রতিক্রিয়া জানাতে আমার কী করা উচিত?
ব্যবহারকারী 6245072

1
@ জেরি জেরেমিয়াহ আপনি ৩ টি পদক্ষেপ পিছনে নিতে পারবেন না কেন? আপনি 5 থেকে শুরু করে 3 টি পদক্ষেপ পিছনে নিলে আপনি সূচক 2 তে অবতরণ করবেন
মাইকেল কুনস্ট

5
@ ব্যবহারকারী 902383 সূচক 2-এ যাচ্ছেন যা প্রধান। তাই আমরা ২ টি পদক্ষেপ পিছনে করি এবং সূচক 0 এ যাই যা মূল নয়। সূচক 0- এর মান 2, তাই আমরা সূচক 2 এ যাই যা প্রধান ... পুনরাবৃত্তি
edc65

উত্তর:



9

পাইথন, 161 138 বাইট

কল্পিত জন্য ক্রেডিট

g=lambda x:0**x or x*g(x-1)
f=lambda a,i,n=0,l=[]:(i<0)+(i>=len(a))and n or(0 if i in l else f(a,[a[i],i-a[i]][i and-g(i-1)%i],n+1,l+[i]))

আইডিয়ন!

কিভাবে এটা কাজ করে

উইলসনের উপপাদ্যটি প্রাইম চেকিংয়ের জন্য ব্যবহৃত হয়।

অ্যারেতে সূচকগুলি সংরক্ষণ করে ( l) এবং বর্তমান সূচকটি কিনা তা পরীক্ষা করে লুপ সনাক্তকরণ l


6

পাইথন, 107 বাইট

import sympy
f=lambda a,i,n=0:0if n>len(a)else f(a,[a[i],i-a[i]][sympy.isprime(i)],n+1)if 0<=i<len(a)else n

ব্যবহার: f(list, start)প্রাক্তন:f([2,5,6,8,1,2,3], 3)

0লুপগুলির জন্য ফেরত দেয় (যখন সনাক্ত হয়েছে n > len(a))


5

মতলব, 138 বাইট

এটি 1-ভিত্তিক সূচকগুলি ব্যবহার করে স্ট্রেইফওয়ারওয়ার্ড পদ্ধতির কারণ মাতলাব ডিফল্টরূপে 1-ভিত্তিক সূচকগুলি ব্যবহার করে। পদক্ষেপের সংখ্যা গণনা করতে আমরা for1 থেকে অনন্ত (!) পর্যন্ত একটি লুপ গণনা ব্যবহার করি । কেসটি হ'ল আমরা অ্যারে থেকে বাঁচতে পারি না, vআমরা ইতিমধ্যে কোন এন্ট্রি পরিদর্শন করেছি সে সম্পর্কে নজর রাখতে আমরা একটি ভেক্টর ব্যবহার করি। আমরা যদি দুবার কোনও এন্ট্রি দেখে যাই তবে আমরা জানি যে আমরা অনিবার্য চক্রে আটকে আছি। আমরা কোনও অ্যারের বাইরে রয়েছি কিনা তা পরীক্ষা করে দেখার জন্য, আমরা try/catchকাঠামোটি ব্যবহার করি যা সীমার ব্যতিক্রমগুলিও ধরা দেয়।

function r=f(a,i);v=a*0;v(i)=1;for k=1:Inf;if isprime(i);i=i-a(i);else;i=a(i);end;try;if v(i);r=0;break;end;v(i)=1;catch;r=k;break;end;end

5

05 এ বি 1 ই, 32 বাইট

ï[U¯Xåi0,q}²gL<Xå_#X²XèXDˆpi-]¯g

ব্যাখ্যা

ï                                 # explicitly convert input to int
 [                            ]   # infinite loop
  U                               # store current index in X
   ¯Xåi0,q}                       # if we've already been at this index, print 0 and exit
           ²gL<Xå_#               # if we've escaped, break out of infinite loop
                   X²XèXDˆpi-     # else calculate new index
                               ¯g # print nr of indices traversed

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


4

জাভাস্ক্রিপ্ট (ES6), 100

সূচক বেস 0 টি দ্রষ্টব্য: এই ফাংশনটি ইনপুট অ্যারেটিকে পরিবর্তন করে

(a,p)=>eval("for(s=0;1/(q=a[p]);++s,p=p>1&&p%i||p==2?p-q:q)for(a[p]=NaN,i=1;p%++i&&i*i<p;);q==q&&s")

কম গল্ফড

(a,p)=>
{
  for(s = 0; 
      1/ (q = a[p]); 
      ++s)
  {
    a[p] = NaN; // mark visited position with NaN to detect loops
    for(i = 1; p % ++i && i*i < p;); // prime check
    p = p > 1 && p % i || p == 2 ? p-q : q;
  }
  return q==q && s // return false if landed on NaN as NaN != NaN
}

পরীক্ষা

F=
(a,p)=>eval("for(s=0;1/(q=a[p]);++s,p=p>1&&p%i||p==2?p-q:q)for(a[p]=NaN,i=1;p%++i&&i*i<p;);q==q&&s")

;[
 [[2,5,6,8,1,2,3], 3, 1]
,[[2, 0, 2], 2, false]
,[[14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5, 6]
].forEach(t=>{
  var [a,b,k]=t, i=a+' '+b,r=F(a,b)
  console.log(r==k?'OK':'KO',i+' -> '+r)
  
})  


4

জাভা, 229 218 বাইট

Object e(int[]a,int b){Stack i=new Stack();int s=0;for(;!(a.length<b|b<0);s++){if(i.contains(b))return 1>2;i.add(b);b=p(b)>0?b-a[b]:a[b];}return s;}int p(int i){for(int j=2;j<i/2;j++)if(i%j<1)return 0;return i<2?0:1;}

কেভিনকে ধন্যবাদ, 11 বাইট ধুলা কাটে


এটিকে গল্ফ করার জন্য কয়েকটি জিনিস: এতে Stack<Integer>i=new Stack<>();পরিবর্তিত হতে পারে Stack i=new Stack();এবং এতে পরিবর্তনও করা return 1==2;যেতে পারে return 0>1;। এছাড়াও, আপনি সাধারণত জাভা পরিবর্তে এটি জাভা 7 উল্লেখ করতে চাইবেন ।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন আমি নিশ্চিত নই যে এটি উল্লেখ করা উচিত যে এটি জাভা is, কারণ বিশেষত এখন এই সমাধান বেশিরভাগ জাভা সংস্করণের সাথে সামঞ্জস্যপূর্ণ।
ব্যবহারকারী 902383

ঠিক আছে, জাভা 8-এ আপনি একটি ল্যাম্বডাস ব্যবহার করতে পারেন যা সংক্ষিপ্ত: এর a,b->{...}পরিবর্তে Object e(int[]a,int b){...}আমি ব্যক্তিগতভাবে জাভা 7 উল্লেখ করেছি যাতে লোকেরা জানতে পারে যে আমি উদ্দেশ্যমূলকভাবে জাভা 8 লাম্বড ব্যবহার করি নি, তবে এটি আপনার উপর নির্ভর করে।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন যথেষ্ট ন্যায্য, যখন আমি লামদা ব্যবহার করছি তখন আমি জাভা সংস্করণটি উল্লেখ করছি, তবে যখন সমাধানটি জাভা with নিয়ে কাজ করে, তখন এটি সাধারণত জাভা ৮ এর সাথেও কাজ করে, সুতরাং সংস্করণ যুক্ত করা অর্থহীন ছিল। তবে আপনি সঠিক হতে পারেন, আমার ন্যূনতম সংস্করণ নির্দিষ্ট করা উচিত।
ব্যবহারকারী 902383

4

সিজেম, 44 বাইট

index arrayস্ট্যাকের উপর আশা

:G\{_G,,&{G=_L#)0{_L+:L;_mp3T?-F}?}L,?}:F~o@

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

আমার প্রথম সিজেএম উত্তর, সুতরাং এটি কেন এত ভয়াবহ এবং অপরিহার্য ...

:G\{_G,,&{G=_L#)0{_L+:L;_mp3T?-F}?}L,?}:F~o@
:G                                              Store the array as G
  \                                             Put the index first
   {                                  }:F~      The recursive F function
     G,,                                        Generate a 0..length(G) sequence
    _   &                            ?          Check that the index is contained
         {                        }             If so, then...
          G=                                    Get the value at the index
            _L#)                 ?              If the value is in L (`-1)` gives `0` which is falsy)
                0                               Return 0 (infinite loop)
                 {              }               Otherwise...
                  _L+:L;                        Store the value we're accessing in L (infinite loop check)
                        _mp3T?-                 Remove 3 if the number is prime
                               F                Then recursively call F
                                   L,           We escaped! Return the size of "L" (number of steps)
                                          o     Print the top value of the stack
                                           @    Tries to swap 3 elements, which will error out

(এটি মুদ্রিত হিসাবে সঠিক আউটপুট পরে ক্রাশ করা ঠিক আছে বলে মনে করা হয়, যা এখানে প্রোগ্রামটি করে তোলে)


3

সি, 121 বাইট

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

p(n,i,z){return--i?p(n,i,z*i*i%n):z%n;}c;f(a,i,n)int*a;{return i<0||i/n?c:c++>n?0:i&&p(i,i,1)?f(a,i-a[i],n):f(a,a[i],n);}

আদর্শের উপর চেষ্টা করুন !

দ্রষ্টব্য: function p(n) পরীক্ষাগুলি যদি nপ্রধান হয় বা না হয়। এর কৃতিত্ব @ লিনের কাছে যায় এবং তার উত্তরটির জন্য এই সংখ্যাটি কি প্রধান?


1
@ রজনগুল বাজে, আপনি কোনও ইনপুট প্যারামিটার অ্যারের দৈর্ঘ্য নির্ধারণ করতে পারবেন না। একই প্রশ্নের উত্তর 2 দেখুন
edc65

@ এডসি 65: দুঃখিত, আমার প্রথম উত্তরের বাইরে পড়া উচিত ছিল।
রাজনগুল

@ জেসমেস - কোড গল্ফে, কোনও ফাংশনকে একই আউটপুট পেতে একাধিকবার কল করা উচিত। আপনার কোডটির cআবার ফাংশনটি কল করার জন্য পুনরায় সেট করা দরকার ।
owacoder

3

জাভাস্ক্রিপ্ট, 121 132 বাইট

p=n=>t=i=>n%i&&n>i?t(i+1):(0<n&&n<=i?1:0),c=-1,a=>r=s=>(++c,0<=s&&s<a.length?(p(s)(2)?r(s-a[s]):0||([a[s],s]=[0,a[s]])[1]?r(s):0):c)

f=(p=n=>t=i=>n%i&&n>i?t(i+1):(0<n&&n<=i?1:0),c=-1,a=>r=s=>(++c,0<=s&&s<a.length?(p(s)(2)?r(s-a[s]):0||([a[s],s]=[0,a[s]])[1]?r(s):0):c));

let test_data = [[[1,4,5,6,8,10,14,15,2,2,4,5,7],4],
                 [[2,5,6,8,1,2,3],3],
                 [[2,0,2],2],
                 [[14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11],5]];
for (test of test_data) {
    c = -1;
    console.log(f(test[0])(test[1]));
}

সম্পাদনা 1: ওফস, পদক্ষেপের সংখ্যার প্রত্যাবর্তনের বিষয়ে কিছুটা বাদ পড়েছে। শীঘ্রই ঠিক করা ঠিক।

সম্পাদনা 2: স্থির


3

র‌্যাকেট, 183 156 বাইট

সম্ভবত আরও বাইটস আরও গল্ফিংয়ের সাথে সাশ্রয়যোগ্য তবে এটি আমার জন্য। :)

(require math)(define(e l i[v'()][g length])(cond[(memq i v)#f][(not(< -1 i(g l)))(g v)][else(e l((λ(a)(if(prime? i)(- i a)a))(list-ref l i))(cons i v))]))

ক্লিনার ফাংশন সহ টেস্ট স্যুট সহ সম্পূর্ণ মডিউল:

#lang racket

(require math)

(define (e l i [v'()] [g length])
  (cond
    [(memq i v) #f]
    [(not (< -1 i (g l))) (g v)]
    [else (e l
             ((λ (a) (if (prime? i)
                         (- i a)
                         a))
              (list-ref l i))
             (cons i v))]))

(module+ test
  (require rackunit)
  (define escape-tests
    '((((2 5 6 8 1 2 3) 3) . 1)
      (((2 0 2) 2) . #f)
      (((14 1 2 5 1 3 51 5 12 3 4 41 15 4 12 243 51 2 14 51 12 11) 5) . 6)))
  (for ([t escape-tests])
    (check-equal? (apply e (car t)) (cdr t) (~a t))))

এটি চালান raco test e.rkt

@Cat জন্য মেজর গৌরব অনথিভুক্ত আবিষ্কার prime?ফাংশন


2

জাভা, 163 160 বাইট

boolean p(int n){for(int i=2;i<n;)if(n%i++==0)return 0>1;return 1>0;}
int f(int[]a,int n){return n<0||n>=a.length?1:p(n)?n<a[n]?1:1+f(a,a[n-a[n]]):1+f(a,a[n]);}

p(n)প্রাইম টেস্টিংয়ের f(a,n)জন্য, পালাবার কাজটির জন্য। ব্যবহার:

public static void main(String[] args) {
    int[] array = {14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11};
    System.out.println(f(array, 5));
}

অবরুদ্ধ সংস্করণ:

static boolean isPrime(int n) {
    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

static int escape(int[] array, int n) {
    if (n < 0 || n >= array.length) {
        return 1;
    } else if (isPrime(n)) {
        if (n < array[n]) {
            return 1;
        } else {
            return 1 + escape(array, array[n - array[n]]);
        }
    } else {
        return 1 + escape(array, array[n]);
    }
}

1

পার্ল 6 , 85 বাইট

->\n,\a{{.[+a].defined??0!!+$_}(lazy n,{.is-prime??$_- a[$_]!!a[$_]}...^!(0 <=* <a))}

ব্যাখ্যা:

lazy n, { .is-prime ?? $_ - a[$_] !! a[$_] } ...^ !(0 <= * < a)

এটি নিয়ম অনুসারে সূচকগুলির অলস ক্রম। যদি সূচকটি শেষ পর্যন্ত ইনপুট অ্যারের সীমা ছাড়িয়ে যায় ( !(0 <= * < a)শর্ত), সিকোয়েন্সটি সীমাবদ্ধ; অন্যথায়, সূচকগুলি চূড়ান্তভাবে অসীম।

এই ক্রমটি অভ্যন্তরীণ বেনামে ফাংশনকে খাওয়ানো হয়:

{ .[+a].defined ?? 0 !! +$_ }

যদি অনুক্রমটি ইনপুট অ্যারের আকারের দ্বারা প্রদত্ত সূচকে সংজ্ঞায়িত করা হয় তবে এটি অবশ্যই একটি অসীম চক্র প্রবেশ করেছে, তাই 0ফিরে আসবে। অন্যথায়, ক্রমের আকারটি +$_ফেরত দেওয়া হবে।


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