Bei einer gegebenen Liste von Ganzzahlen L
und einer Ganzzahl N
wird die Ausgabe L
in N
Unterlisten gleicher Länge aufgeteilt.
Nicht teilbare Längen
Wenn N
die Länge von nicht geteilt wird L
, ist es nicht möglich, dass alle Unterlisten die gleiche Länge haben.
In jedem Fall ist die letzte Unterliste der Ausgabe diejenige, deren Länge so angepasst wird, dass sie den Rest der Liste enthält.
Dies bedeutet, dass alle Unterlisten mit L
Ausnahme der letzten eine Länge haben sollten length(L) // N
, wobei //
es sich um eine geschossige Unterteilung handelt (z 3//2 = 1
. B. ).
Einige Regeln
L
kann leer sein.N >= 1
.Sie können ein beliebiges eingebautes Gerät verwenden.
Sie können die Eingabe
STDIN
als Funktionsargument oder ähnliches durchgehen .Sie können die Ausgabe ausdrucken
STDOUT
, von einer Funktion zurückgeben oder Ähnliches.Sie können ein beliebiges Format für die Listen und die Ganzzahl auswählen, sofern dies die natürlichste Darstellung von Listen und Ganzzahlen in Ihrer Sprache ist.
Testfälle
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]]
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
quelle
Antworten:
Pyth,
1110 Bytes1 Byte danke an @FryAmTheEggman .
Testsuite.
Nimmt Eingaben in umgekehrter Reihenfolge vor.
Beispieleingabe:
Beispielausgabe:
Erläuterung
quelle
JavaScript (ES6), 63 Byte
quelle
Python,
7673 BytesGrundsätzlich eine unbenannte Funktion, die die Aufgabe ausführt. Danke an LeakyNun für die gesparten Bytes!
quelle
Common Lisp, 114 Bytes
Ungolfed:
Beispielaufruf:
Probieren Sie es hier aus!
Grundsätzlich:
p = |L| / N
Elemente aus der Liste und fügen Sie diese zum Ergebnis eines rekursiven Aufrufs für den Rest hinzu.i
ist ein Iterationszähler, der für die Stoppbedingung verwendet wird.Ich hatte die Herausforderung zunächst missverstanden und dachte, das Programm sollte
N
eher Gruppen von Elementen alsN
Gruppen bilden. Auf jeden Fall erledigt diese Version die Aufgabe für zusätzliche 10 Bytes. LisP wird diesmal nicht gewinnen, aber ich konnte die Gelegenheit nicht wirklich verpassen: ')quelle
Haskell,
6967 BytesAnwendungsbeispiel:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Ein einfacher rekursiver Ansatz, ähnlich der Antwort von @ xnor .
Edit: @ Will Ness sparte 2 Bytes. Vielen Dank!
quelle
h:t#(n-1)
funktioniert auch.PowerShell v2 +, 125 Byte
Fühlt sich zu lang an, aber ich kann anscheinend keine Möglichkeit finden, das Slicing zum Laufen zu bringen, wenn die Ausgabe leere Arrays enthält. Ich benötige daher das Encapsulating
if
/else
, um diese Fälle zu behandeln. Da die PowerShell-Standardeinstellung.ToString()
für Arrays über die Konsolenausgabe ein wenig seltsam aussehen kann, können Sie auch ein-join','
ankreuzen, um die Arrays auf der Konsole als durch Kommas und nicht als durch Zeilenumbrüche getrennt anzuzeigen. Ich habe das in den folgenden Beispielen gemacht, um die Ausgabe klarer zu machen, aber Sie werden das nicht wollen, wenn Sie die Ausgabe in der Pipeline belassen, damit ein anderer Befehl sie aufnimmt.Erläuterung
Übernimmt die Eingabe
param($l,$n)
für die Liste bzw. die Anzahl der Partitionen. Wir geben dann eineif
/else
-Anweisung ein. Wenn die Größe der einzelnen Partitionen,$p
nicht Null ist (Einstellung Helfer$c
der zu sein.count
auf dem Weg), sind wir in derif
.In der
if
Schleife wechseln wir von1
zu$n
mit|%{...}
, und bei jeder Iteration erstellen wir einen ziemlich komplex aussehenden Array-Slice$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. Die erste Parenzahl ist unser Startindex, basierend darauf, auf welcher Partition wir sind und wie groß unsere Partitionsgröße ist. Wir berechnen das..
mit unserem Endindex, der aus einem Pseudoternären gebildet wird . Hier wählen wir entweder$c
(das wörtliche Ende des Arrays) oder die Länge unserer Partition, je nachdem, ob wir uns im letzten Block befinden$_-$n
oder nicht.Ansonsten sind wir in der
else
. Wir konstruieren ein leeres Array mit dem Komma-Operator,''*
, der einer Partition weniger entspricht als angefordert, und heften dann das Eingabearray als letztes Element an.Beispiele
Hier zeige ich die mit Zeilenumbrüchen getrennten Partitionen und jedes einzelne Element mit
,
, wie oben beschrieben.quelle
F #,
10098 BytesVerwenden der F # -Listenaufteilung mit einer if-Klausel, die entscheidet, ob ein Element oder alle verbleibenden Elemente ausgewählt werden sollen.
quelle
Prolog,
100 bis99 Bytes.Rufen Sie zB an
quelle
PHP, 109 Bytes
Alle Testfälle
quelle