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 quinto desafio desta série (links para o primeiro , segundo , terceiro e quarto desafio).
Neste desafio, conheceremos o conjunto Wythoff, que é uma avalanche entrelaçada de sequências de Fibonacci e de Beatty!
Os números de Fibonacci são provavelmente para a maioria de vocês uma sequência bem conhecida. Dados dois números iniciais e , os seguintes são dados por: para .
A sequência de Beatty , dado um parâmetro é: para . Uma das propriedades da sequência de Beatty é que, para cada parâmetro , existe exatamente um parâmetro , de modo que as seqüências de Beatty para esses parâmetros são disjuntas e unidas, elas abrangem todos os números naturais, excluindo 0 (por exemplo: ).
Agora, aqui vem a parte surpreendente: você pode criar uma matriz, em que cada linha é uma sequência de Fibonacci e cada coluna é uma sequência de Beatty. Essa matriz é a matriz Wythoff . A melhor parte é: todo número positivo aparece exatamente uma vez nessa matriz! A matriz fica assim:
1 2 3 5 8 13 21 34 55 89 144 ...
4 7 11 18 29 47 76 123 199 322 521 ...
6 10 16 26 42 68 110 178 288 466 754 ...
9 15 24 39 63 102 165 267 432 699 1131 ...
12 20 32 52 84 136 220 356 576 932 1508 ...
14 23 37 60 97 157 254 411 665 1076 1741 ...
17 28 45 73 118 191 309 500 809 1309 2118 ...
19 31 50 81 131 212 343 555 898 1453 2351 ...
22 36 58 94 152 246 398 644 1042 1686 2728 ...
25 41 66 107 173 280 453 733 1186 1919 3105 ...
27 44 71 115 186 301 487 788 1275 2063 3338 ...
...
Um elemento em fileira e coluna é definido como:
onde é a proporção áurea: .
Se seguirmos as antiagonais dessa matriz, obteremos A035513 , que é a sequência de destino para esse desafio (observe que essa sequência é adicionada ao OEIS pelo próprio Neil Sloane !). Como esse é um desafio de "sequência pura", a tarefa é gerar para um dado como entrada, onde é A035513 .
Existem diferentes estratégias que você pode seguir para chegar a , o que torna esse desafio (na minha opinião) realmente interessante.
Tarefa
Dada uma entrada inteira , imprima no formato inteiro, onde é A035513 .
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 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Pode ser divertido saber que o maior para é
Regras
- Entrada e saída são números inteiros
- Seu programa deve, no mínimo, suportar entrada no intervalo de 1 a 32767). Observe que atinge até 30 dígitos neste intervalo ...
- 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
999
não9999
Respostas:
Geléia ,
2724 bytesExperimente online!
Link monádico usando indexação baseada em 1. Obrigado a JonathanAllan por uma maneira melhor de obter a linha e as colunas
n
e salvar 3 bytes. Em sua forma mais curta, é muito lento para n maior no TIO, portanto, faça o seguinte Experimente online! reduz o tamanho da lista inicial de linhas e colunas ao custo de três bytes.Explicação
Observe que isso se baseia na descrição do código Python na página OEIS.
fonte
...×⁹r‘ÆḞ¤Sð/
salva um em sua amálgama versão ( TIO )R ,
143130124123 bytesExperimente online!
splits
a matriz ao longo das antidiagonais.k
simplesmente existe para evitar forçar umdrop=F
argumentom[-1:-2,]
para o cason=1
.Agradecimentos a Neil por apontar um golfe de 1 byte.
R ,
150138132 bytesExperimente online!
splits
ao longo das antidiagonals e extrai onth
elemento.Obrigado a Robin Ryder pelo
T[2]=1
truque para gerar a sequência de Fibonacci.Ambas as soluções são altamente ineficientes, criando uma
nxn
matriz de (provavelmente)double
s, como R promoveinteger
(assinado de 32 bits) paradouble
automaticamente ao transbordar, mas a segunda deve ser muito mais rápida. Tomandon
como um bignum deve funcionar automaticamente, usando a chamadagmp::as.bigz(n)
, se a perda de precisão emdouble
s for preocupante e, em seguida, o idioma forR + gmp
.fonte
(1+5^.5)/2
vez de(.5+5^.5/2)
?Wolfram Language (Mathematica) , 90 bytes
Experimente online!
fonte
Gelatina , 30 bytes
Experimente online!
Isso é um pouco lento, mas uma grande melhoria é feita com um prefixo de
Ḥ½Ċ
(dobro, raiz quadrada, teto), como nesta suíte de testes .fonte
740496902
é o resultado para999
Carvão , 54 bytes
Experimente online! Link é a versão detalhada do código. Indexado a 0. Utiliza apenas aritmética inteira, portanto, funciona com valores grandes arbitrários. Explicação:
Entrada
q
.Calcule o antidiagonal subtraindo números cada vez maiores de
q
, que terminam com o número da linha de destinom
.Calcule os primeiros
m+1
termos de A019446 , embora estejamos interessados apenas nom
th.Calcule os primeiros
n+4
termos da série generalizada de Fibonacci que começa com[a(m), m]
. Os termos desta sequência são osm
th th termos de A019446 , A001477 , A000201 , A003622 , A035336 ; essas duas últimas são as duas primeiras colunas da matriz Wythoff e, portanto, essa sequência continua com o restante dam
quinta linha da matriz.Saída o termo desejado.
fonte