How to resolve the algorithm Recaman's sequence step by step in the Objeck programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Recaman's sequence step by step in the Objeck programming language

Table of Contents

Problem Statement

The Recamán's sequence generates Natural numbers. Starting from a(0)=0, the n'th term a(n), where n>0, is the previous term minus n i.e a(n) = a(n-1) - n but only if this is both positive and has not been previousely generated. If the conditions don't hold then a(n) = a(n-1) + n.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Recaman's sequence step by step in the Objeck programming language

Source code in the objeck programming language

use Collection.Generic;

class RecamanSequence {
  function : Main(args : String[]) ~ Nil {
    GenerateSequence();
  }
  
  function : native : GenerateSequence() ~ Nil {
    a := Vector->New();
    a->AddBack(0);
     
    used := Set->New();
    used->Insert(0);

    used1000 := Set->New();
    used1000->Insert(0);
 
    foundDup := false;
    n := 1;
    while (n <= 15 | <>foundDup | used1000->Size() < 1001) {
      next := a->Get(n - 1) - n;
      if (next < 1 | used->Has(next)) {
        next += 2 * n;
      };
      alreadyUsed := used->Has(next);
      a->AddBack(next);
      if (<>alreadyUsed) {
        used->Insert(next);
        if (0 <= next & next <= 1000) {
          used1000->Insert(next);
        };
      };
      if (n = 14) {
        str := ToString(a);
        "The first 15 terms of the Recaman sequence are : {$str}"->PrintLine();
      };
      if (<>foundDup & alreadyUsed) {
        "The first duplicate term is a[{$n}] := {$next}"->PrintLine();
        foundDup := true;
      };
      if (used1000->Size() = 1001) {
        "Terms up to a[{$n}] are needed to generate 0 to 1000"->PrintLine();
      };
      n++;
    };
  }
  
  function : ToString(a : Vector) ~ String {
    out := "[";
    each(i : a) {
      out += a->Get(i)->Get();
      if(i + 1 < a->Size())  {
        out += ',';
      };
    };
    out += ']';

    return out;
  }
}

  

You may also check:How to resolve the algorithm Sparkline in unicode step by step in the JavaScript programming language
You may also check:How to resolve the algorithm Arbitrary-precision integers (included) step by step in the dc programming language
You may also check:How to resolve the algorithm Sum multiples of 3 and 5 step by step in the EasyLang programming language
You may also check:How to resolve the algorithm Continued fraction/Arithmetic/Construct from rational number step by step in the J programming language
You may also check:How to resolve the algorithm K-means++ clustering step by step in the Raku programming language