Para esse desafio, você criará uma função (sua função pode ser um programa completo) que recebe uma lista como entrada e retorna uma permutação dessa lista. Sua função deve obedecer aos seguintes requisitos.
Deve ser determinístico.
A composição da sua função consigo um número variável de vezes deve ser capaz de obter uma lista para qualquer uma de suas permutações.
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.
Regras adicionais
Você pode tomar qualquer tipo de lista, (
[Integer]
,[String]
,[[Integer]]
) desde que- Pode não estar vazio
- Pode conter objetos distintos com pelo menos 16 valores possíveis. (Você não pode usar um Haskell
[()]
e afirmar que sua função éid
) - Pode conter objetos duplicados (sem conjuntos)
Você pode escrever um programa ou uma função, mas deve obedecer a IO padrão.
code-golf
permutations
Caçador Ad Hoc Garf
fonte
fonte
S_n
só é cíclica paran<3
next_permutation
função.Respostas:
CJam (11 bytes)
Demonstração online mostrando o ciclo completo de uma lista de quatro elementos com um elemento duplicado.
Dissecação
fonte
Mathematica + Combinatorica (pacote embutido) 34 bytes
19 bytes para carregar o pacote e 15 para a função.
Uso:
Sem o built-in, 61 bytes
Combinatorica deveria ser totalmente incorporado ao Mathematica, mas acho que a função NextPermutation foi ignorada.
fonte
Python 3 , 90 bytes
Experimente online!
fonte
C ++, 42 bytes
Essa operação exata é integrada ao C ++.
fonte
#include
?JavaScript (ES6),
145139137134108 bytesEconomizou 25 bytes graças a @Neil!
Recebe a entrada como uma matriz de caracteres alfabéticos. Retorna a próxima permutação como outra matriz.
Como?
Esta é uma geração em ordem lexicográfica que processa as 4 etapas a seguir em cada iteração:
Encontre o maior índice X de modo que um [X] <a [X + 1]
Encontre o maior índice Y maior que X, de modo que [Y]> a [X]
Troque o valor de um [X] pelo valor de um [Y]
Classifique a sequência de um [X + 1] até e incluindo o elemento final, em ordem lexicográfica crescente
Exemplo:
Demo
Mostrar snippet de código
fonte
v<a[i+1]&&(t=v,x=i)
economiza um byte e você poderá economizar mais usando emsplice
vez de doisslice
s.map
s, bem como, para 112 bytes:a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
a.concat(a.splice(++x).sort())
estava indo para o trabalho, caso contrário eu teria tentado ...Gelatina , 6 bytes
Percorre as permutações em ordem lexicográfica descendente.
Experimente online!
Como funciona
fonte
C, 161 bytes
Algoritmo O (n) real.
Exemplo de uso:
fonte
Python 2 , 154 bytes
Experimente online!
fonte
exec
me deu todos os tipos de erros em uma funçãoGelatina , 10 bytes
Experimente online!
Classifique> toda permutação> encontre entrada> adicione 1> índice em "toda permutação
fonte
Œ¿‘œ?Ṣ
). Eu não tinha vontade de roubar, já que, bem, o mesmo algo.Q
coisa. Você ainda pode jogar golfeṢŒ!Qµi³‘ị
.05AB1E , 7 bytes
Experimente online!
fonte
PHP , 117 bytes
Toma entrada / saída como lista de cadeias de letras mais baixas
Experimente online!
fonte