Tarefa:
Retorne uma matriz com todos os pares possíveis entre os elementos de uma matriz.
Exemplo
De a=["a", "b", "c", "d"];
volta b=[["a","b"],["a","c"],["a","d"],["b","c"],["b","d"],["c","d"]]
.
Os pares podem estar em qualquer ordem, desde que todas as combinações possíveis estejam incluídas e obviamente ["b","d"]
sejam iguais ["d","b"]
.
Entrada
Matriz de elementos string única compostas de caracteres da classe [a-z]
.
Resultado
2d array contendo todos os pares possíveis de elementos do array de entrada.
Casos de teste
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: Não foi possível encontrar uma duplicata para este desafio. Se houver, me avise com um comentário para deixar a pergunta.
code-golf
array-manipulation
combinatorics
alexandros84
fonte
fonte
["c","b","a"]
retornar?Respostas:
Gelatina , 2 bytes
Experimente online!
fonte
ÇK€Y
no rodapé.Haskell , 29 bytes
Experimente online! Exemplo de uso:
f ["a","b","c"]
rendimentos[("a","b"),("a","c"),("b","c")]
.Com o sinalizador,
-XTupleSections
isso pode ser reduzido para 27 bytes; no entanto, o sinalizador precisa ser contado:Experimente online!
fonte
f l=l
.Mathematica, 14 bytes
entrada
fonte
Haskell, 25 bytes
Experimente online!
Externo (
x
) e interno (y
) passam pela lista de entrada e mantêm o par(x,y)
apenas sex < y
.fonte
05AB1E , 3 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
vim,
5048Recebe entrada no formulário
e saídas como
Explicação
Primeiro,
AX<esc>
anexa umX
à entrada para manipular a entrada de 2 comprimentos, o que é necessário por razões que ficarão claras em breve.Em seguida, vem a primeira macro recursiva, do formulário
qq...@qq@q
. (Grave a macroq
, execute-se novamente no final, termine a gravação e execute-se uma vez.) No corpo da macro,Yp
duplica a linha atual,l
interrompe a macro se a linha tiver agora um caractere eX
exclui o primeiro caractere na linha. Isso tem como resultado final a produçãoIgnorando os
X
s por enquanto, tudo o que precisamos fazer é transformarabcdX
, por exemplo, emab / ac / ad / aX
. Isto é conseguido com a segunda macro recursivaqr...@rq
,.Nesta macro, duplicamos a linha (
Yp
) e excluímos tudo, exceto os dois primeiros caracteres, movendo para a direita dois (ll
) e excluindo até o final da linha (D
). Como o cursor está agora no segundo caractere da linha,kx
excluirá o segundo caractere da linha anterior, que passa a ser o que acabou de emparelhar com o primeiro caractere da linha. Esse processo é repetido, iniciando novamente do início da linha (h
) quantas vezes for necessário, devido à natureza recursiva da macro.Agora é apenas uma questão de executar a macro em todas as linhas, o que pode ser alcançado com
:g/./norm@r
(não sei por que isso se comporta de maneira diferente:%norm@r
, mas basta dizer que a última não funciona conforme o esperado). As linhas comX
são excluídas com:g/X/d
, e as linhas em branco no final deixadas como resultado da construção dar
macro são limpasdG
.fonte
Oitava, 23 bytes
Experimente online!
fonte
Python 3 , 44 bytes
Experimente online!
Recebe entrada como parâmetros de função individuais.
fonte
Braquilog , 5 bytes
Experimente online!
Como funciona
fonte
R , 18 bytes
lê a lista de stdin, retorna uma matriz onde as colunas são pares.
Experimente online!
fonte
Python, 53 bytes
2 bytes salvos graças a @CalculatorFeline
Experimente online!
fonte
a[i+1:]
pode ser #a[:i]
Oitava ,
4948 bytesFunção anônima que evita o built-in (
nchoosek
).Experimente online!
Explicação
x+j*x'
usa a transmissão para criar uma matriz de números complexos, onde as partes reais e imaginárias são todos pares de pontos de código da entradax
.y=triu(...,1)
mantém a parte triangular superior excluindo a diagonal, zerando o restante dos elementos. O resultado é atribuído à variávely
.y=(...)(~~y)
mantém os elementos diferentes de zero na forma de um vector de coluna, que é atribuído a variávely
.imag(...)
ereal(...)
extrair as partes reais e imaginárias.[... ... '']
converte de volta em char para criar a saída.fonte
Pari / GP , 34 bytes
Experimente online!
fonte
Python ≥ 2,7, 55 bytes
repl.it!
fonte
Perl 6 , 17 bytes
Ufa, esse é um nome de método longo.
fonte
Scala, 17 bytes
fonte
Pitão ,
74 bytes-3 bytes graças a Leaky Nun !
Experimente online!
fonte
.cQ2
?.C
ao olhar a lista. Boa pegada!Ruby ,
38 3424 bytesObrigado Parece pela idéia que salvou 10 bytes.
Experimente online!
fonte
->x{x.combination(2).to_a}
salva alguns bytes :)JavaScript ES6, 52 bytes
Se houvesse um
flatMap
que economizaria muitos bytes.fonte
a=>[for(x of[...a])for(y of(a.shift(),a))[x,y]]
.[x,y]
final é fácil, é apenas uma matriz literal.Python , 55 bytes
Experimente online!
Mais do que outras respostas do Python, mas ele usa uma técnica diferente, então acho que vale a pena postar.
fonte
Japonês , 2 bytes
Teste (
-Q
sinalize apenas para fins de visualização)fonte
Python, 64 bytes
fonte
Oitava, 38 bytes
Outra resposta para evitar o
nchoosek
built-in.Experimente online!
fonte
Clojure, 42 bytes
Retorna um conjunto de conjuntos :)
fonte
Python, 74 bytes
fonte
Javascript (ES 5), de 108 a 78 bytes
Hoje posto minha resposta, mas obviamente prometo não aceitar minha própria resposta:
fonte
a
, é necessário defini-lo, mas é possível criar uma funçãox
.for(i=n+1;i<(x.length);i++)
parafor(i=n;++i<x.length;)
. Da mesma forma, você pode mudarn<(x.length-1);n++
paran++<x.length-1
J , 17 bytes
Experimente online!
Explicação
fonte