আইটেম সংগ্রহ এবং রাখুন


13

এই চ্যালেঞ্জের লক্ষ্য হ'ল একটি তালিকাতে নির্বাচিত আইটেমগুলি সংগ্রহ করা এবং তাদের তালিকার একটি নির্দিষ্ট স্থানে নিয়ে যাওয়া।

ভিজ্যুয়াল উদাহরণ হিসাবে, ইনপুট মানগুলি (কালো রঙের বাক্সযুক্ত পূর্ণসংখ্যার দ্বারা উপস্থাপিত) এবং সত্যবাদী মানগুলির একটি সম্পর্কিত তালিকা নিন যেখানে সত্য চিহ্নিত করে আইটেমটি নির্বাচিত হয় (নীল বাক্সগুলি উপস্থাপন করে যেখানে Tসত্যবাদী এবং Fমিথ্যা):

এখানে চিত্র বর্ণনা লিখুন

প্রথম যৌক্তিক পদক্ষেপটি সত্যগুলিকে চিহ্নিত করা আইটেমগুলিকে তাদের সম্পর্কিত তালিকায় পৃথক করা separate নোট করুন যে প্রতিটি তালিকার আপেক্ষিক ক্রম বজায় রাখতে হবে (অর্থাত বাছাইকৃত আইটেমগুলির ক্রম অবশ্যই হবে 1,4,5এবং নির্বাচিত আইটেমগুলির ক্রম অবশ্যই হবে 2,3,6,7)!

এখানে চিত্র বর্ণনা লিখুন

দ্বিতীয় যৌক্তিক পদক্ষেপটি নির্বাচিত আইটেমের অবশিষ্ট তালিকায় একটি সূচক দেওয়া হয়, প্রদত্ত সূচকে আইটেমের আগে নির্বাচিত সমস্ত আইটেম .োকান। ধরুন ইনডেক্সিং 0 থেকে শুরু হয়, ধরুন আপনি সূচক 3-এ নির্বাচনটি সন্নিবেশ করতে চান এটি 7বাক্সের আগে স্পটটির সাথে মিলে যায় , সুতরাং নির্বাচিত আইটেমগুলি beforeোকানো উচিত 7

এখানে চিত্র বর্ণনা লিখুন

চূড়ান্ত সমাধান হয় 2,3,6,1,4,5,7

নোট করুন যে এই যৌক্তিক চিত্রটি এটি করা যেতে পারে এমন এক উপায়ে চিত্রিত করে; যতক্ষণ না আউটপুট সর্বদা একই পর্যবেক্ষণযোগ্য ফলাফল উত্পন্ন করে ততক্ষণ আপনার প্রোগ্রামকে একই যৌক্তিক পদক্ষেপ গ্রহণের দরকার নেই।

ইনপুট

আপনার প্রোগ্রামটি 3 ইনপুট দেওয়া হয়:

  1. আইটেমগুলি প্রতিনিধিত্ব করে পূর্ণসংখ্যার একটি তালিকা। এটি একটি খালি তালিকা হতে পারে। এই তালিকাটি সর্বদা অনন্য ইতিবাচক পূর্ণসংখ্যার সমন্বয়ে গঠিত হবে, অগত্যা বাছাই করা ক্রমে নয় (অর্থাত্ 5 টি তালিকায় দু'বার থাকবে না)।
  2. আইটেমের তালিকার সমান দৈর্ঘ্যের সাথে সত্যবাদী / মিথ্যা মানগুলির একটি তালিকা, যেখানে সত্যবাদী মান প্রতিনিধিত্ব করে যে একই সূচীতে আইটেমটি নির্বাচন করা হয়েছে।
  3. একটি পূর্ণসংখ্যা যেখানে নির্বাচন সন্নিবেশ করানো হবে তা উপস্থাপন করে। তালিকার প্রথম আইটেমের সূচিটি যতক্ষণ আপনার প্রোগ্রামের প্রতিটি রানে স্থির থাকে তা আপনি চয়ন করতে পারেন (যেমন প্রথম আইটেমটি সূচক 0 বা সূচক 1 হতে পারে)। আপনার প্রোগ্রামটি কোন কনভেনশন মেনে চলে তা দয়া করে নির্দিষ্ট করুন। এই সূচকটি সীমার মধ্যে হওয়া উচিত [starting_idx, ending_idx+1], অর্থাৎ এটি সর্বদা একটি বৈধ সূচক হবে। কেস সূচকটির জন্য ending_idx+1, তালিকাটি তালিকার শেষে সন্নিবেশ করানো উচিত। আপনি ধরে নিতে পারেন যে এই পূর্ণসংখ্যাটি আপনার ভাষার স্থানীয় সংখ্যার সাথে খাপ খায়।

ইনপুটটি যে কোনও উত্স থেকে পছন্দসই (stdio, ফাংশন প্যারামিটার, ইত্যাদি) থেকে আসতে পারে

আউটপুট

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

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

নিম্নলিখিত পরীক্ষার সমস্ত ক্ষেত্রে 0-ভিত্তিক সূচী অনুমান করা হয়। আমি নির্বাচনের মুখোশের জন্য যথাক্রমে মিথ্যা / সত্যবাদী মানগুলি নির্দেশ করতে 0 এবং 1 ব্যবহার করেছি।

পরীক্ষার কেসগুলি তালিকাগুলি হিসাবে ফর্ম্যাট করা আছে [a,b,c], তবে যতক্ষণ না আপনার ইনপুট তালিকাগুলি সীমাবদ্ধ ক্রমগুলি উপস্থাপিত করে তা ঠিক।

ইনপুট:

[]
[]
0

আউটপুট:

[]

ইনপুট:

[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3

আউটপুট:

[2,3,6,1,4,5,7]

ইনপুট:

[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0

আউটপুট:

[1,4,5,2,3,6,7]

ইনপুট:

[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4

আউটপুট:

[2,3,6,7,1,4,5]

ইনপুট:

[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0

আউটপুট:

[1,2,3,4,5,6,7]

ইনপুট:

[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5

আউটপুট:

[1,2,3,4,5,6,7]

ইনপুট:

[1,3,2,5,4,6]
[1,0,0,1,1,0]
3

আউটপুট:

[3,2,6,1,5,4]

স্কোরিং

এটি কোড গল্ফ; বাইট জিতে সংক্ষিপ্ত উত্তর। স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে। আপনার পছন্দসই কোনও বিল্ট-ইন ব্যবহার করার অনুমতি রয়েছে।


ইনপুট এবং আউটপুট কি "" 1 2 3 "," 1 0 0 ", 1 'এর মতো হতে পারে?
betseg

হ্যাঁ, দুটি সীমাবদ্ধ অর্ডার পূর্ণসংখ্যার সিকোয়েন্স এবং একটি পূর্ণসংখ্যার সূচক যা উপস্থাপন করে তা ঠিক।
helloworld922

প্রথম অ্যারেতে নেতিবাচক আইটেম বা শূন্য থাকবে?
ফাঁস নুন

আমি না বলতে চাই, তবে আপনার কী সমাধান রয়েছে যার জন্য এটির প্রয়োজন এটি সম্পর্কেও আমি আগ্রহী। হ্যাঁ, আপনি ধরে নিতে পারেন প্রথম তালিকায় কেবল ইতিবাচক পূর্ণসংখ্যা রয়েছে।
helloworld922

@ পিটারটেলর নং "সত্যবাদী / মিথ্যা মানগুলির একটি তালিকা ..." পড়তে আমি এটি স্থির করেছি। সত্যবাদী / মিথ্যা মানগুলির "প্রকার" বর্ণনা করার জন্য কি কোনও ভাল নাম আছে? বুলিয়ান-মত?
heelorld922

উত্তর:


10

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

&)i:&)bwv

এই সমাধানটি দ্বিতীয় ইনপুট হিসাবে T(সত্য) এবং F(মিথ্যা) মানগুলির একটি অ্যারে গ্রহণ করে । খালি অ্যারে সহ প্রথম পরীক্ষার ক্ষেত্রেও এটি কোনও আউটপুট দেয় না।

অনলাইনে চেষ্টা করে দেখুন! সমস্ত পরীক্ষার ক্ষেত্রে সামান্য পরিবর্তিত সংস্করণ

ব্যাখ্যা

    % Implicitly grab the first two inputs
&)  % Index into the first array using the boolean, places two items on the stack:
    % 1) The values where the boolean is TRUE and 2) the values where it is FALSE.
i   % Explicitly grab the third input (N)
:   % Create an array from 1...N
&)  % Index into the FALSE group using this array as an index. Puts two items on the stack:
    % 1) The first N elements of the FALSE group and 2) other members of the FALSE group
b   % Bubble the TRUE members up to the top of the stack
w   % Flip the top two stack elements to get things in the right order
v   % Vertically concatenate all arrays on the stack
    % Implicitly display the result

5

গণিত, 66 62 বাইট

@ মার্টিনএেন্ডার থেকে 4 টি বাইট সংরক্ষণ করা হয়েছে

a=#2~Extract~Position[#3,#4>0]&;##&@@@Insert[##~a~0,##~a~1,#]&

বেনামে ফাংশন। 1-ভিত্তিক সূচক, তালিকা এবং চিহ্নিতকারীগুলিকে ইনপুট হিসাবে গ্রহণ করে এবং আউটপুট হিসাবে পুনরায় সাজানো তালিকাটি প্রদান করে।


3

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

m%n=[e|(e,b)<-zip m n,b]
(l#s)p|(h,t)<-splitAt p$l%(not<$>s)=h++l%s++t

ব্যবহারের উদাহরণ: ([1,2,3,4,5,6,7]#[True,False,False,True,True,False,False]) 3-> [2,3,6,1,4,5,7]

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

m%n=[e|(e,b)<-zip m n,b]        -- helper function, that extracts the elements of m
                                -- with corresponding True values in n
(l#s)p                          -- l: list of values
                                   s: list of booleans
                                   p: position to insert
  |                   (not<$>s) -- negate the booleans in s
                    l%          -- extract elements of l
          splitAt p             -- split this list at index p
   (h,t)<-                      -- bind h to the part before the split
                                -- t to the part after the split
     = h++l%s++t                -- insert elements at True positions between h and t

3

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

(a,b,c)=>(d=a.filter((_,i)=>!b[i]),d.splice(c,0,...a.filter((_,i)=>b[i])),d)

1

জেলি , 10 বাইট

¬+\>⁵Ḥ³oỤị

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

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

¬+\>⁵Ḥ³oỤị  Main link.
            Arguments: x (list of Booleans), y (list of inputs), z (index)
¬           Logical NOT; invert all Booleans in x.
 +\         Take the cumulative sum.
            This replaces each entry with the number of zeroes up to that entry.
   >⁵       Compare the results with z.
            This yields 0 for the first z zeroes, 1 for all others. The behavior
            for ones is not important.
    Ḥ       Unhalve; multiply the previous resulting by 2.
     ³o     Take the element-wise logical NOT of x and the previous result.
            This replaces all but the first z zeroes in x with twos.
       Ụ    Grade up; sort the indices of the result according to the corr. values.
        ị   Retrieve the items of y at those indices.

0

সি #, 132 বাইট

int[]r(int[]a,bool[]b,int l){var x=a.Where((i,j)=>!b[j]);return x.Take(l).Concat(a.Where((i,j)=>b[j])).Concat(x.Skip(l)).ToArray();}

ungolfed:

    public static int[] r(int[] a,bool[] b,int l)
    {
        var x = a.Where((i, j) => !b[j]);
        return x.Take(l).Concat(a.Where((i, j) => b[j])).Concat(x.Skip(l)).ToArray();
    }

উন্নতি ধারণা প্রশংসা।


0

পাইথন 3, 91 বাইট

def f(a,x,i):b=[c for c,z in zip(a,x)if z<1];return b[:i]+[c for c in a if(c in b)<1]+b[i:]

যেখানে aউপাদান / সংখ্যার তালিকা, xহয় True/Falseতালিকা এবং iসূচি।

উন্নত পাঠযোগ্যতার জন্য একাধিক সংস্করণ:

def f(a,x,i):
    b=[c for c,z in zip(a,x)if z<1]
    return b[:i]+[c for c in a if(c in b)<1]+b[i:] 

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

থেকে কল zip(a,x)যেখানে তাদের প্রতিটি তথ্য ধারণ করে tuples এর একটি তালিকায় ফলাফল: (element,0|1)। তারপরে একটি তালিকা বোধগম্য উপাদানগুলির একটি 0/Falseমূল্য যুক্ত রয়েছে তা নির্ধারণ করতে এবং সেগুলি ভেরিয়েবলের মধ্যে সঞ্চয় করতে ব্যবহৃত হয় b

সুতরাং [c for c,z in zip(a,x)if z<1]একটি তালিকা তৈরি করে যার সাথে সমস্ত উপাদান রয়েছে যার একটি 0( False) মান যুক্ত রয়েছে।

এর পর, উপাদান যা আছে তালিকা True|1(যা পরীক্ষণ যা উপাদান দ্বারা নির্ধারিত হয় মান যুক্ত aমধ্যে উপলব্ধ নয় b: [c for c in a if(c in b)<1]) সব উপাদান আছে একটি সঙ্গে তালিকায় ঢোকানো হয় 0( Falseযুক্ত (তালিকা) মান bনির্দিষ্ট সূচিতে) iএবং ফলাফল তালিকা ফিরে আসে।


0

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

def f(x,y,z):
 t,f=[],[]
 for n in range(len(x)):(f,t)[y[n]].append(x[n])
 f[z:z]=t
 return f

পুরানো সংস্করণ:

def f(x,y,z):
 t,f=[],[]
 for n in range(len(x)):
  if y[n]:t+=[x[n]]
  else:f+=[x[n]]
 f[z:z]=t
 return f
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.