Biorąc pod uwagę listę liczb całkowitych L
i liczbę całkowitą N
, dane wyjściowe L
podzielono na N
listy podrzędne o jednakowej długości.
Długości niepodzielne
Jeśli N
nie dzieli długości L
, nie jest możliwe, aby wszystkie listy podrzędne miały taką samą długość.
W każdym razie ostatnią podlistą wyniku jest ta, która dostosowuje jego długość, aby zawierała resztę listy.
Oznacza to, że wszystkie listy podrzędne z L
wyjątkiem ostatniej powinny mieć długość length(L) // N
, gdzie //
jest dzielenie dzielone (np 3//2 = 1
).
Niektóre zasady
L
może być pusty.N >= 1
.Możesz użyć dowolnego wbudowanego oprogramowania.
Możesz wziąć dane wejściowe
STDIN
jako argument funkcji lub coś podobnego.Możesz wydrukować wynik
STDOUT
, zwrócić go z funkcji lub coś podobnego.Możesz wybrać dowolny format list i liczb całkowitych, o ile jest to najbardziej naturalna reprezentacja list i liczb całkowitych w twoim języku.
Przypadki testowe
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]]
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
źródło
Odpowiedzi:
Pyth,
1110 bajtów1 bajt dzięki @FryAmTheEggman .
Zestaw testowy.
Pobiera dane wejściowe w odwrotnej kolejności.
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Wyjaśnienie
źródło
JavaScript (ES6), 63 bajty
źródło
Python,
7673 bajtówZasadniczo nienazwana funkcja, która wykonuje zadanie. Dzięki LeakyNun za zapisane bajty!
źródło
Common Lisp, 114 bajtów
Nie golfowany:
Przykładowe wywołanie:
Wypróbuj tutaj!
Gruntownie:
p = |L| / N
usuń elementy z listy i dołącz je do wyniku połączenia rekurencyjnego w pozostałej części.i
jest licznikiem iteracji stosowanym do warunku zatrzymania.Na początku źle zrozumiałem wyzwanie, myśląc, że program powinien budować grupy
N
elementów, a nieN
grupy. W każdym razie ta wersja wykonuje dodatkowe 10 bajtów. Tym razem LisP nie wygra, ale tak naprawdę nie mogłem przegapić okazji: ')źródło
Haskell,
6967 bajtówPrzykład użycia:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Proste rekurencyjne podejście, podobne do odpowiedzi @ xnor .
Edycja: @ Ness zachowa 2 bajty. Dzięki!
źródło
h:t#(n-1)
działa również.PowerShell v2 +, 125 bajtów
Wydaje mi się, że jest za długo, ale nie wydaje mi się, aby wymyślić sposób, aby krojenie działało szczęśliwie, jeśli na wyjściu są puste tablice, więc potrzebuję enkapsulacji
if
/else
do obsługi tych przypadków. Dodatkowo, ponieważ domyślne ustawienia PowerShell.ToString()
dla tablic za pośrednictwem wyjścia konsoli mogą wyglądać trochę dziwnie, możesz wybrać opcję,-join','
aby wyświetlać tablice jako rozdzielone przecinkami, a nie jako znaki nowej linii na konsoli. Zrobiłem to w poniższych przykładach, aby wyjaśnić dane wyjściowe, ale nie będziesz tego chciał, jeśli zostawisz dane wyjściowe w potoku w celu odebrania innego polecenia.Wyjaśnienie
Pobiera dane wejściowe odpowiednio
param($l,$n)
dla listy i liczby partycji. Następnie wprowadzamy instrukcjęif
/else
. Jeśli rozmiar każdej partycji,$p
jest niezerowe (ustawienie pomocnika$c
być.count
po drodze), jesteśmy wif
.Wewnątrz
if
, pętla od1
do$n
z|%{...}
oraz każdej iteracji robimy dość skomplikowany wyglądający kawałek tablicy$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. Pierwsze pareny to nasz indeks początkowy, oparty na partycji, na której się znajdujemy i jak dużym jest nasz rozmiar partycji. Przedzieramy to..
naszym indeksem końcowym, który jest utworzony z pseudo-trójki . Tutaj wybieramy albo$c
(dosłowny koniec tablicy), albo długość naszej partycji, w zależności od tego, czy jesteśmy w ostatnim kawałku,$_-$n
czy nie.W przeciwnym razie jesteśmy w
else
. Konstruujemy pustą tablicę z przecinkiem,''*
równym jednej partycji mniej niż zażądano, a następnie przyczepiamy tablicę wejściową jako element końcowy.Przykłady
Tutaj pokazuję partycje oddzielone znakami nowej linii i każdy pojedynczy element oddzielony
,
, jak opisano powyżej.źródło
F #,
10098 bajtówKorzystanie z listy F # krojenie, z klauzuli if decydującym czy odebrać do elementów lub wszystkie pozostałe elementy.
źródło
Prolog,
10099 bajtów.Zadzwoń np
źródło
PHP, 109 bajtów
Wszystkie przypadki testowe
źródło