Padovan n-step number sequences: Difference between revisions

From Rosetta Code
Content added Content deleted
(julia version)
Line 99: Line 99:
"""))
"""))
for (n, seq) in enumerate(p)
for (n, seq) in enumerate(p)
println("| {$n} || $(replace(seq[2:end], " " => "")), ...\n|-")
println("| $n || $(replace(string(seq[2:end]), r"[ a-zA-Z]+" => "")), ...\n|-")
end
end
println("|}")
println("|}")
Line 111: Line 111:
! <math>n</math> !! Values
! <math>n</math> !! Values
|-
|-
| {1} || Any[1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37], ...
| 1 || [1,1,2,2,3,4,5,7,9,12,16,21,28,37], ...
|-
|-
| {2} || Any[1, 1, 2, 3, 4, 6, 9, 13, 19, 28, 41, 60, 88, 129], ...
| 2 || [1,1,2,3,4,6,9,13,19,28,41,60,88,129], ...
|-
|-
| {3} || Any[1, 1, 2, 3, 5, 7, 11, 17, 26, 40, 61, 94, 144, 221], ...
| 3 || [1,1,2,3,5,7,11,17,26,40,61,94,144,221], ...
|-
|-
| {4} || Any[1, 1, 2, 3, 5, 8, 12, 19, 30, 47, 74, 116, 182, 286], ...
| 4 || [1,1,2,3,5,8,12,19,30,47,74,116,182,286], ...
|-
|-
| {5} || Any[1, 1, 2, 3, 5, 8, 13, 20, 32, 51, 81, 129, 205, 326], ...
| 5 || [1,1,2,3,5,8,13,20,32,51,81,129,205,326], ...
|-
|-
| {6} || Any[1, 1, 2, 3, 5, 8, 13, 21, 33, 53, 85, 136, 218, 349], ...
| 6 || [1,1,2,3,5,8,13,21,33,53,85,136,218,349], ...
|-
|-
| {7} || Any[1, 1, 2, 3, 5, 8, 13, 21, 34, 54, 87, 140, 225, 362], ...
| 7 || [1,1,2,3,5,8,13,21,34,54,87,140,225,362], ...
|-
|-
|}
|}



=={{Header|Python}}==
=={{Header|Python}}==

Revision as of 00:52, 14 March 2021

As the Fibonacci sequence expands to the Fibonacci n-step number sequences; We similarly expand the Padovan sequence to form these Padovan n-step number sequences.

The Fibonacci-like sequences can be defined like this:

   For n == 2:
       start:      1, 1
       Recurrence: R(n, x) = R(n, x-1) + R(n, x-2); for n == 2
   For n == N:
       start:      First N terms of R(N-1, x)
       Recurrence: R(N, x) = sum(R(N, x-1) + R(N, x-2) + ... R(N, x-N))

For this task we similarly define terms of the first 2..n-step Padowan sequences as:

   For n == 2:
       start:      1, 1, 1
       Recurrence: R(n, x) = R(n, x-2) + R(n, x-3); for n == 2
   For n == N:
       start:      First N + 1 terms of R(N-1, x)
       Recurrence: R(N, x) = sum(R(N, x-2) + R(N, x-3) + ... R(N, x-N-1))

The initial values of the sequences are:

Padovan -step sequences
Values OEIS Entry
2 1,1,1,2,2,3,4,5,7,9,12,16,21,28,37, ... A134816: 'Padovan's spiral numbers'
3 1,1,1,2,3,4,6,9,13,19,28,41,60,88,129, ... A000930: 'Narayana's cows sequence'
4 1,1,1,2,3,5,7,11,17,26,40,61,94,144,221, ... A072465: 'A Fibonacci-like model in which each pair of rabbits dies after the birth of their 4th litter'
5 1,1,1,2,3,5,8,12,19,30,47,74,116,182,286, ... A060961: 'Number of compositions (ordered partitions) of n into 1's, 3's and 5's'
6 1,1,1,2,3,5,8,13,20,32,51,81,129,205,326, ... <not found>
7 1,1,1,2,3,5,8,13,21,33,53,85,136,218,349, ... A117760: 'Expansion of 1/(1 - x - x^3 - x^5 - x^7)'
8 1,1,1,2,3,5,8,13,21,34,54,87,140,225,362, ... <not found>


Task
  1. Write a function to generate the first terms, of the first 2..max_n Padovan -step number sequences as defined above.
  2. Use this to print and show here at least the first t=15 values of the first 2..8 -step sequences.
    (The OEIS column in the table above should be omitted).

Factor

Works with: Factor version 0.99 2021-02-05

<lang factor>USING: compiler.tree.propagation.call-effect io kernel math math.ranges prettyprint sequences ;

padn ( m n -- seq )
   V{ "|" 1 1 1 } over prefix clone over 2 -
   [ dup last2 + suffix! ] times rot pick 1 + -
   [ dup length 1 - pick [ - ] keepd pick <slice> sum suffix! ]
   times nip ;

"Padovan n-step sequences" print 2 8 [a..b] [ 15 swap padn ] map simple-table.</lang>

Output:
Padovan n-step sequences
2 | 1 1 1 2 2 3 4 5  7  9  12 16 21  28  37
3 | 1 1 1 2 3 4 6 9  13 19 28 41 60  88  129
4 | 1 1 1 2 3 5 7 11 17 26 40 61 94  144 221
5 | 1 1 1 2 3 5 8 12 19 30 47 74 116 182 286
6 | 1 1 1 2 3 5 8 13 20 32 51 81 129 205 326
7 | 1 1 1 2 3 5 8 13 21 33 53 85 136 218 349
8 | 1 1 1 2 3 5 8 13 21 34 54 87 140 225 362

Julia

Translation of: Python

<lang julia> """

   First nterms terms of the first 2..max_nstep -step Padowan sequences.

""" function nstep_Padowan(max_nstep=8, nterms=15)

   start = [[], [1, 1, 1]]     # for n=0 and n=1 (hidden).
   for n in 2:max_nstep
       this = start[n][1:n+1]     # Initialise from last
       while length(this) < nterms
           push!(this, sum([this[end - i] for i in 1:n]))
       end
       push!(start, this)
   end
   return start[3:end]

end

function print_Padowan_seq(p)

   println(strip("""
""")) for (n, seq) in enumerate(p) println("| $n || $(replace(string(seq[2:end]), r"[ a-zA-Z]+" => "")), ...\n|-") end println("|}") end print_Padowan_seq(nstep_Padowan()) </lang>
Output:
Padovan -step sequences
Values
Padovan -step sequences
Values
1 [1,1,2,2,3,4,5,7,9,12,16,21,28,37], ...
2 [1,1,2,3,4,6,9,13,19,28,41,60,88,129], ...
3 [1,1,2,3,5,7,11,17,26,40,61,94,144,221], ...
4 [1,1,2,3,5,8,12,19,30,47,74,116,182,286], ...
5 [1,1,2,3,5,8,13,20,32,51,81,129,205,326], ...
6 [1,1,2,3,5,8,13,21,33,53,85,136,218,349], ...
7 [1,1,2,3,5,8,13,21,34,54,87,140,225,362], ...

Python

Generates a wikitable formatted output <lang python>def pad_like(max_n=8, t=15):

   """
   First t terms of the first 2..max_n-step Padowan sequences.
   """
   start = [[], [1, 1, 1]]     # for n=0 and n=1 (hidden).
   for n in range(2, max_n+1):
       this = start[n-1][:n+1]     # Initialise from last
       while len(this) < t:
           this.append(sum(this[i] for i in range(-2, -n - 2, -1)))
       start.append(this)
   return start[2:]

def pr(p):

   print(
.strip()) for n, seq in enumerate(p, 2): print(f"| {n:2} || {str(seq)[1:-1].replace(' ', )+', ...'}\n|-") print('|}') if __name__ == '__main__': p = pad_like() pr(p)</lang>
Output:
Padovan -step sequences
Values
Padovan -step sequences
Values
2 1,1,1,2,2,3,4,5,7,9,12,16,21,28,37, ...
3 1,1,1,2,3,4,6,9,13,19,28,41,60,88,129, ...
4 1,1,1,2,3,5,7,11,17,26,40,61,94,144,221, ...
5 1,1,1,2,3,5,8,12,19,30,47,74,116,182,286, ...
6 1,1,1,2,3,5,8,13,20,32,51,81,129,205,326, ...
7 1,1,1,2,3,5,8,13,21,33,53,85,136,218,349, ...
8 1,1,1,2,3,5,8,13,21,34,54,87,140,225,362, ...