Padovan sequence: Difference between revisions
Content added Content deleted
(Add Elixir implementation) |
(Added FreeBASIC) |
||
Line 1,214: | Line 1,214: | ||
The L-system, recurrence and floor based algorithms match to n=31. |
The L-system, recurrence and floor based algorithms match to n=31. |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
|||
{{trans|11l}} |
|||
<syntaxhighlight lang="vbnet">Const As Double pp = 1.324717957244746025960908854 |
|||
Const As Double ss = 1.0453567932525329623 |
|||
Function padovan1(Byval n As Integer) As Integer |
|||
Dim As Integer a, b, c, d, i |
|||
a = 1: b = 1: c = 1 |
|||
d = 1 |
|||
For i = 1 To (n - 3) |
|||
d = a + b |
|||
a = b : b = c : c = d |
|||
Next i |
|||
Return d |
|||
End Function |
|||
Function padovan2(Byval n As Integer) As Integer |
|||
Dim As Double p = 1.0 |
|||
For i As Integer = 1 To (n - 1) |
|||
p *= pp |
|||
Next i |
|||
Return Fix(p / ss) |
|||
End Function |
|||
Function padovan3(Byval n As Integer) As String |
|||
Dim As String sgte, s = "A" |
|||
Dim As Integer i, j, c |
|||
Dim As String rules(1 To 3) = {"B", "C", "AB"} |
|||
For i = 1 To n |
|||
sgte = "" |
|||
For j = 1 To Len(s) |
|||
Select Case Mid(s, j, 1) |
|||
Case "A" : c = 1 |
|||
Case "B" : c = 2 |
|||
Case "C" : c = 3 |
|||
End Select |
|||
sgte &= rules(c) |
|||
Next j |
|||
s = sgte |
|||
Next i |
|||
Return s |
|||
End Function |
|||
Dim As Integer n |
|||
Print "First 20 terms of the Padovan sequence:" |
|||
For n = 1 To 20 |
|||
Print padovan1(n); '" "; |
|||
Next |
|||
n = 1 |
|||
Dim As Boolean areEqual = True |
|||
Dim As Integer list1(64), list2(64) |
|||
Do While n <= 64 And areEqual = False |
|||
list1(n) = padovan1(n) |
|||
list2(n) = padovan2(n) |
|||
If list1(n) <> list2(n) Then areEqual = False |
|||
n += 1 |
|||
Loop |
|||
Print !"\nThe first 64 iterative and calculated values "; |
|||
Print Iif(areEqual, "are the same.", "differ.") |
|||
Print !"\nFirst 10 L-system strings:" |
|||
For n = 0 To 9 |
|||
Print padovan3(n); " "; |
|||
Next |
|||
Print |
|||
areEqual = True |
|||
Dim As Integer list3(31) |
|||
Print !"\nLengths of the 32 first L-system strings:" |
|||
For n = 0 To 31 |
|||
list3(n) = Len(padovan3(n)) |
|||
Print list3(n); '" "; |
|||
If list3(n) <> list1(n) Then areEqual = False |
|||
Next |
|||
Print !"\nThese lengths are"; |
|||
Print Iif(areEqual, " the 32 first terms of the Padovan sequence.", " not the 32 first terms of the Padovan sequence.") |
|||
Sleep</syntaxhighlight> |
|||
{{out}} |
|||
<pre>First 20 terms of the Padovan sequence: |
|||
1 1 1 2 2 3 4 5 7 9 12 16 21 28 37 49 65 86 114 151 |
|||
The first 64 iterative and calculated values are the same. |
|||
First 10 L-system strings: |
|||
A B C AB BC CAB ABBC BCCAB CABABBC ABBCBCCAB |
|||
Lengths of the 32 first L-system strings: |
|||
1 1 1 2 2 3 4 5 7 9 12 16 21 28 37 49 65 86 114 151 200 265 351 465 616 816 1081 1432 1897 2513 3329 4410 |
|||
These lengths are not the 32 first terms of the Padovan sequence.</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |