Adattato da questo indovinello FiveThirtyEight .
sfondo
Esamina la seguente sequenza infinita:
3 3 3 2 3 3 3 2 3 3 3 2 3 3 2 3 3 3 2 ...
Diciamo che la sequenza è 1-indicizzata. Il inumero th nella sequenza determina quanti 3s ci sono prima del ith 2e dopo quelli precedenti 2. Quindi, poiché la sequenza inizia con una 3sequenza, deve iniziare 3 3 3 2e poiché ci sono tre 3secondi all'inizio della sequenza, la sottosequenza 3 3 3 2deve ripetersi tre volte. Dopodiché raggiungi 3 3 2perché è il quarto numero nella sequenza 2.
L'enigma FiveThirtyEight chiede il limite dei rapporti da tre a due (che non rovinerò qui) ma puoi anche chiedere quale sia il rapporto cumulativo dopo l'indice i. Ad esempio, il rapporto at i=4è 3/1 = 3e è i=15esso 11/4 = 2.75.
Andiamo in generale
Dati numeri ne kpossiamo fare una sequenza simile che inizia con ne proprio come la sequenza originale descritta, il numero all'indice idetermina quanti ns appaiono prima del ith ke dopo quelli precedenti k.
Esempi:
n=2, k=5 dà la sequenza 2 2 5 2 2 5 2 2 2 2 2 5 2 2 5 ...
n=3, k=0 dà 3 3 3 0 3 3 3 0 3 3 3 0 0 3 3 3 0 ...
n=1, k=3 dà 1 3 1 1 1 3 1 3 1 3 1 3 1 1 1 3 1 ...
La sfida
Scrivi una funzione / programma e con esso procedi come segue. Prendi come input:
- un numero intero positivo
n - un numero intero non negativo
k ≠ n - un numero intero positivo
i > n
I primi due input ne kdeterminano una sequenza come descritto sopra ed iè un indice. Sto usando l'indicizzazione 1 negli esempi ma hai la libertà di usare l'indicizzazione 0 o 1. Se 0-indicizzato, la limitazione iè i ≥ n.
Con i tre numeri emette il rapporto da ns a ks nella sequenza fino al numero dell'indice compreso i. Il formato dell'output può essere un valore decimale con almeno 5 cifre di precisione o un valore esatto come rapporto come 3524/837o 3524:837.
In forma decimale, l'ultima cifra può essere arrotondata come preferisci. Sono consentiti zeri finali e spazi bianchi.
In entrambe le forme di stringa i due numeri devono essere normalizzati in modo che siano coprimi. Ad esempio se il rapporto era 22/4 11/2e 11:2sono accettabili ma 22/4non lo sono.
Esempi
n k i output
2 4 15 2.75 or 11/4
6 0 666 5.1101 or 557:109
50 89 64 63 or 63:1
3 2 1000 2.7453 or 733/267
9 12 345 9.4545 or 104/11
Questo è il golf del codice per lingua, quindi il codice più corto in ogni lingua è il vincitore.
/o :semplicemente aggiunge una complicazione non necessaria alla sfida.