সময়ে বিন্ন


12

এই চ্যালেঞ্জের কাজটি হ'ল একটি বিন্যাসের উপাদানগুলিকে সময় বিভক্ত করা। ইনপুটটি হ'ল ইভেন্টগুলির সময়ের প্রতিনিধিত্বকারী ধনাত্মক পূর্ণসংখ্যার একটি অ-হ্রাসকারী অ্যারে এবং প্রতিটি বিনের আকারের প্রতিনিধিত্ব করে এমন একটি পূর্ণসংখ্যা হবে। আসুন একটি উদাহরণ দিয়ে শুরু করি। আমরা ইনপুট অ্যারে Aএবং আউটপুট অ্যারে কল করি O

`A = [1,1,1,2,7,10]` and `bin_size = 2`.

`O = [4,0,0,1,1]`.

কেন ? একটি সহ bin_size = 2, আমাদের নীচের অন্তরগুলি থাকবে: (0,2], (2,4], (4,6], (6,8], (8,10]যেখানে চারটি আইটেম (1,1,1,2)প্রথম ব্যবধানের (0,2]মধ্যে থাকে, দ্বিতীয় এবং তৃতীয় ব্যবধানের 7মধ্যে কোনওটি নয়, একটি বিরতিতে (6,8]এবং একটি 10বিরতিতে (8,10]

আপনার কোডটি দৈর্ঘ্যের প্রতিটি বিরতি বিবেচনা করে bin_sizeশুরু করতে হবে এবং প্রতিটিতে 0কতটি সংখ্যা Aরয়েছে তা গণনা করা উচিত । আপনার সর্বদা একটি বিনের মধ্যে একটি বিরতির ডান হাত অন্তর্ভুক্ত করা উচিত যাতে উপরের উদাহরণে 2গণনাতে অন্তর্ভুক্ত করা হয় 4। আপনার কোড ইনপুট এবং আউটপুট দৈর্ঘ্যের যোগফল রৈখিক সময়ে চলতে হবে।

আরও উদাহরণ:

`A = [1,2,7,12,15]`  and `bin_size = 5`.

`O = [2, 1, 2]`.

`A = [1,2,7,12,15]`  and `bin_size = 3`.

`O = [2,0,1,1,1]`.

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


ট্রেইলিং 0এস সহ আউটপুটগুলি কি অনুমোদিত? তার [2,0,1,1,1,0]বদলে ফিরছি [2,0,1,1,1]?
কেভিন ক্রুইজসেন

অনুগ্রহ করে কোনও পিছনে জিরো নেই।

2
সর্বাধিক অ্যারের মানটি একাধিক নয় এমন পরিস্থিতিতে কী bin_sizeআমাদের সত্যই এইগুলি পরিচালনা করা উচিত? দেখে মনে হয় বেশিরভাগ উত্তরই তা করে তবে তা যদি হয় তবে বিভ্রান্তি রোধ করতে এই দৃশ্যের জন্য একটি পরীক্ষার কেস যুক্ত করা ভাল হবে।
কিরিল এল

@KirillL। হ্যাঁ সেগুলিও পরিচালনা করা উচিত।

1
@ জিপিএস 0 কোনও ধনাত্মক পূর্ণসংখ্যার নয়। এটি কোনও দুর্ঘটনা নয় :)

উত্তর:


9

আর , 48 বাইট

function(n,s)table(cut(n,0:ceiling(max(n)/s)*s))

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

আবার, tableএবং cutTing একটি থেকে factorbinning জন্য কৌতুক করতে। উদাহরণস্বরূপ, বিরতি স্বরলিপিতে vectorযেখানে namesঅন্তর অন্তরগুলি এমন একটি নামের আউটপুট দেয় (0,5]

সম্পাদনা: পূর্ববর্তী সংস্করণে ফিরে যান যা sভাগ না করে যখন কাজ করে n


আমি সত্যিই আর করি না, তবে টিআইওতে এই অংশটি format you [most likely do not] find convenientছাড়াই আউটপুট প্রদর্শিত হবে table
আমার সর্বনাম

@ সোনোন ঠিক সে কারণেই আছে there cutঅন্তরগুলি প্রদত্ত স্তরের সাথে ভেক্টরকে উপাদানগুলিতে বিভক্ত করে এবং এর tableইনপুটটিতে প্রতিটি অনন্য মানের উপস্থিতি গণনা করে।
জিউসেপ

1
@ সোমন আঃ, আমি আপনার মন্তব্যটি ভুল বুঝেছি। না, আমি মনে করি যে এটি বৈধ হবে না যেহেতু আমাদের প্রতিটি বিন গণনা প্রয়োজন।
জিউসেপে

1
সম্পূর্ণরূপে পরীক্ষা নেই, কিন্তু আমি মনে করি আপনি reaplacing বাইট একটি দম্পতি সংরক্ষণ করতে পারবেন 0:ceiling(max(n)/s)*sসঙ্গে seq(0,max(n)+s-1,s)। এটি প্রশ্নের অন্তত দুটি নমুনার জন্য কাজ করে।
গ্রেগোর টমাস

1
@ গ্রেগর হুম যদি কাজ করে তবে 1:max(n/s+1)*s-sতা আরও উন্নতি হয় যেহেতু দু'টি সমতুল্য
জিউসেপ্পে



3

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

I,s=input()
B=[0]*(~-I[-1]/s+1)
for i in I:B[~-i/s]+=1
print B

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


1
প্রথমত: দুর্দান্ত উত্তর, আমি ইতিমধ্যে এটি +1-এড করেছি (এবং জাভাতে একটি বন্দর তৈরি করেছি, কারণ এটি আমার যা ছিল তার চেয়ে সামান্য খাটো)। ট্রেলিং শূন্যগুলি অনুমোদিত নয় (কেবল ওপিকে জিজ্ঞাসা করা হয়েছে), I[-1]/s+1তার ~-I[-1]/s+1পরিবর্তে হওয়া উচিত ।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন নোটিশের জন্য ধন্যবাদ!
ডেড পসসাম

3

আমি 05AB1E এটি জানি না, তবে এটি A.count সর্বাধিক (এ) কল বলে মনে হচ্ছে , সুতরাং রান সময়টি লেন (এ) + লেন (ও) এর ক্ষেত্রে রৈখিক নয় । এটা সঠিক নাকি আমি কিছু ভুল পেয়েছি?
ডেনিস

@ ডেনিস গণনা হবে O(max(A)*max(A))... সুতরাং এটি সর্বোচ্চ A এর চতুর্ভুজ ... ওপি নির্দিষ্ট করে এটির ক্ষেত্রে লিনিয়ার হতে হবে ... ঠিক কী?
ম্যাজিক অক্টোপাস উরান

2
@ ম্যাজিক অ্যাক্টপাস ইউরান সর্বশেষ সংশোধন অনুসারে আপনার কোডটি ইনপুট এবং আউটপুটটির দৈর্ঘ্যের যোগফলের সাথে রৈখিক সময়ে চলতে হবে
ডেনিস

2
@ ডেনিস যেগুলি বরং স্বেচ্ছাচারী বলে মনে হচ্ছে।
ম্যাজিক অক্টোপাস উর্ন

2
@ ম্যাজিক অ্যাক্টোপাস উর্ন আমার মনে হয় এই প্রশ্নের লিনিয়ার সময়ের জন্য এটিই একমাত্র বুদ্ধিমান সংজ্ঞা।

2

এপিএল + উইন, 23 বাইট

বিন এর স্ক্রিন ইনপুট জন্য প্রম্পট এবং তারপর পূর্ণসংখ্যার ভেক্টর:

+⌿<\v∘.≤b×⍳⌈⌈/(v←⎕)÷b←⎕    

ব্যাখ্যা:

⎕ Prompt for input

⌈⌈/(v←⎕)÷b←⎕ divide the integers by bin size, take maximum and round up for number of bins

b×⍳ take number of bins from previous step and create a vector of bin upper boundaries

v∘.≤ apply outer product to generate boolean matrix where elements of vector ≤ boundaries

<\ switch off all 1's after first 1 in each row to filter multiple bin allocations

+⌿ sum columns for the result


2

জাভা 8, 75 বাইট

a->b->{var r=new int[~-a[a.length-1]/b+1];for(int i:a)r[~-i/b]++;return r;}

@ ডেডপসসামের পাইথন 2 উত্তর বন্দর , সুতরাং তার উত্তরটি উঁচুতে নিশ্চিত করুন!

ব্যাখ্যা:

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

a->b->{          // Method with integer-array and integer parameters and no return-type
  var r=new int[~-a[a.length-1]/b+1];
                 //  Result integer-array of size `((last_item-1)/bin_length)+1`
  for(int i:a)   //  Loop over the input-array
    r[~-i/b]++;  //   Increase the value at index `(i+1)/bin_length` by 1
  return r;}     //  Return the result-array


2

জাভাস্ক্রিপ্ট (ES6), 60 বাইট / ও (লেন (ক) + সর্বাধিক (ক) / এন)

সংরক্ষিত 5 বাইট @ নীলকে ধন্যবাদ

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (a)(n)

a=>n=>[...a.map(x=>o[x=~-x/n|0]=-~o[x],o=[])&&o].map(n=>~~n)

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

অথবা খালি উপাদান অনুমোদিত হলে কেবল 43 বাইট / ও (লেন (ক))


[...o].map(n=>n|0)কম বাইটে দ্বিতীয় সমাধান থেকে প্রথম আউটপুট পায়।
নীল

@ নীল নিশ্চিত না যে আমি কেন এতটা বিশৃঙ্খলাযুক্ত হয়েছি। : - /
আর্নল্ড


1

পাইথ, 23 22 বাইট

Jm/tdeQhQK*]ZheJhXRK1J

এখানে চেষ্টা করুন

Jm/tdeQhQK*]ZheJhXRK1J
Jm/tdeQhQ                 Find the bin for each time and save them as J.
         K*]ZheJ          Create empty bins.
                 XRK1J    Increment the bins for each time within them.
                h         Take the first (because mapping returned copies).

1

রুবি , 53 50 বাইট

সম্পাদনা: -২ বাইট আইমনোটমায়ার্ড দ্বারা।

->a,b{(0..~-a.max/b).map{|i|a.count{|x|~-x/b==i}}}

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


(যেমন => তবে দেওয়া উচিত ) এর a.maxএকাধিক না হলে এটি কাজ করে না । আমি একই পদ্ধতির চেষ্টা করেছিলাম। bf[[1,1,1,2,7,10],3][4, 0, 1][4, 0, 2]
মনিকা পুনরায় ইনস্টল করুন - notmaynard


ঠিক আছে, এটি একটি ফ্লোট সর্বাধিক পরিসরের মানটিতে স্যুইচ করার মাধ্যমে স্থিরযোগ্য তবে আমি ওপিকেও টাস্কের বিবরণে এটি পরিষ্কার করতে বলব।
কিরিল এল


ভাল, আরও ভাল, ধন্যবাদ।
কিরিল এল।

1

এই ধাঁধাটি মূলত একটি গণনা বাছাই। আমরা প্রথমে ইনপুটটি না দিয়ে আউটপুটটির দৈর্ঘ্য জানি না।

সি (ঝনঝন) , 53 বাইট

i,j;f(*A,l,b,*O){for(j=0;j<l;O[(A[j++]+b-1)/b-1]++);}

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

এই সমাধানটি নিম্নলিখিত পরামিতিগুলি গ্রহণ করে:
A আউটপুট জন্য
lএকটি
bবিন_ সাইজ
Oস্টোরেজ ইনপুট অ্যারে দৈর্ঘ্য । O- এ অবশ্যই যথেষ্ট দৈর্ঘ্য
এবং আউটপুট প্রদান করতে হবে

এই সমাধানটির একটি প্রতিবন্ধকতা রয়েছে: এটি আউটপুট অ্যারে ও এর দৈর্ঘ্য ফিরিয়ে দেয় না এবং তাই কলার জানেন না যে কত মুদ্রণ করতে হবে।

নিম্নলিখিত সংস্করণটি সেই প্রতিবন্ধকে কাটিয়ে উঠেছে:

সি (ঝনঝন) , 79 বাইট

i,j,k;f(*A,l,b,*O,*m){for(k=j=0;j<l;O[i=(A[j++]+b-1)/b-1]++,k=k>i?k:i);*m=++k;}

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

এটি একটি অতিরিক্ত প্যারামিটার নেয় mএবং এর দৈর্ঘ্য দেয়O দেয়। এটি আমার 26 বাইট খরচ।


1

সি (জিসিসি) , 102 90 89 86 বাইট

#define P!printf("%d ",k)
i,j,k;f(s){for(i=s;~scanf("%d",&j);k++)for(;j>i;i+=s)k=P;P;}

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

কেভিন ক্রুইজসেনকে 12 বাইট ছাড়ার জন্য এবং আরও 4 বাইটের জন্য সিলিংক্যাটকে ধন্যবাদ!


1
90 বাইট , জন্য-লুপ ব্যবহার সরিয়ে int, এবং পরিবর্তন ==1করার >0
কেভিন ক্রুইজসেন

আপনাকে স্বাগতম. বিটিডব্লিউ, কেবল একটি নোট, এটি বর্তমানে অবৈধ (ঠিক এখন আমার মুছে ফেলা জাভা উত্তরটি ছিল)। এটি O(n)সময়মতো চালানো দরকার , সুতরাং আপনি কোনও লুপের জন্য নেস্ট করতে পারবেন না .. (আপনার সি ++ উত্তরটি ঠিক আছে, যদিও আমি এটি +1-এড করেছি :) :))
কেভিন ক্রুইজসেন

এটি এখনও ও (এন)। অভ্যন্তরীণ লুপটি সর্বদা একটি মান মুদ্রণ করবে এবং আমরা কেবলমাত্র (সর্বোচ্চ মান + 1) / মোট বিন্যাস আকারগুলি মুদ্রণ করব।
জি স্লিপেন

হুম, তবে O(n)ইনপুট আইটেমগুলির উপর লুপ করে ইতিমধ্যে বাহ্যিক লুপ নয় । এমনকি যদি অভ্যন্তরীণ লুপটি কেবল 2 বার লুপ করে তবে এটি ইতিমধ্যে উপরে O(n)। বা আমি Oকি কোনও ভুল বোঝাবুঝি করছি .. আমাকে অবশ্যই স্বীকার করতে হবে
সময়গুলি

1
তবে অভ্যন্তরীণ লুপটি সমস্ত ইনপুট উপাদানগুলিতে পুনরাবৃত্তি করে না, এটি কেবল সর্বশেষ ইনপুট উপাদানটির সাথে সম্পর্কিত অবস্থানে "ধরতে" মুদ্রণের জন্য প্রয়োজনীয় অনেকগুলি আউটপুট মানগুলিতে পুনরাবৃত্তি করে। যদি ইনপুট ভেক্টরটিতে প্রচুর পরিমাণে সদৃশ বা মান থাকে যা বিন আকারের চেয়ে পৃথক হয় তবে অভ্যন্তরীণ লুপটি কোনও পুনরাবৃত্তি সম্পাদন করবে না। অন্যদিকে, যদি ইনপুট ভেক্টরটি খুব বিরল হয়, তবে অভ্যন্তরীণ লুপটি 0 এর মুদ্রণ করে আরও পুনরাবৃত্তি করবে। সুতরাং সঠিক হতে কোডটি ও ((ইনপুট উপাদানের সংখ্যা) + (শেষ উপাদান / বিন আকার)) সময়ে চালিত হয়। এটি এখনও লিনিয়ার।
জি স্লাইপেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.