Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
62
Task/Hailstone-sequence/S-BASIC/hailstone-sequence.basic
Normal file
62
Task/Hailstone-sequence/S-BASIC/hailstone-sequence.basic
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
comment
|
||||
Compute and display "hailstone" (i.e., Collatz) sequence
|
||||
for a given number and find the longest sequence in the
|
||||
range permitted by S-BASIC's 16-bit integer data type.
|
||||
end
|
||||
|
||||
$lines
|
||||
|
||||
$constant false = 0
|
||||
$constant true = FFFFH
|
||||
|
||||
rem - compute p mod q
|
||||
function mod(p, q = integer) = integer
|
||||
end = p - q * (p/q)
|
||||
|
||||
comment
|
||||
Compute, and optionally display, hailstone sequence for n.
|
||||
Return length of sequence or zero on overflow
|
||||
end
|
||||
function hailstone(n, display = integer) = integer
|
||||
var length = integer
|
||||
length = 1
|
||||
while (n <> 1) and (n > 0) do
|
||||
begin
|
||||
if display then print using "##### ", n;
|
||||
if mod(n,2) = 0 then
|
||||
n = n / 2
|
||||
else
|
||||
n = (n * 3) + 1
|
||||
length = length + 1
|
||||
end
|
||||
if display then print using "##### ", n
|
||||
rem - return 0 on overflow
|
||||
if n < 0 then length = 0
|
||||
end = length
|
||||
|
||||
var n, limit, slen, longest, n_longest = integer
|
||||
|
||||
input "Display hailstone sequence for what number"; n
|
||||
slen = hailstone(n, true)
|
||||
print "Sequence length = "; slen
|
||||
|
||||
rem - find longest sequence before overflow
|
||||
n = 2
|
||||
longest = 1
|
||||
slen = 1
|
||||
limit = 1000;
|
||||
print "Searching for longest sequence up to N =", limit," ..."
|
||||
while (n < limit) and (slen <> 0) do
|
||||
begin
|
||||
slen = hailstone(n, false)
|
||||
if slen > longest then
|
||||
begin
|
||||
longest = slen
|
||||
n_longest = n
|
||||
end
|
||||
n = n + 1
|
||||
end
|
||||
if slen = 0 then print "Search terminated with overflow at";n-1
|
||||
print "Maximum sequence length =";longest;" for N =";n_longest
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue