Diberikan daftar bilangan bulat L
, dan bilangan bulat N
, keluaran L
dibagi dalam daftar panjang yang N
sama.
Panjang tidak dapat dibagi
Jika N
tidak membagi panjang L
, maka tidak mungkin semua sublist memiliki panjang yang sama.
Dalam setiap kasus, sublist terakhir dari output adalah salah satu yang menyesuaikan panjangnya untuk mengandung sisa daftar.
Ini berarti bahwa semua sublist L
kecuali untuk yang terakhir harus panjang length(L) // N
, di mana //
pembagian lantai (misalnya 3//2 = 1
).
Beberapa peraturan
L
bisa kosong.N >= 1
.Anda dapat menggunakan built-in yang Anda inginkan.
Anda dapat mengambil input melalui
STDIN
, sebagai argumen fungsi, atau yang serupa.Anda dapat mencetak output ke
STDOUT
, mengembalikannya dari fungsi, atau yang serupa.Anda dapat memilih format apa pun untuk daftar dan bilangan bulat selama itu adalah representasi paling alami dari daftar dan bilangan bulat dalam bahasa Anda.
Uji kasus
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]]
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
sumber
Jawaban:
Pyth,
1110 byte1 byte terima kasih kepada @FryAmTheEggman .
Suite uji.
Mengambil input dalam urutan terbalik.
Input sampel:
Output sampel:
Penjelasan
sumber
JavaScript (ES6), 63 byte
sumber
Python,
7673 bytePada dasarnya fungsi yang tidak disebutkan namanya yang melakukan tugas. Terima kasih kepada LeakyNun untuk byte yang disimpan!
sumber
Common Lisp, 114 byte
Tidak Disatukan:
Contoh panggilan:
Coba di sini!
Pada dasarnya:
p = |L| / N
keluarkan elemen dari daftar dan gabungkan ke hasil panggilan rekursif pada sisanya.i
adalah penghitung iterasi yang digunakan untuk kondisi berhenti.Saya telah salah paham tentang tantangan pada awalnya, berpikir program harus membangun kelompok
N
elemen daripadaN
kelompok. Bagaimanapun, versi ini melakukan pekerjaan untuk 10 byte tambahan. LisP tidak akan menang saat ini tetapi saya tidak bisa melewatkan kesempatan: ')sumber
Haskell,
6967 byteContoh penggunaan:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Pendekatan rekursif sederhana, mirip dengan jawaban @ xnor .
Sunting: @ Akankah Ness menyimpan 2 byte. Terima kasih!
sumber
h:t#(n-1)
juga berfungsi.PowerShell v2 +, 125 byte
Terasa terlalu lama, tapi sepertinya saya tidak bisa menemukan cara untuk membuat pengiris bekerja dengan bahagia jika ada array kosong dalam output, jadi saya perlu enkapsulasi
if
/else
untuk menangani kasus-kasus itu. Selain itu, karena standar PowerShell.ToString()
untuk array melalui output konsol dapat terlihat sedikit aneh, Anda dapat menempel pada-join','
untuk menunjukkan array sebagai dipisahkan oleh koma daripada dipisahkan oleh baris pada konsol. Saya telah melakukan itu dalam contoh di bawah ini untuk membuat output lebih jelas, tetapi Anda tidak ingin melakukan itu jika Anda meninggalkan output pada pipeline untuk diambil perintah lain.Penjelasan
Mengambil input
param($l,$n)
untuk daftar dan jumlah partisi, masing-masing. Kami kemudian memasukkanif
/else
pernyataan. Jika ukuran setiap partisi,$p
bukan-nol (pengaturan helper$c
menjadi.count
sepanjang jalan), kita berada diif
.Di dalam
if
, kita loop dari1
ke$n
dengan|%{...}
, dan setiap iterasi kita melakukan irisan array yang cukup kompleks$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. Parens pertama adalah indeks awal kami, berdasarkan pada partisi yang kami gunakan dan seberapa besar ukuran partisi kami. Kami mengukurnya..
dengan indeks akhir kami, yang dibentuk dari pseudo-ternary . Di sini, kami memilih antara$c
(akhir literal array), atau panjang partisi kami, berdasarkan apakah kami berada di chunk terakhir$_-$n
atau tidak.Kalau tidak, kita di
else
. Kami membangun array kosong dengan koma-operator,''*
sama dengan satu partisi lebih sedikit daripada yang diminta, dan kemudian menempel pada array input sebagai elemen terakhir.Contohnya
Di sini saya menunjukkan partisi yang dipisahkan dengan baris baru dan masing-masing elemen terpisah
,
, seperti dijelaskan di atas.sumber
F #,
10098 byteMenggunakan F # daftar mengiris, dengan jika klausul memutuskan apakah akan memilih sebuah elemen atau semua elemen yang tersisa.
sumber
Prolog,
10099 byte.Panggil misalnya
sumber
PHP, 109 Bytes
Semua Testcases
sumber