Desafio
Dado um número inteiro n ≥ 4 , imprima uma permutação dos números inteiros [0, n-1] com a propriedade de que não há dois números inteiros consecutivos (números inteiros com diferença absoluta 1) próximos um do outro.
Exemplos
- 4 → [1, 3, 0, 2]
- 5 → [0, 2, 4, 1, 3]
- 6 → [0, 2, 4, 1, 3, 5]
- 7 → [0, 2, 4, 1, 5, 3, 6]
Você pode usar a indexação 1 em vez disso (usando números inteiros [1, n] em vez de [0, n-1] ).
Seu código deve ser executado no tempo polinomial em n , para que você não possa tentar todas as permutações e testar cada uma.
[[1,3],[0,2]]
um formato de saída aceitável?Respostas:
Geléia ,
32 bytesClassifica os números inteiros em [1, ..., n] por seus LSB.
Experimente online!
fonte
Þ
classificação estável, porque é implementada usando asorted
função Python , que é garantida como estável .Python 2 , 32 bytes
Experimente online!
fonte
Python 3 ,
40, 38 bytesExperimente online!
Isso corre no
O(n)
tempo.Agradecimentos a Dennis por economizar 2 bytes!
fonte
Python 2 , 34 bytes
Experimente online!
Python 2 , 40 bytes
Experimente online!
fonte
Haskell, 22 bytes
f é uma função de n que retorna uma lista ordenada adequadamente. Estou usando a opção de indexação 1.
fonte
Oitava , 17 bytes
Experimente online!
Isso usa a mesma abordagem que muitas outras. Concatene dois vetores, um com todo o número par no intervalo inclusivo 2 ... x e todos os números ímpares no intervalo inclusivo 1 ... x . A sintaxe deve ser bastante óbvia, então não vou explicar isso.
fonte
3
e2
um ao lado do outrof(4)
?JavaScript (ES6), 40 bytes
Editar: salvou 1 byte graças a @Arnauld.
fonte
Gaia , 2 bytes
Experimente online!
Este simplesmente (estável) ∫ ORTS os inteiros no intervalo [1, entrada] por sua pa r dade.
fonte
R ,
393635 bytesExperimente online!
fonte
05AB1E , 3 bytes
Porto da resposta Python do DJMcMayhem e resposta da geléia de Dennis
Experimente online!
Quão?
fonte
Japonês, 4 bytes
Você também pode substituir
u
porv
para obter um pedido diferente.Tente
Ou, se pudermos produzir uma matriz de 2 matrizes:
Tente
fonte
4
, infelizmente; você pode corrigir o primeiro alterandou
parav
ouo
paraõ
.Mathematica, 50 -> 47 -> 42 bytes
Experimente online!
Agradecemos a user202729 por apontar o potencial de otimização duplo Join [] instalado do Flatten [] e usar funções puras.
Eu gostaria de acrescentar duas observações.
1) É bastante simples construir uma permutação específica sem sucessão decrescente ou crescente para n> = 4, conforme solicitado no PO.
Consiste em duas listas consecutivas.
Para n
iguais, são: list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
Para o número ímpar n, temos:
list1 = (2,4, ..., andar [n / 2])
list2 = (1,3, ..., andar [n / 2])
Para esse "algoritmo", apenas uma decisão deve ser tomada (n par ou ímpar), o resto é apenas escrever n números.
Uma possível solução Mathematica é fornecida na parte superior.
2) Uma questão relacionada é quantas dessas permutas existem em função de n.
Mathematica, 124 bytes
Experimente online!
Exemplo:
Contar o número de tais permutações é um problema padrão.
Para n = 4, existem 2: {{2,4,1,3}, {3,1,4,2}}
Para n = 5, existem 14: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
O número a (n) dessas permutações aumenta rapidamente: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
Para n grande, a razão a (n) / n! parece se aproximar do limite 1 / e ^ 2 = 0,135335 ... Não tenho prova estrita, mas é apenas uma conjectura da evidência numérica. Você pode testar isso tentando executar o programa online.
O programa acima (com base na referência fornecida abaixo) calcula esses números.
Você pode encontrar mais informações na sequência relevante em OEIS: A002464 . O problema de Hertzsprung: maneiras de organizar n reis não atacantes em um tabuleiro n X n, com 1 em cada linha e coluna. Também número de permutações de comprimento n sem sucessões crescentes ou decrescentes.
fonte
[some text](the_link)
. Quanto ao link "Experimente online", em particular, o site https://tio.run/ que está sendo hospedado por nosso próprio @Dennis contém links para todos os tipos de linguagens de programação. A Wolfram Language (Mathematica) é uma delas. Na parte superior, você pode clicar no botão de reprodução para executar o código ou no botão de hiperlink para copiar "Experimente online". links (marcação). E você pode dividir seu código em "Código" (seu envio) real, com um cabeçalho / rodapé opcional para (bonita) impressão de um ou vários casos de teste.JavaScript (Node.js) , 42 bytes
Experimente online!
JavaScript (Node.js) , 47 bytes
Experimente online!
fonte
Ruby , 27 bytes
Experimente online!
Usando indexação 1
fonte
Espaço em branco , 161 bytes
Aqui está o envio oficial e não comentado: Experimente online!
Experimente online!
Eu sacrifiquei alguns bytes para que o programa fosse executado sem erros, acredito que poderia perder cerca de 7-8 bytes, e ele ainda seria exibido corretamente, mas também enviaria mensagens de erro, e ninguém quer isso.
Explicação completa de bytes:
fonte
push_0, read_STDIN_as_int, push_0, retrieve
pode serpush_0, duplicate_0, read_STDIN_as_int, retrieve
para salvar um byte. E o primeiro rótulo pode ser vazio com emNSSN
vez deNSSSN
(e o segundo rótulo pode serNSSSN
; terceiroNSSTN
; e quartoNSSSSN
). Isso deve economizar 8 bytes também. Além disso, você pode remover o primeiroJump_to_third_label
porque já tem oSet_third_label
direito abaixo. No total: 140 bytes ; (ou com comentários: experimente online .) -3 bytes se você remover aNNN
saída.F # (Mono) , 27 bytes
Experimente online!
fonte
Gol> <> , 14 bytes
Experimente online!
Exemplo de programa completo e como funciona
fonte
J , 10 bytes
Experimente online!
Explicação:
fonte
Java 8, 56 bytes
Porta da resposta JavaScript (ES6) do @Neil .
Experimente online.
Resposta antiga de 66 bytes:
Experimente online.
Explicação:
fonte
Ruby, 27 bytes
Como nesta resposta , os
n
primeiros números inteiros são classificados pelo seu bit menos significativo.Experimente online!
fonte