I randomly stumbled upon this Sumac Sequence challenge, and while I wasn’t interested in coming up with the most compact solution, it was something that I wanted to build a readable solution and tutorial around!
See it Live
You can see my example here:
Play with it here: https://www.kirupa.com/html5/examples/sumac_sequence.htm
What is a Sumac Sequence?
There are a bunch of mathematical ways of describing it. The easiest way to think of it is as follows. You start out with two numbers, like 100 and 40. The third number is the difference of the previous two numbers. This means the third number is 100 - 40 = 60. The sequence right now is 100, 40, and 60.
Is there a fourth number? Well…the previous two numbers are now 40 and 60, and the difference between them is -20. As it turns out, because this result is negative, the sequence terminates. The numbers in our sumac sequence have to be greater than 0.
This means the sumac sequence for our example is just 100, 40, and 60. You can see how this plays out for a variety of other numbers. Try 120 and 71 for a sequence of 5 numbers. Can you come up with two numbers that result in more than 5 numbers getting generated in the sequence?
Snippet
The full code is in the example source, but ty snippet for calculating the Sumac sequence is as follows:
function getTerms(a, b) {
if (b > 0) {
sumac_sequence.push(a);
getTerms(b, a - b);
} else {
sumac_sequence.push(a);
}
}
I’m just keeping it simple and relying on recursion. I will write a tutorial on this in the near future, but I wanted to share this now in case I end up taking a ridiculous wrong time to get that wrapped up haha.
Cheers,
Kirupa