একটি তালিকা এন-চোটোমাইজ করুন


12

পূর্ণসংখ্যার একটি তালিকা দেওয়া L, এবং একটি পূর্ণসংখ্যা N, আউটপুট Lমধ্যে ফাটানো Nসমান lenghts এর sublists।

অবিভাজ্য দৈর্ঘ্য

যদি Nদৈর্ঘ্যের দৈর্ঘ্য বিভক্ত না হয় Lতবে সমস্ত উপলিস্টের সমান দৈর্ঘ্য থাকা সম্ভব নয়।

যাইহোক, আউটপুটটির শেষ সাবলিস্টটি হ'ল তালিকার বাকী অংশটি অন্তর্ভুক্ত করার জন্য তার দৈর্ঘ্যটিকে মানিয়ে নেয়।

এর অর্থ সর্বশেষটি Lবাদে সমস্ত সাবলিস্টির দৈর্ঘ্য হওয়া উচিত length(L) // N, যেখানে //মেঝে বিভাগ (যেমন 3//2 = 1)।

কিছু বিধি

  • L খালি থাকতে পারে।

  • N >= 1

  • আপনি চাইলে কোনও বিল্ট-ইন ব্যবহার করতে পারেন।

  • STDINকোনও ফাংশন আর্গুমেন্ট বা অনুরূপ কিছু হিসাবে আপনি ইনপুটটি নিতে পারেন ।

  • আপনি আউটপুট মুদ্রণ করতে STDOUTপারেন, এটি কোনও ফাংশন থেকে, বা অনুরূপ কিছু থেকে ফেরত দিতে পারেন।

  • আপনি তালিকা এবং পূর্ণসংখ্যার জন্য যে কোনও বিন্যাস বেছে নিতে পারেন যতক্ষণ না এটি আপনার ভাষায় তালিকা এবং পূর্ণসংখ্যার সবচেয়ে প্রাকৃতিক উপস্থাপনা।

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

Input:  [1,2,3,4], 2
Output: [[1,2],[3,4]]

Input:  [-1,-2,3,4,-5], 2
Output: [[-1,-2],[3,4,-5]]

Input:  [1,2,3,4], 1
Output: [[1,2,3,4]]

Input:  [4,8,15,16,23,42], 5
Output: [[4],[8],[15],[16],[23,42]]

Input:  [4,8,15,16,23,42], 7
Output: [[],[],[],[],[],[],[4,8,15,16,23,42]]

Input:  [2,3,5,7,11,13,17,19,23], 3
Output: [[2,3,5],[7,11,13],[17,19,23]]

Input:  [], 3
Output: [[],[],[]]

Input:  [1,2,3,4,5,6,7,8], 3
Output: [[1,2],[3,4],[5,6,7,8]]

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins




শুধুমাত্র ইতিবাচক পূর্ণসংখ্যা? বা হতে পারে একটি পরীক্ষার কেস যুক্ত করুন
লুইস মেন্ডো

@ লুইসমেন্দো নং। আমি এটি পরীক্ষার জন্য একটি পরীক্ষার কেস পরিবর্তন করেছি।
ফ্যাটালাইজ করুন

দৈর্ঘ্য 8 এর দৈর্ঘ্যের n = 3 (ব্যবহারকারী 2357112 দ্বারা প্রস্তাবিত) এর একটি তালিকা একটি ভাল পরীক্ষার কেস হবে - এটি আমার পদ্ধতিটি ভেঙে দিয়েছে।
xnor

উত্তর:


2

পাইথ, 11 10 বাইট

1 ফ্রিআমএইচজিমনকে বাইট ধন্যবাদ ।

cJEt*R/lJQ

পরীক্ষা স্যুট.

বিপরীত ক্রমে ইনপুট নেয়।

নমুনা ইনপুট:

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

নমুনা আউটপুট:

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

ব্যাখ্যা

cJEt*R/lJQ     Main function, first input:Q, second input:E.
cJEt*R/lJQQ    Implicit arguments.

c              The function c is special.
               It can chop arrays.
               If the second argument is a list of integers,
               then it chops the first array at the indices
               specified by the second array.

 JE            The first argument is the second input, stored
               to the variable J.

   t*R/lJQQ    This is the second argument.
      /lJQ     Yield length of J, integer-divided by Q.
    *R    Q    Multiply it to the following respectively:
                   [0,1,2,3,...,Q-1]
   t           Then throw away the first element.
               For example, if Q=3 and E=[1,2,3,4,5,6,7,8],
               we would now have [3,6].

4

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

(a,n,l=a.length/n|0)=>[...Array(n)].map(_=>--n?a.splice(0,l):a)

2

পাইথন, 76 73 বাইট

lambda L,N:list(map(lambda x,r=len(L)//N:L[x*r:][:r+(x>N-2)*N],range(N)))

মূলত একটি নামহীন ফাংশন যা কার্য সম্পাদন করে। বাইটস সংরক্ষিত জন্য LeakyNun ধন্যবাদ!


1
এছাড়াও, পিপিসিজিতে আপনাকে স্বাগতম!
ফাঁস নুন

@ ল্যাকিয়ুন নুন এটি আমার মনে হয় আসলে actually৩। সম্পাদনার সময় আমি খুব বেশি মনোযোগ দিচ্ছিলাম না কারণ এটি বেশিরভাগ ক্ষেত্রে আমার দোষ। কর্মক্ষেত্রে কোডগল্ফিংয়ের বিপদগুলি: পি
8

@LakakyNun - প্রথম পয়েন্ট - এটি কাজ করে না। মূলত অভিব্যক্তিটি নিয়মিত আইটেমগুলির জন্য [: r] এবং শেষ আইটেমটির জন্য [: r + N], যা বাকী সমস্ত উপাদানকে ধরে ফেলবে বলে মনে করা হয়। দ্বিতীয় পয়েন্ট - আমি চেষ্টা করেছি তবে সমস্ত উপায় যে আমি জানি যে আমাকে আমার কোডের চেয়ে দীর্ঘতর করে দিন assign
Lause

এটি হবে তবে r * (x> N-2) এর ক্ষেত্রে এটি [: 0] নয়, [:]।
বিলম্ব করুন

ঠিক আছে, এখানে
লিকি নুন

2

কমন লিস্প, 114 বাইট

(defun f(l n &optional(p(floor(length l)n))(i 1))(if(= i n)(list l)(cons(subseq l 0 p)(f(subseq l p)n p(+ i 1)))))

Ungolfed:

(defun f (l n &optional (p (floor (length l) n)) (i 1))
  (if (= i n) (list l)
              (cons (subseq l 0 p)
                    (f (subseq l p) n p (+ i 1))))
  )

উদাহরণ কল:

(format t "~A~C~C" (f (read) (read)) #\return #\newline)

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

মূলত:

  • যদি আমরা শেষ গ্রুপটি কাটছি তবে প্রাথমিক তালিকার যে কিছু বাকী রয়েছে তা ফিরিয়ে দিন।
  • অন্যথায় p = |L| / Nতালিকা থেকে উপাদানগুলি নিয়ে যান এবং বাকি অংশগুলিতে পুনরাবৃত্ত কলের ফলাফলটিতে যোগ দিন। iস্টপ শর্তের জন্য ব্যবহৃত একটি পুনরাবৃত্তি কাউন্টার।

আমি প্রথমে চ্যালেঞ্জটি ভুল বুঝেছিলাম, ভেবেছিলাম প্রোগ্রামটি গ্রুপের Nপরিবর্তে উপাদানগুলির গ্রুপ তৈরি করা উচিত N। যাইহোক, এই সংস্করণটি অতিরিক্ত 10 বাইটের জন্য কাজ করে। লিসপি এবার জিতবে না তবে আমি সত্যিই সুযোগটি হারাতে পারিনি: ')


2

হাস্কেল, 69 67 বাইট

a%b=a#b where l#1=[l];l#n|(h,t)<-splitAt(div(length a)b)l=h:t#(n-1)

ব্যবহারের উদাহরণ: [1,2,3,4] % 3-> [[1],[2],[3,4]]

@ Xnor এর উত্তরের মতো একটি সাধারণ পুনরাবৃত্তি পদ্ধতির ।

সম্পাদনা করুন: @ উইল নেস 2 বাইট সংরক্ষণ করেছেন ধন্যবাদ!


h:t#(n-1)কাজ করে।
নেস

1

পাওয়ারশেল ভি 2 +, 125 বাইট

param($l,$n)if($p=[math]::Floor(($c=$l.count)/$n)){1..$n|%{$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]}}else{(,''*($n-1))+$l}

খুব দীর্ঘ মনে হচ্ছে, তবে আউটপুটে খালি অ্যারেগুলি থাকলে স্লাইসিং সুখে কাজ করার উপায় নিয়ে আসতে পারে বলে মনে হচ্ছে না, তাই এই কেসগুলি পরিচালনা করার জন্য আমার এনক্যাপসুলেটিং if/ দরকার need elseঅধিকন্তু, যেহেতু .ToString()কনসোল আউটপুটের মাধ্যমে অ্যারেগুলির জন্য পাওয়ারশেলের ডিফল্টটি কিছুটা অদ্ভুত দেখা যায়, তাই আপনি -join','কনসোলে নতুনরেখা-বিচ্ছিন্ন না হয়ে অ্যারেগুলি কমা-বিচ্ছিন্ন হিসাবে প্রদর্শন করতে পারেন on আউটপুট আরও সুস্পষ্ট করার জন্য আমি নীচের উদাহরণগুলিতে এটি করেছি, তবে আপনি অন্য কমান্ড বাছাইয়ের জন্য পাইপলাইনে আউটপুটটি ছেড়ে দিলে আপনি এটি করতে চাইবেন না।

ব্যাখ্যা

param($l,$n)তালিকা এবং পার্টিশনের সংখ্যা যথাক্রমে ইনপুট নেয় । আমরা তখন একটি প্রবেশ if/ elseবিবৃতি। যদি প্রতিটি পার্টিশনের আকার, $pশূন্য হয় না (পথে সাহায্যকারীকে সেট $cকরতে হবে .count), আমরা এতে আছি if

ইনসাইড if, আমরা থেকে লুপ 1করার $nসঙ্গে |%{...}, এবং প্রতিটি পুনরাবৃত্তির আমরা একটি প্রশংসনীয় জটিল সুদর্শন অ্যারের ফালি করছেন $l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]। প্রথম প্যারেনসটি হ'ল আমাদের সূচনা সূচক, আমরা কোন পার্টিশনটিতে রয়েছি এবং আমাদের পার্টিশনের আকারটি কত বড়। আমরা ..আমাদের শেষ সূচকটি দিয়ে সীমাবদ্ধ করি , যা সিউডো-টের্নারি থেকে গঠিত । এখানে আমরা উভয় $c(অ্যারের আক্ষরিক শেষ) বা আমাদের পার্টিশনের দৈর্ঘ্যের মধ্যে বাছাই করছি, আমরা শেষ অংশে আছি কি না তার উপর ভিত্তি করে $_-$n

অন্যথায়, আমরা আছি else। আমরা কমা-অপারেটরের সাথে ,''*অনুরোধের চেয়ে কম পার্টিশনের সমান একটি খালি অ্যারে তৈরি করি এবং তারপরে ইনপুট অ্যারেটিকে চূড়ান্ত উপাদান হিসাবে টেক করি।

উদাহরণ

উপরে আমি বর্ণিত পার্টিশনগুলিকে নতুন লাইনের সাথে পৃথক করে দেখছি এবং প্রতিটি পৃথক উপাদান পৃথক করে পৃথক ,করা হয়েছে above

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (1,2,3,4) 2
1,2
3,4

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (-1,-2,3,4,-5) 2
-1,-2
3,4,-5

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (1,2,3,4) 1
1,2,3,4

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (4,8,15,16,23,42) 5
4
8
15
16
23,42

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (4,8,15,16,23,42) 7






4,8,15,16,23,42

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (2,3,5,7,11,13,17,19,23) 3
2,3,5
7,11,13
17,19,23

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 $null 3



PS C:\Tools\Scripts\golfing> 

1

এফ #, 100 98 বাইট

fun n l->
let a=List.length l/n
List.init n (fun i->if i<n-1 then l.[a*i..a*i+a-1] else l.[a*i..])

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


1

প্রোলোগ, 100 99 বাইট।

n(A,B):-length(B,A).
p(L,K,G):-n(K,G),append(A,[_],G),n(N,L),M is N//K,maplist(n(M),A),append(G,L).

কল যেমন

? - পি ([1,2,3,4,5,6,7], 3, এক্স)
এক্স = [[1, 2], [3, 4], [5, 6, 7]]


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