Учитывая список целых чисел L
и целое число N
, выходные данные L
разделены на N
подсписки одинаковой длины.
Неделимые длины
Если 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]]
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
источник
Ответы:
Pyth,
1110 байт1 байт благодаря @FryAmTheEggman .
Тестирование.
Принимает входные данные в обратном порядке.
Пример ввода:
Пример вывода:
объяснение
источник
JavaScript (ES6), 63 байта
источник
Python,
7673 байтаВ основном безымянная функция, которая выполняет задачу. Спасибо LeakyNun за сохраненные байты!
источник
Common Lisp, 114 байт
Ungolfed:
Пример вызова:
Попробуй это здесь!
В принципе:
p = |L| / N
выньте элементы из списка и присоедините их к результату рекурсивного вызова для остатка.i
счетчик итераций, используемый для условия остановкиСначала я неправильно понял проблему, полагая, что программа должна создавать группы
N
элементов, а неN
группы. Во всяком случае, эта версия делает работу за дополнительные 10 байтов. LisP не выиграет на этот раз, но я не мог упустить эту возможность: ')источник
Haskell,
6967 байтПример использования:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Простой рекурсивный подход, похожий на ответ @ xnor .
Редактировать: @ Уилл Несс спас 2 байта. Благодарность!
источник
h:t#(n-1)
тоже работает.PowerShell v2 +, 125 байт
Чувствуется слишком долго, но я не могу придумать способ заставить срезы работать успешно, если в выводе есть пустые массивы, поэтому мне нужен инкапсуляция
if
/else
для обработки этих случаев. Кроме того, поскольку использование по умолчанию.ToString()
для массивов через консоль вывода PowerShell может показаться немного странным, вы можете нажать на,-join','
чтобы отображать массивы как разделенные запятыми, а не как новые строки в консоли. Я сделал это в приведенных ниже примерах, чтобы сделать вывод более понятным, но вы не захотите этого делать, если вы оставляете вывод в конвейере для другой команды.объяснение
Принимает данные
param($l,$n)
для списка и количества разделов соответственно. Затем мы вводимif
/else
утверждение. Если размер каждого раздела$p
не равен нулю (установив помощник$c
на.count
время пути), мы вif
.Внутри
if
, мы перебираем от1
к$n
с|%{...}
и каждой итерации мы делаем довольно сложный вид срез массива$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. Первым паренсом является наш начальный индекс, основанный на том, на каком разделе мы находимся и насколько велик размер нашего раздела. Мы ранжируем это..
с помощью нашего конечного индекса, который формируется из псевдо-троичного . Здесь мы выбираем между$c
(литеральным концом массива) или длиной нашего раздела в зависимости от того, находимся ли мы в последнем фрагменте$_-$n
или нет.В противном случае мы в
else
. Мы создаем пустой массив с запятой-оператором,,''*
равным одному меньшему количеству разделов, чем запрошено, и затем добавляем входной массив как последний элемент.Примеры
Здесь я показываю разделы, разделенные символами новой строки и каждый отдельный элемент, разделенный
,
, как описано выше.источник
F #,
10098 байтИспользование F # список нарезки, с если п решить , следует ли выбрать элементы или все остальные элементы.
источник
Пролог,
10099 байт.Позвоните, например
источник
PHP, 109 байт
Все тестовые случаи
источник