Data update
This commit is contained in:
parent
aec8ed51b6
commit
29a5eea0d4
128 changed files with 1298 additions and 0 deletions
22
Task/Hailstone-sequence/ABC/hailstone-sequence.abc
Normal file
22
Task/Hailstone-sequence/ABC/hailstone-sequence.abc
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
HOW TO RETURN hailstone n:
|
||||
PUT {} IN seq
|
||||
WHILE 1=1:
|
||||
PUT n IN seq[#seq]
|
||||
SELECT:
|
||||
n=1: RETURN seq
|
||||
n mod 2=0: PUT floor(n/2) IN n
|
||||
n mod 2=1: PUT 3*n+1 IN n
|
||||
RETURN seq
|
||||
|
||||
PUT hailstone 27 IN h27
|
||||
WRITE "Length of Hailstone sequence for 27:", #h27/
|
||||
WRITE "First 4 elements:", h27[0], h27[1], h27[2], h27[3]/
|
||||
WRITE "Last 4 elements:", h27[#h27-4], h27[#h27-3], h27[#h27-2], h27[#h27-1]/
|
||||
|
||||
PUT 0, 0 IN longest, length
|
||||
FOR n IN {1..100000}:
|
||||
PUT hailstone n IN hn
|
||||
IF #hn > length:
|
||||
PUT n, #hn IN longest, length
|
||||
|
||||
WRITE longest, "has the longest hailstone sequence < 100,000, of length:", length/
|
||||
61
Task/Hailstone-sequence/Onyx-(wasm)/hailstone-sequence.onyx
Normal file
61
Task/Hailstone-sequence/Onyx-(wasm)/hailstone-sequence.onyx
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
use core { * }
|
||||
|
||||
hailstone :: (n: u32) -> [..]u32 {
|
||||
seq: [..]u32;
|
||||
array.push(&seq, n);
|
||||
while n > 1 {
|
||||
n = n/2 if n%2 == 0 else (n*3)+1;
|
||||
array.push(&seq, n);
|
||||
}
|
||||
return seq;
|
||||
}
|
||||
|
||||
Longest :: struct { num, len : u32; }
|
||||
|
||||
main :: () {
|
||||
|
||||
// -------
|
||||
// task 1:
|
||||
// -------
|
||||
// "Create a routine to generate the hailstone
|
||||
// sequence for a number."
|
||||
|
||||
i := 27;
|
||||
seq := hailstone(i);
|
||||
printf("Task 1:\n{}: {}\n\n",
|
||||
i,
|
||||
seq
|
||||
);
|
||||
|
||||
// -------
|
||||
// task 2:
|
||||
// -------
|
||||
// "Use the routine to show that the hailstone
|
||||
// sequence for the number 27 has
|
||||
// 112 elements starting with
|
||||
// 27, 82, 41, 124 and ending with 8, 4, 2, 1"
|
||||
|
||||
slice_size := 4;
|
||||
len := seq.length;
|
||||
slice_first := seq[0..slice_size];
|
||||
slice_last := seq[seq.length-slice_size..seq.length];
|
||||
printf("Task 2:\nlength: {}, first: {}, last: {}\n\n",
|
||||
len,
|
||||
slice_first,
|
||||
slice_last
|
||||
);
|
||||
|
||||
// -------
|
||||
// task 3:
|
||||
// -------
|
||||
// "Show the number less than 100,000
|
||||
// which has the longest hailstone sequence
|
||||
// together with that sequences length."
|
||||
|
||||
l : Longest;
|
||||
for i in 1..100000 {
|
||||
seq := hailstone(i);
|
||||
if l.len < seq.length { l = .{num = i, len = seq.length}; }
|
||||
}
|
||||
printf("Task 3:\nLongest Num: {}, Sequence Length: {}\n", l.num, l.len);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue