La serie armonica alternata è una serie convergente ben nota.
"Chiaramente", è ovvio che converge nel registro naturale di 2. O lo fa?
Poiché la serie non è assolutamente convergente , semplicemente riorganizzando i termini, posso farla avvicinare a tutto ciò che voglio. Supponiamo che io voglia che le serie convergano in e . Tutto ciò che dovrei fare è questo:
Se non hai colto lo schema, non ce n'è uno ovvio. Ecco come funziona:
- Considera i termini delle serie armoniche alternate in termini di termini positivi e negativi.
- Aggiungi solo abbastanza termini positivi per superare il nostro obiettivo (e). (aka
sum > target) - Sottrai il prossimo termine negativo.
- Torna a 2.
Si noti che al passaggio 2, se nostro sum == target, è necessario aggiungere un altro termine positivo.
Da questo possiamo definire una sequenza associata a ciascun numero come segue:
- Segui l'algoritmo sopra
- Per ogni termine positivo, uscita 1.
- Per ogni termine negativo, output 0.
Chiamiamo questa sequenza "Harmonious Bit Pattern" di un numero. Ad esempio, l'HBP di e inizia come:
1, 1, 1, 1, <32 times>, 0, 1, 1, <54 times>, 0, 1, 1, ...
La tua sfida:
Ti verrà dato:
- un target di input razionale nell'intervallo [-10, 10] (nota: anche il raggiungimento di 10 tramite la serie armonica richiede molti milioni di termini). Questo può essere un decimale (aka
1.1) o puoi prendere direttamente un razionale (aka12/100) - un input positivo
intn , che specifica il numero di termini del modello di bit armonioso da emettere.
Ci si aspetta che l'output del modello di bit armonioso esatto del target esista al numero specificato di termini. È possibile generare valori separati da spazio, separati da virgola, nessuna separazione, ecc .; fintanto che il modello di 0 e 1 è chiaramente visibile e viene letto da sinistra a destra con una separazione coerente.
Casi test
>>> 0, 1
1
>>> 0, 2
10
>>> 0, 7
1000010
>>> 1, 10
1101011011
>>> 1.01, 3
110
>>> 1.01, 24
110101101101101101101101
>>> 2.71, 32
11111111111111111111111111111111
>>> 2.71, 144
111111111111111111111111111111110111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111
>>> -9.8, 100
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Si noti che poiché -9.8è così grande, il primo 1che verrebbe prodotto è da qualche parte attorno al 149496620termine (che è stato calcolato tramite float, quindi il valore potrebbe non essere esatto).
h a p qinvece dih p q asalvare un byte.