Tarea:
Devuelve una matriz con todos los pares posibles entre los elementos de una matriz.
Ejemplo
De a=["a", "b", "c", "d"];
regreso b=[["a","b"],["a","c"],["a","d"],["b","c"],["b","d"],["c","d"]]
.
Los pares pueden estar en cualquier orden siempre que se incluyan todas las combinaciones posibles y obviamente ["b","d"]
sea lo mismo ["d","b"]
.
Entrada
Matriz de elementos de cadena únicos compuestos por caracteres de la clase [a-z]
.
Salida
Matriz 2D que contiene todos los pares posibles de elementos de la matriz de entrada.
Casos de prueba
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"]]
Nota: No pude encontrar un duplicado para este desafío. Si hay uno, avíseme con un comentario para dejar la pregunta.
code-golf
array-manipulation
combinatorics
alexandros84
fuente
fuente
["c","b","a"]
volver?Respuestas:
Jalea , 2 bytes
Pruébalo en línea!
fuente
ÇK€Y
en el pie de páginaHaskell , 29 bytes
Pruébalo en línea! Ejemplo de uso:
f ["a","b","c"]
rendimientos[("a","b"),("a","c"),("b","c")]
.Con el indicador,
-XTupleSections
esto se puede acortar a 27 bytes, sin embargo, el indicador debería contarse:Pruébalo en línea!
fuente
f l=l
.Mathematica, 14 bytes
entrada
fuente
Haskell, 25 bytes
Pruébalo en línea!
Outer (
x
) e inner (y
) recorren la lista de entrada y mantienen el par(x,y)
solo six < y
.fuente
05AB1E , 3 bytes
Código:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
fuente
vim,
5048Toma entrada en el formulario
y salidas como
Explicación
Primero,
AX<esc>
agrega un anX
a la entrada para manejar la entrada de 2 longitudes, lo cual es necesario por razones que se aclararán en breve.Luego viene la primera macro recursiva, de la forma
qq...@qq@q
. (Grabe macroq
, vuelva a ejecutarse al final, finalice la grabación, luego ejecútese una sola vez). En el cuerpo de la macro,Yp
duplica la línea actual,l
sale de la macro si la línea tiene ahora un carácter yX
borra el primer personaje de la línea. Esto tiene el resultado final de producirIgnorando la
X
s por ahora, todo lo que tenemos que hacer es convertirabcdX
, por ejemplo, enab / ac / ad / aX
. Esto se consigue con la segunda macro recursiva,qr...@rq
.En esta macro, primero duplicamos la línea (
Yp
), luego eliminamos todo menos los dos primeros caracteres moviendo dos (ll
) a la derecha y eliminando al final de la línea (D
). Dado que el cursor está ahora en el segundo carácter de la línea,kx
eliminará el segundo carácter de la línea anterior, que es el que acaba de emparejarse con el primer carácter de la línea. Este proceso se repite comenzando nuevamente desde el principio de la línea (h
) tantas veces como sea necesario debido a la naturaleza recursiva de la macro.Ahora es solo cuestión de ejecutar la macro en cada línea, lo que se puede lograr con
:g/./norm@r
(no estoy seguro de por qué esto se comporta de manera diferente:%norm@r
, pero es suficiente decir que este último no funciona como se esperaba). Las líneas conX
se eliminan con:g/X/d
, y las líneas en blanco al final a la izquierda como resultado de la construcción de lar
macro se limpian condG
.fuente
Octava, 23 bytes
Pruébalo en línea!
fuente
Python 3 , 44 bytes
Pruébalo en línea!
Toma datos como parámetros de funciones individuales.
fuente
Brachylog , 5 bytes
Pruébalo en línea!
Cómo funciona
fuente
R , 18 bytes
lee la lista de stdin, devuelve una matriz donde las columnas son pares.
Pruébalo en línea!
fuente
Python, 53 bytes
2 bytes guardados gracias a @CalculatorFeline
Pruébalo en línea!
fuente
a[i+1:]
puede sera[:i]
Octava ,
4948 bytesFunción anónima que evita el incorporado (
nchoosek
).Pruébalo en línea!
Explicación
x+j*x'
usa la transmisión para construir una matriz de números complejos donde las partes reales e imaginarias son todos pares de puntos de código de la entradax
.y=triu(...,1)
mantiene la parte triangular superior excluyendo la diagonal, haciendo que el resto de elementos sea cero. El resultado se asigna a la variabley
.y=(...)(~~y)
retiene los elementos distintos de cero en forma de un vector de columna, que se asigna a la variabley
.imag(...)
yreal(...)
extraer las partes reales e imaginarias.[... ... '']
convierte de nuevo a char para generar la salida.fuente
Pari / GP , 34 bytes
Pruébalo en línea!
fuente
Python ≥ 2.7, 55 bytes
repl.it!
fuente
Perl 6 , 17 bytes
Vaya, ese es un nombre de método largo.
fuente
Scala, 17 bytes
fuente
Pyth ,
74 bytes-3 bytes gracias a Leaky Nun !
Pruébalo en línea!
fuente
.cQ2
?.C
cuando revisé la lista. ¡Buena atrapada!Ruby ,
38 3424 bytesGracias Seims por la idea que ahorró 10 bytes.
Pruébalo en línea!
fuente
->x{x.combination(2).to_a}
guarda algunos bytes :)JavaScript ES6, 52 bytes
Si hubiera una,
flatMap
eso ahorraría muchos bytes.fuente
a=>[for(x of[...a])for(y of(a.shift(),a))[x,y]]
.[x,y]
final es el bit fácil, es solo una matriz literal.Python , 55 bytes
Pruébalo en línea!
Más tiempo que otras respuestas de Python, pero utiliza una técnica diferente, así que creo que vale la pena publicarlo.
fuente
Japt , 2 bytes
Pruébalo (
-Q
marca solo para fines de visualización)fuente
Python, 64 bytes
fuente
Octava, 38 bytes
Otra respuesta para evitar
nchoosek
incorporados.Pruébalo en línea!
fuente
Clojure, 42 bytes
Devuelve un conjunto de conjuntos :)
fuente
Python, 74 bytes
fuente
Javascript (ES 5), de 108 a 78 bytes
Publico mi respuesta hoy, pero obviamente prometo no aceptar mi propia respuesta:
fuente
a
, debe definirlo, pero puede hacer una función dex
.for(i=n+1;i<(x.length);i++)
afor(i=n;++i<x.length;)
. Del mismo modo, puede cambiarn<(x.length-1);n++
an++<x.length-1
J , 17 bytes
Pruébalo en línea!
Explicación
fuente