Dado um número inteiro positivo gere todos os desarranjos de objetos.
Detalhes
- Um desarranjo é uma permutação sem ponto fixo. (Isto significa que em cada número de desarranjo não podem estar no entrada -ésimo).
- A saída deve consistir em desarranjos dos números (ou alternativamente ).
- Como alternativa, você sempre pode imprimir alterações de (ou respectivamente), mas é necessário especificar isso.
- A saída deve ser determinística, ou seja, sempre que o programa for chamado com algum dado como entrada, a saída deve ser a mesma (o que inclui que a ordem dos desarranjos deve permanecer a mesma) e a saída completa deve ser feita dentro de uma quantidade finita de tempo todas as vezes (não é suficiente fazê-lo com probabilidade 1).
- Você pode assumir que
- Para um dado você pode gerar todos os desarranjos ou, alternativamente, pegar outro número inteiro que serve como índice e imprimir o -ésimo desarranjo (na ordem que você escolheu).
Exemplos
Observe que a ordem dos desarranjos não precisa ser a mesma listada aqui:
n=2: (2,1)
n=3: (2,3,1),(3,1,2)
n=4: (2,1,4,3),(2,3,4,1),(2,4,1,3), (3,1,4,2),(3,4,1,2),(3,4,2,1), (4,1,2,3),(4,3,1,2),(4,3,2,1)
OEIS A000166 conta o número de desarranjos.
Respostas:
Gelatina , 6 bytes
Um link monádico que aceita um número inteiro positivo que produz uma lista de listas de números inteiros.
Experimente online!
Quão?
fonte
Braquilog , 9 bytes
Experimente online!
Este é um gerador que gera um desarranjo
[0, …, n-1]
dadon
.Se o envolvermos em um
ᶠ - findall
metapredicado, obteremos todas as gerações possíveis de perturbações pelo gerador.Explicação
fonte
JavaScript (V8) , 85 bytes
Uma função recursiva que imprime todos os distúrbios baseados em 0.
Experimente online!
Comentado
fonte
Ruby , 55 bytes
Experimente online!
Gera todos os desarranjos baseados em 0
fonte
05AB1E , 9 bytes
Experimente online!
Explicação
fonte
Wolfram Language (Mathematica) , 55 bytes
Experimente online!
fonte
Japonês , 8 bytes
Baseado em 0
Experimente (o rodapé incrementa todos os elementos para facilitar a comparação com os casos de teste)
fonte
Python 2 , 102 bytes
Experimente online!
Indexação baseada em 0, lista de tuplas.
itertools
Solução não baseada:Python 2 , 107 bytes
Experimente online!
Indexação baseada em 0, linhas de listas, programa completo.
Nota: Esta solução, mesmo que não importe a
itertools
biblioteca, não é muito maior que a outra que a importa, porque a maior parte do volume aqui está construindo as permutações. A verificação de perturbação é realmente de cerca de 7 bytes adicionais! O motivo é que a verificação é feita em tempo real como parte do edifício de cada permutação. Isso não é verdade para a outra solução, na qual é necessário verificar se cada permutação retornada pelaitertools.permutations
função é de fato um distúrbio e, é claro, o próprio mapeamento leva muitos bytes.fonte
MATL , 11 bytes
Isso gera todos os desarranjos em ordem lexicográfica.
Experimente online!
Explicação com exemplo
Considere entrada
3
.fonte
Perl 5
-MList::Util=none -n
,10089 bytesExperimente online!
fonte
Haskell , 58 bytes
Experimente online!
60 bytes
Experimente online!
fonte
Gaia , 10 bytes
Experimente online!
fonte
J , 26 bytes
Experimente online!
fonte
R ,
8180 bytesExperimente online!
Retorna um( n2n) valores possíveis como
list
contendo todos os desarranjos. Altamente ineficiente, pois geran
combinações de tamanho de tempos[1..n]
repetidosn
e filtros para permutações1:n%in%x
e desarranjos1:n-x
,.Ferramentas R + , 62 bytes
Experimente online!
Muito mais eficiente, retorna um em
matrix
que cada linha é um distúrbio.fonte
Python 3.8 (pré-lançamento) , 96 bytes
Experimente online!
fonte
C ++ (gcc) ,
207196 bytes-5 bytes por ceilingcat -6 bytes por Roman Odaisky
Experimente online!
fonte
std::copy
mesma forma, confiam ao chamador o fornecimento de espaço adequado para a saída.C ++ (gcc) , 133 bytes
Eu acho que isso se tornou diferente o suficiente da outra submissão para merecer uma resposta separada. Finalmente, um uso para
index[array]
sintaxe de dentro para fora!Experimente online!
fonte
Haskell, 76 bytes
fonte
Python 2 , 82 bytes
Experimente online!
88 bytes como programa:
Experimente online!
93 bytes usando itertools:
Experimente online!
fonte
Perl 6 ,
4937 bytesEdit: Depois de algumas idas e vindas com Phil H, reduzimos para apenas 37 bytes:
Experimente online!
Usando o
Whatever
no início, podemos evitar os colchetes (salva 2 caracteres). Em seguida, use umZ
metaoperador com-
qual cada elemento de uma permutação (por exemplo, 2,3,1) e subtrai 0,1,2 em ordem. Se algum deles for 0 (falso), a junção all falhará.A solução original foi ( Experimente on-line! )
fonte
Carvão ,
4428 bytesriscado 44 ainda é regular 44
Experimente online! Link é a versão detalhada do código. Basicamente baseado na resposta não-itertools do @ EricTheOutgolfer. Explicação:
fonte
C (gcc) ,
187180 bytesExperimente online!
fonte
Pitão , 12 bytes
Experimente online!
O filtro funciona assim: se algum elemento estiver em seu local original, (elemento-índice) será 0 e todo o produto será 0 e, portanto, falsey.
fonte