Задача:
Вернуть массив со всеми возможными парами между элементами массива.
пример
От a=["a", "b", "c", "d"];
возвращения b=[["a","b"],["a","c"],["a","d"],["b","c"],["b","d"],["c","d"]]
.
Пары могут быть в любом порядке, если включены все возможные комбинации и, очевидно ["b","d"]
, то же самое ["d","b"]
.
вход
Массив уникальных строковых элементов, состоящих из символов из класса [a-z]
.
Выход
2d массив, содержащий все возможные пары элементов входного массива.
Тестовые случаи
input=["a","b","c"];
//output=[["a","b"],["a","c"],["b","c"]]
input=["a","b","c","d","e"];
//output=[["a","b"],["a","c"],["a","d"],["a","e"],["b","c"],["b","d"],["b","e"],["c","d"],["c","e"],["d","e"]]
Примечание: я не смог найти дубликат для этой задачи. Если есть, сообщите мне с комментарием, чтобы оставить вопрос.
code-golf
array-manipulation
combinatorics
alexandros84
источник
источник
["c","b","a"]
вернуться?Ответы:
Желе , 2 байта
Попробуйте онлайн!
источник
ÇK€Y
колонтитула.Haskell , 29 байт
Попробуйте онлайн! Пример использования:
f ["a","b","c"]
доходность[("a","b"),("a","c"),("b","c")]
.С помощью флага
-XTupleSections
это можно сократить до 27 байтов, однако этот флаг необходимо будет посчитать:Попробуйте онлайн!
источник
f l=l
.Mathematica, 14 байтов
вход
источник
Haskell, 25 байт
Попробуйте онлайн!
Outer (
x
) и inner (y
) перебирают список ввода и сохраняют пару,(x,y)
только еслиx < y
.источник
05AB1E , 3 байта
Код:
Использует кодировку 05AB1E . Попробуйте онлайн!
Объяснение:
источник
vim,
5048Принимает вход в виде
и выводит как
объяснение
Сначала
AX<esc>
добавляетсяX
к входу, чтобы обрабатывать ввод 2-длины, что необходимо по причинам, которые вскоре станут понятны.Затем идет первый рекурсивный макрос вида
qq...@qq@q
. (Запишите макросq
, запустите себя снова в конце, завершите запись, затем запустите сам один раз.) В теле макросаYp
дублируется текущая строка,l
выделяется макрос, если строка теперь имеет длину один символ, иX
удаляет первый символ в строке. Это имеет конечный результат производстваX
Пока игнорируем s, все, что нам нужно сделать, этоabcdX
, например, превратиться вab / ac / ad / aX
. Это достигается с помощью второго рекурсивного макросаqr...@rq
.В этом макросе мы сначала дублируем строку (
Yp
), затем удаляем все, кроме первых двух символов, перемещая вправо two (ll
) и удаляя до конца строки (D
). Так как курсор теперь находится на втором символе строки,kx
будет удален второй символ из предыдущей строки, который оказался тем, который был просто связан с первым символом в строке. Затем этот процесс повторяется, начиная с начала строки (h
) столько раз, сколько необходимо из-за рекурсивной природы макроса.Теперь это просто вопрос запуска макроса в каждой строке, что может быть достигнуто с помощью
:g/./norm@r
(я не уверен, почему это ведет себя иначе, чем:%norm@r
, но достаточно сказать, что последний работает не так, как задумано). Строки сX
удаляются с помощью:g/X/d
, и пустые строки в конце слева в результате построенияr
макроса очищаютсяdG
.источник
Октава, 23 байта
Попробуйте онлайн!
источник
Python 3 , 44 байта
Попробуйте онлайн!
Принимает ввод как отдельные параметры функции.
источник
Брахилог , 5 байт
Попробуйте онлайн!
Как это работает
источник
R , 18 байт
читает список из stdin, возвращает матрицу, где столбцы являются парами.
Попробуйте онлайн!
источник
Python, 53 байта
2 байта сохранены благодаря @CalculatorFeline
Попробуйте онлайн!
источник
a[i+1:]
можноa[:i]
Октава ,
4948 байтовАнонимная функция, которая избегает встроенной функции (
nchoosek
).Попробуйте онлайн!
объяснение
x+j*x'
использует широковещательную передачу для построения матрицы комплексных чисел, где действительная и мнимая части - это все пары кодовых точек из входных данныхx
.y=triu(...,1)
сохраняет верхнюю треугольную часть, исключая диагональ, оставляя остальные элементы равными нулю. Результат присваивается переменнойy
.y=(...)(~~y)
сохраняет ненулевые элементы в форме вектора столбца, который назначается переменнойy
.imag(...)
иreal(...)
извлечь реальные и мнимые части.[... ... '']
преобразует обратно в символ для построения вывода.источник
Пари / ГП , 34 байта
Попробуйте онлайн!
источник
Python ≥ 2.7, 55 байт
repl.it!
источник
Perl 6 , 17 байт
Вот так, это длинное имя метода.
источник
Скала, 17 байт
источник
Pyth ,
74 байта-3 байта благодаря Лики Нун !
Попробуйте онлайн!
источник
.cQ2
?.C
при просмотре списка. Хорошо поймал!Рубин ,
38 3424 байтаСпасибо Seims за идею, которая сэкономила 10 байтов.
Попробуйте онлайн!
источник
->x{x.combination(2).to_a}
сохраняет некоторые байты :)JavaScript ES6, 52 байта
Если бы было
flatMap
что-то подобное , это сэкономило бы много байтов.источник
a=>[for(x of[...a])for(y of(a.shift(),a))[x,y]]
.[x,y]
конце это просто, это просто массив букв.Python , 55 байт
Попробуйте онлайн!
Дольше, чем другие ответы Python, но он использует другую технику, поэтому я думаю, что это стоит опубликовать.
источник
Japt , 2 байта
Протестируйте это (
-Q
пометьте только для визуализации)источник
Python, 64 байта
источник
Октава, 38 байт
Еще один ответ, чтобы избежать
nchoosek
встроенного.Попробуйте онлайн!
источник
Clojure, 42 байта
Возвращает набор наборов :)
источник
Python, 74 байта
источник
Javascript (ES 5), от 108 до 78 байт
Я публикую свой ответ сегодня, но, очевидно, обещаю не принимать мой собственный ответ:
источник
a
, вам нужно определить его, но вы можете сделать функциюx
.for(i=n+1;i<(x.length);i++)
наfor(i=n;++i<x.length;)
. Кроме того, вы можете изменитьn<(x.length-1);n++
наn++<x.length-1
J , 17 байт
Попробуйте онлайн!
объяснение
источник