Учитывая несортированный список уникальных строго положительных целых чисел, минимально сортируйте его в 2D матрицу. Гарантируется, что входной список будет составной длины, что означает, что выходная матрица не обязательно квадратная, но имеет размер n x m
с n,m > 1
.
«Минимально сортировать» здесь означает следующее:
- Сортировать список по возрастанию.
- Максимально сожмите выходную матрицу - минимизируйте сумму размеров матрицы (например, для
20
входных элементов в качестве входных данных требуется матрица a5x4
или4x5
output, а не a2x10
). - Уплотните отсортированные числа как можно дальше к верхнему левому углу матрицы, начиная с первого элемента в отсортированном списке.
- Это можно рассматривать как сортировку списка, затем разрезание его вдоль антидиагоналей матрицы, начиная с верхнего левого.
Примеры:
Для ввода- 1..20
вывода используется матрица 5x4 или 4x5 следующим образом:
1 2 4 7 11
3 5 8 12 15
6 9 13 16 18
10 14 17 19 20
1 2 4 7
3 5 8 11
6 9 12 15
10 13 16 18
14 17 19 20
Для ввода- [3, 5, 12, 9, 6, 11]
вывода используется 2x3 или 3x2 следующим образом
3 5 9
6 11 12
3 5
6 9
11 12
Для ввода [14, 20, 200, 33, 12, 1, 7, 99, 58]
, выход 3x3 следующим образом
1 7 14
12 20 58
33 99 200
Для ввода 1..10
вывод должен быть 2x5 или 5x2 следующим образом
1 2 4 6 8
3 5 7 9 10
1 2
3 4
5 6
7 8
9 10
Для ввода- [5, 9, 33, 65, 12, 7, 80, 42, 48, 30, 11, 57, 69, 92, 91]
вывода используется 5x3 или 3x5 следующим образом
5 7 11 33 57
9 12 42 65 80
30 48 69 91 92
5 7 11
9 12 33
30 42 57
48 65 80
69 91 92
правила
- Можно предположить, что ввод соответствует целочисленному типу вашего языка.
- Вход и выход могут быть заданы любым удобным способом .
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
code-golf
array-manipulation
sorting
matrix
AdmBorkBork
источник
источник
15
тестовый пример элемента.Ответы:
Желе ,
242220 байтПопробуйте онлайн!
Сохранено 2 байта благодаря @ Джонатану Аллану .
объяснение
источник
L%J¬TżṚ$
->LÆDżṚ$
Я должен спасти двоих, я думаюpSÞỤs
.Python 2 ,
160158153151 байт-2 байта благодаря Эрику Аутгольферу
-2 байта благодаря мистеру Xcoder
Попробуйте онлайн! или попробуйте все тестовые случаи
источник
max(0,n-x)
для -2 байта.R
11095 байтПопробуйте онлайн!
Как это устроено
Джузеппе сохранил колоссальные 15 (!) Байтов с помощью следующих трюков
length(x)
наsum(x|1)
(-1 байт)floor()
в:
любом случае не требуется, так как округляет (-7)^.5
корочеsqrt()
(-3)col(X) + row(X)
вместоouter
(приятно!)t(X)
хотя - разочаровывает;)Оригинальное решение
Это будет выглядеть более причудливо с
outer
заменой наrow(X)+col(X)
, но для этого потребуетсяX
сначала инициализировать выходную матрицу .Попробуйте онлайн!
источник
JavaScript (ES6), 172 байта
объяснение
Тестовые случаи
Показать фрагмент кода
источник
Perl 5 , 132 байта
Попробуйте онлайн!
Подпрограмма возвращает двумерный массив. Ссылка TIO включает код нижнего колонтитула для отображения результатов теста.
источник
Октава , 151 байт
Использование трех различных типов конструкций цикла.
Попробуйте онлайн!
раскатали:
источник
'
вnnz(v')
необходимости?'
это не требуется, если я оберну выражение диапазона, например1:20
, в квадратные скобки ([1:20]
) на месте вызова (чтобы сделать его фактическим вектором). Очевидно, что в Octave оператор двоеточия создает не вектор , а константу диапазона, которая занимает гораздо меньше места в памяти. По какой-то причинеnnz()
не работает с этим типом, но транспонирование константы диапазона дает вектор, поэтому он работает с апострофом. Вызов функции с фактическим вектором устраняет необходимость в'
.nnz(1:20)
не работает, вероятно, ошибка (max(1:20)
, иsum(1:20)
т.д. являются действительными).nnz
. Ты хочешь сделать это сам или мне?Шелуха , 15 байт
Это работает грубой силой, поэтому более длительные тестовые случаи могут истечь. Попробуйте онлайн!
объяснение
источник
C (gcc) , 269 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 233 байта
объяснение
источник
Java 10,
199188186 байтПопробуйте онлайн.
На основании моего ответа здесь .
Объяснение:
источник