Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
63
Task/Hailstone-sequence/Cowgol/hailstone-sequence.cowgol
Normal file
63
Task/Hailstone-sequence/Cowgol/hailstone-sequence.cowgol
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
include "cowgol.coh";
|
||||
|
||||
# Generate the hailstone sequence for the given N and return the length.
|
||||
# If a non-NULL pointer to a buffer is given, then store the sequence there.
|
||||
sub hailstone(n: uint32, buf: [uint32]): (len: uint32) is
|
||||
len := 0;
|
||||
loop
|
||||
if buf != 0 as [uint32] then
|
||||
[buf] := n;
|
||||
buf := @next buf;
|
||||
end if;
|
||||
len := len + 1;
|
||||
if n == 1 then
|
||||
break;
|
||||
elseif n & 1 == 0 then
|
||||
n := n / 2;
|
||||
else
|
||||
n := 3*n + 1;
|
||||
end if;
|
||||
end loop;
|
||||
end sub;
|
||||
|
||||
# Generate hailstone sequence for 27
|
||||
var h27: uint32[113];
|
||||
var h27len := hailstone(27, &h27[0]);
|
||||
|
||||
# Print information about it
|
||||
print("The hailstone sequence for 27 has ");
|
||||
print_i32(h27len);
|
||||
print(" elements.\nThe first 4 elements are:");
|
||||
var n: @indexof h27 := 0;
|
||||
while n < 4 loop
|
||||
print_char(' ');
|
||||
print_i32(h27[n]);
|
||||
n := n + 1;
|
||||
end loop;
|
||||
print(", and the last 4 elements are:");
|
||||
n := h27len as @indexof h27 - 4;
|
||||
while n as uint32 < h27len loop
|
||||
print_char(' ');
|
||||
print_i32(h27[n]);
|
||||
n := n + 1;
|
||||
end loop
|
||||
print(".\n");
|
||||
|
||||
# Find longest hailstone sequence < 100,000
|
||||
var i: uint32 := 1;
|
||||
var max_i := i;
|
||||
var len: uint32 := 0;
|
||||
var max_len := len;
|
||||
while i < 100000 loop
|
||||
len := hailstone(i, 0 as [uint32]);
|
||||
if len > max_len then
|
||||
max_i := i;
|
||||
max_len := len;
|
||||
end if;
|
||||
i := i + 1;
|
||||
end loop;
|
||||
|
||||
print_i32(max_i);
|
||||
print(" has the longest hailstone sequence < 100000: ");
|
||||
print_i32(max_len);
|
||||
print_nl();
|
||||
Loading…
Add table
Add a link
Reference in a new issue