Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
84
Task/Padovan-sequence/ALGOL-68/padovan-sequence.alg
Normal file
84
Task/Padovan-sequence/ALGOL-68/padovan-sequence.alg
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
BEGIN # show members of the Padovan Sequence calculated in various ways #
|
||||
# returns the first n elements of the Padovan sequence by the #
|
||||
# recurance relation: P(n)=P(n-2)+P(n-3) #
|
||||
OP PADOVANI = ( INT n )[]INT:
|
||||
BEGIN
|
||||
[ 0 : n - 1 ]INT p; p[ 0 ] := p[ 1 ] := p[ 2 ] := 1;
|
||||
FOR i FROM 3 TO UPB p DO
|
||||
p[ i ] := p[ i - 2 ] + p[ i - 3 ]
|
||||
OD;
|
||||
p
|
||||
END; # PADOVANI #
|
||||
# returns the first n elements of the Padovan sequence by #
|
||||
# computing by truncation P(n)=floor(p^(n-1) / s + .5) #
|
||||
# where s = 1.0453567932525329623 #
|
||||
# and p = the "plastic ratio" #
|
||||
OP PADOVANC = ( INT n )[]INT:
|
||||
BEGIN
|
||||
LONG REAL s = 1.0453567932525329623;
|
||||
LONG REAL p = 1.324717957244746025960908854;
|
||||
LONG REAL pf := 1 / p;
|
||||
[ 0 : n - 1 ]INT result;
|
||||
FOR i FROM LWB result TO UPB result DO
|
||||
result[ i ] := SHORTEN ENTIER ( pf / s + 0.5 );
|
||||
pf *:= p
|
||||
OD;
|
||||
result
|
||||
END; # PADOVANC #
|
||||
# returns the first n L System strings of the Padovan sequence #
|
||||
OP PADOVANL = ( INT n )[]STRING:
|
||||
BEGIN
|
||||
[ 0 : n - 1 ]STRING l; l[ 0 ] := "A"; l[ 1 ] := "B"; l[ 2 ] := "C";
|
||||
FOR i FROM 3 TO UPB l DO
|
||||
l[ i ] := l[ i - 3 ] + l[ i - 2 ]
|
||||
OD;
|
||||
l
|
||||
END; # PADOVANC #
|
||||
# returns TRUE if a and b have the same values, FALSE otherwise #
|
||||
OP = = ( []INT a, b )BOOL:
|
||||
IF LWB a /= LWB b OR UPB a /= UPB b
|
||||
THEN # rows are not the same size # FALSE
|
||||
ELSE
|
||||
BOOL result := TRUE;
|
||||
FOR i FROM LWB a TO UPB a WHILE result := a[ i ] = b[ i ] DO SKIP OD;
|
||||
result
|
||||
FI; # = #
|
||||
# returns the number of elements in a #
|
||||
OP LENGTH = ( []INT a )INT: ( UPB a - LWB a ) + 1;
|
||||
# returns the number of characters in s #
|
||||
OP LENGTH = ( STRING s )INT: ( UPB s - LWB s ) + 1;
|
||||
# returns a string representation of n #
|
||||
OP TOSTRING = ( INT n )STRING: whole( n, 0 );
|
||||
# generate 64 elements of the sequence and 32 L System values #
|
||||
[]INT iterative = PADOVANI 64;
|
||||
[]INT calculated = PADOVANC 64;
|
||||
[]STRING l system = PADOVANL 32;
|
||||
[ LWB l system : UPB l system ]INT l length;
|
||||
FOR i FROM LWB l length TO UPB l length DO l length[ i ] := LENGTH l system[ i ] OD;
|
||||
# first 20 terms #
|
||||
print( ( "First 20 terms of the Padovan Sequence", newline ) );
|
||||
FOR i FROM LWB iterative TO 19 DO
|
||||
print( ( " ", TOSTRING iterative[ i ] ) )
|
||||
OD;
|
||||
print( ( newline ) );
|
||||
print( ( "The first "
|
||||
, TOSTRING LENGTH iterative
|
||||
, " iterative and calculated values "
|
||||
, IF iterative = calculated THEN "are the same" ELSE "differ" FI
|
||||
, newline
|
||||
)
|
||||
);
|
||||
# print the first 10 values of the L System strings #
|
||||
print( ( newline, "First 10 L System strings", newline ) );
|
||||
FOR i FROM LWB l system TO 9 DO
|
||||
print( ( " ", l system[ i ] ) )
|
||||
OD;
|
||||
print( ( newline ) );
|
||||
print( ( "The first "
|
||||
, TOSTRING LENGTH l length
|
||||
, " iterative values and L System lengths "
|
||||
, IF l length = iterative[ LWB l length : UPB l length @ LWB l length ] THEN "are the same" ELSE "differ" FI
|
||||
, newline
|
||||
)
|
||||
)
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue