Sequenza Divinacci


23

Divinacci ( OEIS )

Esegui la sequenza di Fibonacci ma invece di usare:

f(n) = f(n-1)+f(n-2)

Uso:

f(n) = sum(divisors(f(n-1))) + sum(divisors(f(n-2)))

Per un input di n, output l'ennesimo termine, il tuo programma dovrebbe avere solo 1 input.


Primi 14 termini (indicizzato 0, è possibile 1 indice; indicare quale è stato utilizzato):

0  | 0     # Initial               | []
1  | 1     # Initial               | [1] => 1
2  | 1     # [] + [1]              | [1] => 1
3  | 2     # [1] + [1]             | [1,2] => 3
4  | 4     # [1] + [1,2]           | [1,2,4] => 7
5  | 10    # [1,2] + [1,2,4]       | [1,2,5,10] => 18
6  | 25    # [1,2,4] + [1,2,5,10]  | [1,5,25] => 31
7  | 49    # [1,2,5,10] + [1,5,25] | [1,7,49] => 57
8  | 88    # [1,5,25] + [1,7,49]   | [1, 2, 4, 8, 11, 22, 44, 88] => 180
9  | 237   # [1,7,49] + [180]      | [1, 3, 79, 237] => 320
10 | 500   # [180] + [320]         | [1, 2, 4, 5, 10, 20, 25, 50, 100, 125, 250, 500] => 1092
11 | 1412  # [320] + [1092]        | [1, 2, 4, 353, 706, 1412] => 2478
12 | 3570  # [1092] + [2478]       | [1, 2, 3, 5, 6, 7, 10, 14, 15, 17, 21, 30, 34, 35, 42, 51, 70, 85, 102, 105, 119, 170, 210, 238, 255, 357, 510, 595, 714, 1190, 1785, 3570] => 10368
13 | 12846 # [2478] + [10368]      | [1, 2, 3, 6, 2141, 4282, 6423, 12846] => 25704
Etc...

Puoi scegliere se includere o meno lo 0 iniziale. Per coloro che lo fanno: i divisori di 0sono []ai fini di questa sfida.

Vince il conteggio di byte più basso di ...


15
Tutti i numeri naturali dividono 0 , quindi la sua somma divisore è + ∞ .
Dennis,

9
@Dennis finalmente qualcuno che non pensa che 1 + 2 + 3 + ... = -1/12.
Leaky Nun,

1
@Dennis Possiamo sbarazzarci dello 0 e renderlo valido comunque: P. Oppure puoi semplicemente inviare una risposta a Mathematica Infinityse lo desideri.
Magic Octopus Urn,

La risposta della gelatina sarebbe più breve. : P Puoi cambiare la sequenza (probabilmente anche la risposta avrebbe bisogno di modifiche) o cambiarne la descrizione (inizia con i valori di base 0, 1, 1 ).
Dennis,

1
@carusocomputing Se non cambia la sequenza, come può influenzare le risposte?
Martin Ender,

Risposte:


10

05AB1E , 9 byte

XÎFDŠ‚ÑOO

Provalo online!

Spiegazione

XÎ          # initialize stack with 1,0,input
  F         # input times do
   D        # duplicate
    Š       # move down 2 places on the stack
     ‚      # pair the top 2 elements on the stack
      Ñ     # compute divisors of each
       OO   # sum twice

Tante operazioni di scambio in corso, eh! Interessante.
Magic Octopus Urn,

2
Mi piace come gli ultimi due byte gridino con forza al lettore.
Rohan Jhunjhunwala,

1
Hai vinto questo per 2 minuti lol.
Magic Octopus Urn,

8

Matematica, 45 40 byte

If[#<3,1,Tr@Divisors@#0[#-i]~Sum~{i,2}]&

Le funzioni relative al divisore di Mathematica Divisors, DivisorSume non DivisorSigmasono tutte definite n = 0 (giustamente), quindi iniziamo da f(1) = f(2) = 1e non supportiamo l'input 0.

Definirlo come operatore invece di utilizzare una funzione senza nome sembra essere più lungo di due byte:

±1=±2=1
±n_:=Sum[Tr@Divisors@±(n-i),{i,2}]

* 7 byte più lunghi a meno che non ±sia 1 byte in una codifica supportata da Mathematica.
Calcolatrice

@CalculatorFeline Lo è. (L'impostazione predefinita per i $CharacterEncodingcomputer Windows è WindowsANSI, ad esempio, CP 1252.)
Martin Ender,

1
Buono a sapersi. .
Calcolatrice




3

MATL, 16 15 byte

Oliq:",yZ\s]+]&

Questa soluzione utilizza l'indicizzazione basata su 0.

Provalo su MATL Online

Spiegazione

O        % Push the number literal 0 to the stack
l        % Push the number literal 1 to the stack
i        % Explicitly grab the input (n)
q        % Subtract 1
:        % Create the array [1...(n - 1)]
"        % For each element in this array...
  ,      % Do the following twice
    y    % Copy the stack element that is 1-deep
    Z\   % Compute the divisors
    s    % Sum the divisors
  ]      % End of do-twice loop
  +      % Add these two numbers together
]        % End of for loop
&        % Display the top stack element

3

Gelatina , 10 9 byte

ð,ÆDẎSð¡1

Provalo online!

Grazie a Dennis per -1.



@Dennis 0Era implicito?
Erik the Outgolfer,

Quando si prende il numero di iterazioni da STDIN, si ottiene una catena niladica e 0 è l'argomento implicito delle catene niladiche.
Dennis,

@Dennis Quindi, ¡e altri cercheranno di prendere una discussione da ogni parte, anche con un Ɠ? È abbastanza inaspettato ...
Erik the Outgolfer,

Se non diversamente specificato, ¡et al. accetta l'ultimo argomento della riga di comando e, se non ce ne sono, legge una riga da STDIN.
Dennis,





1

R, 81 byte

f=function(n,a=1,b=1,d=numbers::divisors)`if`(n-1,f(n-1,b,sum(d(a))+sum(d(b))),a)

1 indicizzato ed esclude lo 0 all'inizio della sequenza. Questo zero mi ha dato molti problemi da implementare, perché l'integrato numbers::divisorsnon lo gestisce bene.

Il resto è una versione modificata della funzione ricorsiva standard che implementa la sequenza fibonacci.

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.