Разорванный массив - это массив, в котором каждый элемент представляет собой массив неизвестного числа натуральных чисел.
Например, следующие рваные массивы:
[[1,2,3],[4],[9,10]] Shape: 3,1,2
[[1],[2],[3]] Shape: 1,1,1
[[1,2,3,4,5,6,8]] Shape: 7
Следующие не рваные массивы:
[1] Each element will be an array
[] The array will contain at least 1 element
[[1,2,3],[]] Each subarray will contain at least 1 integer
Вам нужно ввести рваный массив и вернуть рваный массив с перемешанными целыми числами
- Выходной массив должен иметь ту же форму, что и входной массив. Мы определяем форму массива как длину каждого подмассива.
- Каждое целое число должно иметь одинаковую вероятность появления в каждом возможном месте.
- Вы можете предположить, что встроенный случайный язык вашего языка является случайным.
Например, если я передал:, [[4],[1,2,3],[4]]
тогда [[1],[4,4,2],[3]]
будет допустимым выводом, но [[4,1,3],[3],[4]]
или [[4],[4],[1,2,3]]
не будет.
code-golf
array-manipulation
random
Натан Меррилл
источник
источник
Ответы:
Желе, 3 байта в кодовой странице желе
Объяснение:
Поскольку программа не завершена (
ṁ
второй аргумент не указан), по умолчанию используется вход программы; таким образом,ṁ
вывод имеет тот же шаблон подсписка, что и ввод.Попробуйте онлайн!
источник
F
иṁ
работают для нескольких слоев сплющивания, а не только для одного.)ṁ
может быть чем угодно, а не простым списком. Например: tio.run/nexus/jelly#@/9wZ@P///@jow11FIxidRSijXUUTEC0qY6CWWzs/…PowerShell v2 +, 86 байт
Работает через манипуляции со строками. Ввод передается в виде строки, представляющей массив, в любом формате, который подходит для вашего языка. ;-)
-split
Вычисляет входные данные на нецифровых символах,sort
а их на основеrandom
блока скрипта (который назначит различный случайный вес для каждого входного параметра для сортировки) сохраняет его в$a
. Затем мыsplit
снова вводим, на этот раз цифрами, и для каждого выводим текущее значение (обычно в скобках и запятых), объединенное в строку с соответствующим номером from$a
. Это-join
объединено обратно в строку, и вывод неявный.Примеры
источник
Python 2 , 89 байт
Попробуйте онлайн!
источник
shuffle(r=sum(x,[]))
?JavaScript (ES6),
7875 байтЭто первый раз, когда я помню, как использовал
.splice()
в соревновании по коду в гольф ...Вы можете сыграть в гольф два байта, предварительно перетасовав массив:
Тем не менее, это, кажется, ставит последнее целое число на первое место большую часть времени, поэтому я собираюсь предположить, что целые числа распределены неравномерно.
источник
sort
не работает должным образом, если дан противоречивый ключ сравнения. Даже если случайный язык является случайным, его сортировка в этой ситуации будет работать неправильно, и именно это создает предвзятость, которую вы видите. Таким образом, я думаю, что второе решение неверно.Рубин, 47 байтов
источник
Брахилог , 17 байт
Попробуйте онлайн!
объяснение
Мы в основном создаем список подсписков с переменными элементами, которые имеют ту же «форму», что и вход, и затем заявляем, что, если мы объединяем все в один список, это должно привести к перемешиванию конкатенации входных данных в один список. ,
источник
Perl, 37 байт
36 байт кода +
-p
флаг.Чтобы запустить это:
Пояснения:
источник
05AB1E , 17 байт
Попробуйте онлайн!
Я жду решения 05AB1E или 2sable, использующего встроенную систему раскладывания / формовки, которую я пока не знаю :).
источник
APL, 35 байт
Я едва побеждаю Perl, должно быть что-то, чего мне не хватает.
Например:
Объяснение:
⍳¨⍴¨⍵
: Для каждого подмассива получите список индексов{⍵+⊃⌽⍺}\
: Начиная с первого подмассива, добавьте последнее значение в массиве к каждому значению в следующем массиве.⊃¨
: получить первые элементы массивов, которые являются начальными местами(⍳⍴Z←∊⍵)∊
: сохранить плоский массив вZ
. Создайте битовый вектор, где они отмечают места, где должны начинаться под-массивы.?⍨⍴Z
: Генерировать случайную перестановкуZ
.Z[
...]
: переставлятьZ
.⊂⍨
: Разделить перестановку в под-массивах в соответствии с бит-вектором.источник
A⊣(∊A)←(∊A)[?⍨≢∊A←⎕]
Pyth, 15 байт
Программа, которая принимает ввод списка и печатает результат.
Тестирование
Как это работает
источник
PHP , 105 байт
уменьшено до 105 байт благодаря
user59178
.Оригинальный ответ:
PHP , 132 байта
источник
$m=array_merge(...$i=$_GET[i]);
на 25 байт короче$i=$_GET['i'];$m=call_user_func_array('array_merge',$i);
и делает то же самое. Кроме того, вы можете оставить{}
после,foreach
чтобы сохранить еще 2 байта.Bash,
6358 байтправок:
Заметка:
Bash на самом деле не поддерживает многомерные массивы (они могут быть смоделированы только до некоторой степени), поэтому вместо этого эта программа примет «сериализованное» текстовое представление прочного массива, как показано в описании задачи, например:,
[[1,2,3],[4],[9,10]]
и предоставит вывод в том же формате.Golfed
Тест
Приятным бонусом является то, что вы можете кормить его бурными массивами произвольной глубины:
и все равно будет работать правильно.
Попробуйте онлайн!
источник
Октава, 60 байт
источник
MATLAB , 84 байта
источник
Java, 368 байт
метод
static int[][] f( int[][] r ){...}
решает проблему. решил свернуть свой собственный функциональный интерфейс, чтобы избежать импорта и добавить метод по умолчанию для простоты использованияисточник
Mathematica, 67 байт
Объяснение: Это перетасовывает список позиций всех целых чисел в двумерном рваном массиве.
Union@@
коротка дляFlatten@
Примечание. Скоростные скобки
{}
используются вместо скобок[]
.источник