প্রথম সর্বশেষ সর্বশেষ প্রথম


11

চ্যালেঞ্জ

কাজটি সহজ। একটি অ্যারে এবং প্রথম এবং শেষ মান দেওয়া হয়েছে: প্রথমের পরে সর্বশেষের প্রথমটি এবং শেষের আগে প্রথমটির সর্বশেষ ফিরিয়ে দিন।


বা সহজভাবে: একটি অ্যারে, var1, var2 দেওয়া।

উদাহরণ অ্যারে:

[var2,, var1,, var2,, var2, var1, var2,]

ফেরত দিন:

  • অ্যারে প্রদর্শিত প্রথম var1 এর ডান দিকে প্রথম var2 এর সূচক।

[বর্ণ 2, প্রথম বর্ণ 1 , প্রথম বর্ণ 2 , দ্বিতীয় বর্ণ 2, বর্ণ 1, তৃতীয় বর্ণ 2,]

  • অ্যারেতে উপস্থিত সর্বশেষ ভার 2 এর বাম দিকে প্রথম বর্ণ 1 এর সূচক।

[বর্ণ 2, দ্বিতীয় বর্ণ 1,, বর্ণ 2,, বর্ণ 2, প্রথম বর্ণ 1 , শেষ বর্ণ 2 ,]

ইনপুট

দুটি স্বতন্ত্র ধনাত্মক পূর্ণসংখ্যা

ধনাত্মক পূর্ণসংখ্যার অ্যারে

আউটপুট

উত্তরগুলির সূচী, ক্রমানুসারে

বিধি

অ্যারেতে প্রতিটি ভেরিয়েবলের মধ্যে কমপক্ষে একটি থাকতে হবে (সর্বনিম্ন 2 আকার)

ইনপুট কাজ অনুমান

উদাহরণ: 0, 1 [1, 0]বা অনুরূপ ব্যর্থ হবে

আইও নমনীয়

উদাহরণ

Input
First = 2; Last = 4; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]

Output
2, 9

Input
First = 4; Last = 2; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]

Output
3, 6

Input
First = 0; Last = 1; [0, 1]

Output
1, 0

3
করতে var1সমান হতে var2?
এনজিএন

1
@ জিএন না, অগত্যা নয়। যদি তারা হয় তবে এটি বেশিরভাগ তুচ্ছ ফলাফলের দিকে নিয়ে যেত, সুতরাং এই কেসটি পরিচালনা করার প্রয়োজন নেই not
WretchedLout

3
পিপিসিজিতে আপনাকে স্বাগতম!
জোনাথন অ্যালান

2
আমরা কি ফলাফলকে বিপরীত ক্রমে ফিরিয়ে দিতে পারি? উদাহরণস্বরূপ, পরীক্ষার বিষয় স্থাপিত হবে 9, 2, 6, 3এবং 0, 1(1-ইন্ডেক্স আউটপুট বা প্লাস এক হলে) যথাক্রমে।
এরিক আউটগল্ফার 12

1
দ্বিতীয় স্থানে @ যাকোব, বর্তমান শব্দটির উদাহরণগুলির সাথে মেলে না।
নিট

উত্তর:





4

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

(x,y,a)=>a.map(P=(v,i)=>v-y?v-x?0:a=i:1/(p=a)?P=+P||i:0)&&[P,p]

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

মন্তব্য

(x, y, a) =>          // given the two integers x, y and the array a[]
  a.map(P =           // initialize P to a non-numeric value
            (v, i) => // for each value v at position i in a[]:
    v - y ?           //   if v is not equal to y:
      v - x ?         //     if v is not equal to x:
        0             //       do nothing
      :               //     else (v = x):
        a = i         //       save the current position in a
    :                 //   else (v = y):
      1 / (p = a) ?   //     update p to a (last position of x); if p is numeric (>= 0):
        P = +P || i   //       unless P is also already numeric, update it to i
                      //       (if P is numeric, it's necessarily greater than 0 because
                      //       we've also seen x before; that's why +P works)
      :               //     else:
        0             //       do nothing
  )                   // end of map()
  && [P, p]           // return [P, p]

বিকল্প সংস্করণ

জেএস বিল্ট-ইনগুলি ব্যবহার করে, আরও সহজ উত্তর 79৯ বাইট:

(x,y,a)=>[a.indexOf(y,a.indexOf(x)),a.slice(0,a.lastIndexOf(y)).lastIndexOf(x)]

যা 75 বাইটে কিছুটা সংকুচিত হতে পারে:

(x,y,a)=>[a.indexOf(y,a.indexOf(x)),a.slice(0,a[L='lastIndexOf'](y))[L](x)]

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

সম্পাদনা করুন : @ নীল এটিকে একটি খুব সুন্দর 67-বাইটে হ্রাস করতে পরিচালিত :

(x,y,a,f=s=>a[z=y,y=x,x=z,s+=`ndexOf`](x,a[s](y)))=>[f`i`,f`lastI`]

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


lastIndexOfদুটি প্যারামিটার লাগে, যাতে এটি 70 বাইটের সরল উত্তর হ্রাস করে এবং আমি নিম্নলিখিত 67-বাইট সংস্করণটি নিয়ে আসতে সক্ষম হয়েছি:(x,y,a,f=s=>a[z=y,y=x,x=z,s+=`ndexOf`](x,a[s](y)))=>[f`i`,f`lastI`]
নীল

3

পাইথন 3 , 97 93 বাইট

-4 বাইট ovs ধন্যবাদ

def h(f,l,a,I=list.index):j=I(a,f);i=len(a)+~I(a[::-1],l);print(I(a[j:],l)+j,i-I(a[i::-1],f))

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


a-1-b == a + (-b-1) == a + ~b-1 বাইটের জন্য ব্যবহার করা যেতে পারে, indexএকটি ফাংশনটি একটি নাম নির্ধারণ করে এটি 93 বাইট পেয়ে যায়
ovs

2

জাপট , 27 25 24 বাইট

@ আরনাউল্ড উত্তরে অনুপ্রাণিত

ধন্যবাদ @ শেগি -২ বাইট এবং @ETH প্রোডাকশনস -১ বাইট

আমি সবেমাত্র জ্যাপ দিয়ে শুরু করেছি যাতে এটি আরও ভালতর উপায় হতে পারে \

[WsX=WbU)bV +XWsTWaV)aU]

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


1
জাপটে আপনাকে স্বাগতম :) আপনি সেই দ্বিগুণ স্থানগুলি )2 বাইট বাঁচানোর জন্য প্রারম্ভিকদের সাথে প্রতিস্থাপন করতে পারেন ।
শেগি

@ শেগি ট্যাঙ্কস! আমি এগুলি সম্পর্কে জানতাম না
লুইস ফিলিপ দে জেসুস মুনোজ

আপনার মত, আমিও নিশ্চিত যে একটি ছোট পদ্ধতি আছে। এই মুহুর্তে এটি বের করার চেষ্টা করার জন্য ব্রেইনস্পেসের দরকার নেই, যদিও!
শেগি

স্বাগত! আপনি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন X=WbU)...+X: এটি অনলাইন চেষ্টা করে দেখুন! আমি যদিও আরও একটি ছোট পদ্ধতি আবিষ্কার করার জন্য লড়াই করছি ...
ETH প্রোডাকশনগুলি

1

এপিএল (ডায়ালগ ইউনিকোড) , 42 বাইট এসবিসিএস

বেনামে টাসিট ইনফিক্স ফাংশন। বাম আর্গুমেন্ট হিসাবে var1, var2 এবং ডান যুক্তি হিসাবে অ্যারে নেয়।

{⍸<\(⍵=⊃⌽⍺)∧∨\⍵=⊃⍺},{⍸⌽<\(⍵=⊃⍺)∧∨\⍵=⊃⌽⍺}∘⌽

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



1

এমএটিএল , 27 বাইট

y=Y>/ti=PY>P/t3G=f1)w2G=f0)

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

পর্যায়ক্রমে একই বাইটকাউন্টের জন্য:

27 বাইট

y=Y>yi=*f1)y3G=PY>Pb2G=*f0)

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

দ্বিতীয়টি ব্যাখ্যা করা সহজ:

y   % implicitly get the first two inputs (the array and var1),
    %  and duplicate the first input
    %  stack: [[0 2 4 2 3 1 4 0 1 2 4 9] 2 [0 2 4 2 3 1 4 0 1 2 4 9]]
=   % compare and return logical (boolean) array
    %  stack: [[0 2 4 2 3 1 4 0 1 2 4 9] [0 1 0 1 0 0 0 0 0 1 0 0]]
Y>  % cumulative maximum - make all values after the first 1 also 1s
    %  stack: [[0 2 4 2 3 1 4 0 1 2 4 9] [0 1 1 1 1 1 1 1 1 1 1 1]]
    %  now we have 1s in positions at and after the first time var1 appears
y   % duplicate 2nd element in stack
    %  stack: [[0 2 4 2 3 1 4 0 1 2 4 9] [0 1 1 1 1 1 1 1 1 1 1 1] [0 2 4 2 3 1 4 0 1 2 4 9]]
i=  % compare with the next input (var2), returning a boolean array
    % stack: [[0 2 4 2 3 1 4 0 1 2 4 9] [0 1 1 1 1 1 1 1 1 1 1 1] [0 0 1 0 0 0 1 0 0 0 1 0]]
*   % multiply the two boolean arrays - so we'll have 1s only where var2 was present after the first occurrence of var1
    % stack: [[0 2 4 2 3 1 4 0 1 2 4 9] [0 0 1 0 0 0 1 0 0 0 1 0]]
f1) % find the index of the first 1 in that (this is our first result value)

কোডের দ্বিতীয় অংশটি এই পরিবর্তনগুলি বাদ দিয়ে একই কাজ করে:

  • ব্যবহারের 2Gদ্বিতীয় ইনপুট (var1 হল) এবং জন্য 3Gপ্রথম 3 য় ইনপুট (var2) পরিবর্তে অন্তর্নিহিত ইনপুট অথবা i, যেহেতু ঐ ধ্বংস করা হয়েছে
  • প্রথম ঘটনার পরিবর্তে সর্বশেষ ঘটনার আগে 1s পেতে, PY>Pপরিবর্তে (বাম থেকে ডানদিকে ফ্লিপ অ্যারে ব্যবহার করুন , সঞ্চিত সর্বাধিক পান, পিছনে ফ্লিপ করুন) ব্যবহার করুনY>
  • ব্যবহার f0)পেতে শেষ (তাই 0 অ্যারের গত সূচক উল্লেখ করতে নেওয়া হয়, কারণ MATL মডুলার ইন্ডেক্স ব্যবহার কাজ) স্থান যেখানে উভয় অবস্থার সত্য, প্রথম স্থানে পরিবর্তে

1

ম্যাটল্যাব (৮০ বাইট)

ইনপুট হয় x, yএবং a। যেহেতু ম্যাটল্যাব 1-সূচকযুক্ত তাই আপনার পরীক্ষার ক্ষেত্রে 1 টি যুক্ত করা উচিত।

xi=find(a==x);
yi=find(a==y);
yi(find(yi>xi(1),1))
xi(find(xi<yi(end),1,'last'))

পরীক্ষা ক্ষেত্রে:

x=4
y=2
a =  [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]

% 
xi=find(a==x);
yi=find(a==y);
yi(find(yi>xi(1),1))
xi(find(xi<yi(end),1,'last'))

ans =

     4


ans =

     7

0

জাভা 8, 114 বাইট

একটি ল্যাম্বদা একটি java.util.List<Integer>এবং দুটি intগুলি নিয়ে চলেছে (var1, var2) এবং কমা দ্বারা পৃথককৃত জুটি ফিরে আসবে।

(a,f,l)->a.indexOf(f)+a.subList(a.indexOf(f),a.size()).indexOf(l)+","+a.subList(0,a.lastIndexOf(l)).lastIndexOf(f)

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



0

জুলিয়া , 71 64 বাইট

ধন্যবাদ সূন্দর এবং তার find(A.==x)[]পরিবর্তে তার findfirst(A,x))

(A,x,y)->findnext(A,y,find(A.==x)[]),findprev(A,x,findlast(A,y))

আপনার ভাষা যদি 1-ভিত্তিক হয় তবে আপনি 1-ভিত্তিক সূচকটি ফিরে আসতে পারেন (এটি এখানে সর্বসম্মত sensকমত্য), সুতরাং -1 এর দরকার নেই। এছাড়াও, আপনি find(A.==x)[]পরিবর্তে ব্যবহার করে অন্য একটি বাইট সংরক্ষণ করতে পারেন findfirst(A,x)
-
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.