Introduzione (potrebbe essere ignorata)
Mettere tutti i numeri positivi nel suo ordine regolare (1, 2, 3, ...) è un po 'noioso, no? Quindi ecco una serie di sfide intorno alle permutazioni (rimpasto) di tutti i numeri positivi. Questa è la quinta sfida di questa serie (collegamenti alla prima , seconda , terza e quarta sfida).
In questa sfida, incontreremo l'array Wythoff, che è una valanga intrecciata di sequenze di Fibonacci e sequenze di Beatty!
I numeri di Fibonacci sono probabilmente per molti di voi una sequenza ben nota. Dati due numeri iniziali e , i seguenti sono dati da: per .
La sequenza di Beatty , dato un parametro è: per . Una delle proprietà della sequenza di Beatty è che per ogni parametro , esiste esattamente un parametro , in modo tale che le sequenze di Beatty per quei parametri siano disgiunte e unite insieme, si estendono su tutti i numeri naturali escludendo 0 (ad es .: ).
Ora ecco che arriva la parte strabiliante: puoi creare un array, in cui ogni riga è una sequenza di Fibonacci e ogni colonna è una sequenza Beatty. Questo array è l' array Wythoff . La parte migliore è: ogni numero positivo appare esattamente una volta in questo array! L'array è simile al seguente:
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 elemento alla riga colonna è definito come:
dove è il rapporto aureo: .
Se seguiamo le anti-diagonali di questo array, otteniamo A035513 , che è la sequenza target per questa sfida (nota che questa sequenza viene aggiunta all'OEIS dallo stesso Neil Sloane !). Poiché si tratta di una sfida "sequenza pura", il compito è quello di produrre per un dato come input, dove è A035513 .
Ci sono diverse strategie che si possono seguire per arrivare a , il che rende questa sfida (a mio parere) davvero interessante.
Compito
Dato un input intero , output in formato intero, dove è A035513 .
Nota: qui si assume l'indicizzazione basata su 1; puoi utilizzare l'indicizzazione basata su 0, quindi , ecc. Indicare questo nella risposta se si sceglie di utilizzarlo.
Casi test
Input | Output
---------------
1 | 1
5 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Potrebbe essere divertente sapere che il più grande per è
Regole
- Input e output sono numeri interi
- Il tuo programma dovrebbe almeno supportare input nell'intervallo da 1 a 32767). Nota che arriva fino a 30 cifre in questo intervallo ...
- Input non validi (0, float, stringhe, valori negativi, ecc.) Possono causare output non previsti, errori o comportamenti (non) definiti.
- Si applicano le regole I / O predefinite .
- Sono vietate le scappatoie predefinite .
- Questo è code-golf , quindi vince la risposta più breve in byte
999non9999