generate method

  1. @override
String generate(
  1. int iterations
)
override

How the L-System will generate its string output for a number of iterations.

Implementation

@override
String generate(
  int iterations,
) {
  assert(
    !iterations.isNegative,
    'iterations must be equal to or greater than zero',
  );
  if (iterations == 0) {
    return axiom;
  }

  var sentence = axiom;

  while (iterations != 0) {
    var nextGeneration = StringBuffer();
    for (var i = 0; i < sentence.length; i++) {
      final currentSymbol = sentence[i];
      var replace = currentSymbol;
      for (final productionRule in productionRuleSet) {
        final predecessor = productionRule.predecessor;
        if (predecessor == currentSymbol) {
          replace = productionRule.successor;
          break;
        }
      }
      nextGeneration.write(replace);
    }
    sentence = nextGeneration.toString();
    iterations--;
  }

  return sentence;
}