Introdução (pode ser ignorado)
Colocar todos os números positivos em sua ordem regular (1, 2, 3, ...) é um pouco chato, não é? Então, aqui está uma série de desafios em torno de permutações (reorganizações) de todos os números positivos. Este é o quarto desafio desta série (links para o primeiro , segundo e terceiro desafios).
Neste desafio, exploraremos não uma permutação dos números naturais, mas um mundo inteiro de permutações!
Em 2000, Clark Kimberling colocou um problema na 26ª edição do Crux Mathematicorum , um periódico científico de matemática publicado pela Canadian Mathematics Society. O problema foi:
Todo inteiro positivo ocorre exatamente uma vez nesta sequência?
Em 2004, Mateusz Kwasnicki forneceu provas positivas na mesma revista e, em 2008, publicou uma prova mais formal e (em comparação com a pergunta original) uma prova mais geral. Ele formulou a seqüência com parâmetros e :
Ele provou que para qualquer tal que seja irracional, a sequência é uma permutação dos números naturais. Uma vez que há um número infinito de e valores para os quais isso é verdade, este é verdadeiramente um todo mundo de permutações dos números naturais. Manteremos o original e, para esses parâmetros, a sequência pode ser encontrada como A050000 no OEIS. Seus primeiros 20 elementos são:
1, 3, 9, 4, 2, 6, 18, 54, 27, 13, 39, 19, 57, 28, 14, 7, 21, 10, 5, 15
Como esse é um desafio de "sequência pura", a tarefa é gerar para um dado como entrada, onde é A050000 .
Tarefa
Dada uma entrada inteira , imprima no formato inteiro, em que:
Nota: a indexação baseada em 1 é assumida aqui; você pode usar a indexação baseada em 0; portanto, , etc. Por favor mencione isso na sua resposta se você optar por usá-lo.
Casos de teste
Input | Output
---------------
1 | 1
5 | 2
20 | 15
50 | 165
78 | 207
123 | 94
1234 | 3537
3000 | 2245
9999 | 4065
29890 | 149853
Regras
- Entrada e saída são números inteiros (seu programa deve, pelo menos, suportar entrada e saída no intervalo de 1 a 32767)
- Entrada inválida (0, valores flutuantes, seqüências de caracteres, valores negativos etc.) pode levar a resultados imprevisíveis, erros ou comportamento (não) definido.
- Regras de E / S padrão se aplicam.
- As brechas padrão são proibidas.
- Isso é código-golfe , então as respostas mais curtas em bytes ganham
Respostas:
Japonês ,
1514 bytes1 indexado.
Tente
fonte
JavaScript (ES6),
55 5150 bytesGuardou 1 byte graças a @EmbodimentofIgnorance Guardou
1 byte graças a @tsh
Experimente online!
fonte
n=>eval("for(o=[p=2];n--;)o[p=o[q=p>>1]?3*p:q]=p")
Gelatina , 15 bytes
Um programa completo que aceita o número inteiro
n
(baseado em 1) do STDIN que imprime o resultado.Experimente online!
Quão?
fonte
05AB1E ,
1615 bytesGuardou 1 byte graças a Kevin Cruijssen .
Indexado a 0.
Experimente online!
Explicação
Usando
n=1
como exemplofonte
Perl 6 , 49 bytes
-2 bytes graças a nwellnof
Experimente online!
Retorna o elemento indexado 0 na sequência. Você pode alterar isso para 1 indexado, alterando os elementos iniciais para em
0,1
vez de1,3
Explicação:
fonte
J ,
4740 bytesExperimente online!
destroçado
Tradução direta da definição em J. Ele cria de baixo para cima usando
^:
para iterar do valor inicial o número de vezes necessário.fonte
Java 10,
12099 bytesExperimente online.
Explicação:
fonte
Haskell ,
6765 bytesExperimente online!
Usa indexação baseada em 0.
EDIT: salvou 2 bytes usando em
elem
vez denotElem
e alternando condiçõesfonte
Gelatina , 21 bytes
Experimente online!
fonte
Ruby ,
545248 bytesExperimente online!
fonte
C ++ (gcc) ,
189180 bytes-9 bytes em golfe pequeno
Experimente online!
Calcula a sequência até e
n
, em seguida, retorna o elemento desejado. Lento para índices maiores.fonte
Python 2 , 66 bytes
Experimente online!
Usa indexação baseada em zero. O lambda faz pouco mais do que construir recursivamente a sequência e retornar assim que o índice necessário for atingido.
fonte
Stax , 14 bytes
Execute e depure
Indexado a zero.
fonte
Wolfram Language (Mathematica) , 63 bytes
Experimente online!
Isso é indexado em 0
(no TIO eu adicionei -1 em todos os casos de teste)
fonte
Python 2 , 62 bytes
Experimente online!
Retorna
True
paraa(0)
. Indexado a 0.fonte
Python 3 ,
1051031009583 bytes-2 bytes graças a todos os outros
-12 bytes graças a ArBo
Experimente online!
fonte
while len(s)<=n
e substituir os i's por-1
. Isso deve cortar um dos dois caracteres.if
dowhile
loop para permitir um alinhamento desse loopGaia ,
2220 bytesExperimente online!
Índice baseado em 0.
Agradecemos a Shaggy pela abordagem
;D
fonte
Haskell , 55 bytes
Experimente online!
Golfe método liso lista geração da user1472751 .
Mesmo comprimento:
Experimente online!
fonte
Lua , 78 bytes
Experimente online!
fonte
z
variável e alteração da instrução if para ternário