Introduction (peut être ignoré)
Mettre tous les nombres positifs dans son ordre régulier (1, 2, 3, ...) est un peu ennuyeux, n'est-ce pas? Voici donc une série de défis autour des permutations (remaniements) de tous les nombres positifs. Il s'agit du cinquième défi de cette série (liens vers les premier , deuxième , troisième et quatrième défis).
Dans ce défi, nous rencontrerons le tableau Wythoff, qui est une avalanche entrelacée de séquences de Fibonacci et de séquences Beatty!
Les nombres de Fibonacci sont probablement pour la plupart d'entre vous une séquence bien connue. Étant donné deux nombres de départ et , les sont donnés par: pour .
La séquence de Beatty , étant donné un paramètre est: pour . L'une des propriétés de la séquence Beatty est que pour chaque paramètre , il y a exactement un paramètre , de sorte que les séquences Beatty pour ces paramètres sont disjointes et jointes, elles s'étendent sur tous les nombres naturels à l'exclusion 0 (par exemple: ).
Voici maintenant la partie époustouflante: vous pouvez créer un tableau, où chaque ligne est une séquence Fibonacci et chaque colonne est une séquence Beatty. Ce tableau est le tableau Wythoff . La meilleure partie est: chaque nombre positif apparaît exactement une fois dans ce tableau! Le tableau ressemble à ceci:
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 ...
...
Un élément à la ligne et à la colonne est défini comme:
où est le nombre d'or: .
If we follow the anti-diagonals of this array, we get A035513, which is the target sequence for this challenge (note that this sequence is added to the OEIS by Neil Sloane himself!). Since this is a "pure sequence" challenge, the task is to output for a given as input, where is A035513.
There are different strategies you can follow to get to , which makes this challenge (in my opinion) really interesting.
Task
Étant donné une entrée entière , la sortie au format entier, où est A035513 .
Remarque: l'indexation basée sur 1 est supposée ici; vous pouvez utiliser une indexation basée sur 0, donc , etc. Veuillez le mentionner dans votre réponse si vous choisissez de l'utiliser.
Cas de test
Input | Output
---------------
1 | 1
5 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Il peut être amusant de savoir que le plus grand pour est
Règles
- L'entrée et la sortie sont des entiers
- Votre programme doit au moins prendre en charge les entrées comprises entre 1 et 32 767). Notez que va jusqu'à 30 numéros de chiffres dans cette gamme ...
- Une entrée non valide (0, flottants, chaînes, valeurs négatives, etc.) peut entraîner une sortie imprévue, des erreurs ou un comportement (non) défini.
- Les règles d'E / S par défaut s'appliquent.
- Les failles par défaut sont interdites.
- Il s'agit de code-golf , donc les réponses les plus courtes en octets l'emportent
999
not9999
Réponses:
Gelée ,
2724 octetsEssayez-le en ligne!
Lien monadique utilisant une indexation basée sur 1. Merci à @JonathanAllan pour une meilleure façon d'obtenir la ligne et les colonnes
n
et d'économiser 3 octets. Dans sa forme la plus courte, il est trop lent pour un n plus grand sur TIO, donc ce qui suit Essayez-le en ligne! réduit la taille de la liste initiale de lignes et de colonnes au prix de trois octets.Explication
Notez que cela est basé sur la description du code Python sur la page OEIS.
la source
...×⁹r‘ÆḞ¤Sð/
enregistre un dans votre version de fusion ( TIO )R ,
143130124123 octetsEssayez-le en ligne!
Utilise la formuleT( n , - 1 ) = n - 1 ; T( n , 0 ) = ⌊ n ⋅ ϕ ⌋ ; T( n , k ) = T( n , k - 1 ) + T( n , k - 2 ) pour construire le tableau (transposé), puis
splits
le tableau le long des antidiagonales.k
existe simplement pour empêcher de forcer undrop=F
argument dansm[-1:-2,]
l'affairen=1
.Merci à Neil d' avoir signalé un golf de 1 octet.
R ,
150138132 132 octetsEssayez-le en ligne!
Met en œuvre la formuleT( n , k ) = Fi b ( k + 1 ) ⋅ ⌊ n ⋅ ϕ ⌋ + Fi b ( k ) ⋅ ( n - 1 ) pour obtenir générer le tableau, puis le
splits
long des antidiagonales et extrait l'nth
élément.Merci à Robin Ryder pour l'
T[2]=1
astuce pour générer la séquence de Fibonacci.Les deux solutions sont très inefficaces, créant une
nxn
matrice de (très probablement)double
s, car R promeutinteger
(signé 32 bits)double
automatiquement en cas de débordement, mais la seconde devrait être beaucoup plus rapide. Prendren
comme un bignum devrait fonctionner automatiquement, en utilisant l'appelgmp::as.bigz(n)
, si la perte de précision sousdouble
s était inquiétante, et alors la langue le seraitR + gmp
.la source
(1+5^.5)/2
place de(.5+5^.5/2)
?Wolfram Language (Mathematica) , 90 octets
Essayez-le en ligne!
la source
Gelée , 30 octets
Essayez-le en ligne!
C'est un peu lent, mais une énorme amélioration est apportée avec un préfixe
Ḥ½Ċ
(double, racine carrée, plafond) comme dans cette suite de tests .la source
740496902
est le résultat pour999
Fusain , 54 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. 0 indexé. Utilise uniquement l'arithmétique entière et fonctionne donc pour les grandes valeurs arbitraires. Explication:
Entrée
q
.Calculez l'antidiagonale en soustrayant des nombres toujours croissants de
q
, ce qui aboutit au numéro de ligne ciblem
.Calculez les premiers
m+1
termes de A019446 , bien que nous ne nous intéressions qu'aum
th.Calculez les premiers
n+4
termes de la série généralisée de Fibonacci qui commence par[a(m), m]
. Les termes de cette séquence sont lesm
termes de A019446 , A001477 , A000201 , A003622 , A035336 ; ces deux dernières sont les deux premières colonnes du tableau Wythoff, et donc cette séquence continue avec le reste de lam
e ligne du tableau.Sortez le terme souhaité.
la source