Напишите программу или функцию, которая, учитывая целое число n
, создает массив с n
измерениями n
длины, где каждый элемент является идентификатором своих собственных координат. То есть, начиная с одного массива, заполняйте его n
массивами, каждый из которых содержит n
больше массивов, вплоть до глубины n-1
. Элементами самых глубоких массивов являются координаты, описывающие, где они находятся в полном массиве.
Несколько примеров на случай, если мое объяснение сбивает с толку.
n = 1
["1"]
п = 2
[
["11", "12"],
["21", "22"]
]
n = 3
[
[
["111","112","113"],
["121","122","123"],
["131","132","133"]
],
[
["211","212","213"],
["221","222","223"],
["231","232","233"]
],
[
["311","312","313"],
["321","322","323"],
["331","332","333"]
]
]
Здесь «321» означает, что это 1-й элемент 2-го элемента 3-го массива.
Правила:
- Координаты и измерение (
n
) могут быть проиндексированы либо 0, либо 1 - Вы можете предположить, что
n
это одна цифра, ниже 10 для обоих вариантов индексирования, чтобы предотвратить неоднозначные результаты - IO гибкий.
- В частности, координаты могут быть массивами, строками и т. Д., Если они свободны. "321" => [3,2,1]
- Выходные данные могут быть целыми числами в базе 10 с или без начальных нулей.
- Координаты могут быть в обратном порядке, если вы хотите, если это не противоречит. "321" => "123"
- Вывод не обязательно должен быть структурой массива на вашем языке. Пока есть четкие четкие маркеры для начала массива, конца массива и для разделения элементов.
- Выход для
n=1
может быть просто 1 - Если ваш вывод нетипичен, обязательно объясните формат.
- Это код-гольф, поэтому выигрывает самое короткое решение на каждом языке!
data L a = L [L a] | E a
,Int -> [String]
илиInt -> [[String]]
и так далее, в зависимости от того, что является вводомОтветы:
Дьялог АПЛ ,
53 байта-2 байта благодаря FrownyFrog
Попробуйте онлайн!
⍳
дает все индексы, заданные в форме массива. например, 2 3 .⍴
изменяет правый арг в размер левого арг.⍨
заставляет обоих быть правильным аргументом.источник
Python 3 , 56 байт
Попробуйте онлайн!
Г-н Xcoder сохранил 2 байта, переключаясь на Python 3 для распаковки.
источник
f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]
работает на 56 байт.Wolfram Language (Mathematica) ,
3222 байта-10 байт благодаря @alephalpha
Попробуйте онлайн!
источник
J , 18 байт
Попробуйте онлайн!
Итеративное решение, нет встроенного декартова произведения. Вот как выглядит пик J.
источник
Желе ,
87 байтПопробуйте онлайн!
объяснение
Используйте аргумент 2 в качестве примера.
Если бы
¡
он не менялся, это правильный аргумент для итераций для диад, тогда это было бы 4 байта:ṗs³¡
источник
1
действителен?J, 13 байт
Попробуйте онлайн!
Интересно, что это намного дольше, чем ответ APL (хотя это может быть моей неспособностью увидеть лучший перевод)
объяснение
источник
#.inv
, очень умно, +1.MATLAB,
928955 байтовУ меня есть другой ответ, перечитав правила соревнования, но я оставлю предыдущую попытку ниже, так как на нее по-прежнему интересно смотреть.
объяснение
Это выводит n-мерный массив строк, которые проиндексированы 0.
Предыдущий ответ (89 байт)
Мой первый гольф! Это, вероятно, может быть уменьшено больше, но я думал, что выложу то, что у меня есть.
объяснение
Вывод x в конце, чтобы дать решение
Как и в других сообщениях MATLAB, выходные данные представляют собой n-мерный массив, за исключением того, что для отображения координат используются числа. Он работает для любого значения, хотя из-за плохих циклов в MATLAB он начинает значительно замедляться около n = 8.
Изменить: -2 байта благодаря Луису Мендо. Также убрана последняя точка с запятой для вывода на печать.
источник
length
,nnz
чтобы сохранить несколько байтов. Кроме того, согласно правилам PPCG, код должен генерировать некоторый фактический вывод, обычно отображая его в STDOUT (недостаточно, чтобы вывод был сохранен в переменной), или это должна быть функция, которая возвращает выводРжавчина ,
201176167166154 байтаПопробуйте онлайн!
Тип вывода является типом суммы с двумя вариантами, поскольку язык строго типизирован. Это может быть либо
L
тип списка, содержащий этот тип суммы, либоS
тип результата (строка). Результат может выглядеть так.Также переформатирован с использованием
rustfmt
:источник
R , 102 байта
Попробуйте онлайн!
which
индексирование массиваисточник
which
- это то, что я искал, спасибо! Сохранено 9 байтJava 10, 144 байта
Решение - метод
f
. Это производит строковое представление массива.Попробуйте онлайн
Ungolfed
Подтверждения
источник
Object[]
наvar
. Кроме того, я думаю, что этотelse
блок не нужен, как у васreturn
вif
блоке.05AB1E , 7 байтов
Попробуйте онлайн!
объяснение
источник
JavaScript (Node.js) ,
626058 байтПопробуйте онлайн! Вывод 0 проиндексирован. Изменить: 2 байта сохранены благодаря @JoKing и еще 2 байта благодаря @Arnauld.
источник
MATLAB,
116108104 байтаЯ чувствую, что должен быть более короткий способ сделать это, учитывая склонность MATLAB к многомерным матрицам ... Спасибо Луису за 4 байта из-за некоторой краткости
объяснение
Выходными данными является n-мерный массив ячеек, где каждый элемент является массивом значений координат. Работает для любого
n
без двусмысленности из-за числового вывода массива, при условии, чтоn^(n+1)
массив элементов может быть сохранен в RAM!источник
Древесный уголь , 26 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Вход
n
.Генерация всех
nⁿ
n
-значных чисел в базеn
.Разделите их
n
раз вn
-мерный массив, где каждое измерение имеет размерn
.Распечатать массив. Формат вывода по умолчанию - каждый элемент в отдельной строке, затем каждый блок
n
строк заканчивается пустой строкой, затем каждый блокn
блоковn
строк заканчивается второй пустой строкой, и так далее, вплоть доn-1
пустых строк на верхнем уровне. ,источник
Желе , 7 байт
Попробуйте онлайн!
источник