mudder method

List<String> mudder({
  1. dynamic start,
  2. dynamic end,
  3. int? numStrings,
  4. int? base,
  5. int? numDivisions,
})

Implementation

List<String> mudder({
  dynamic start,
  dynamic end,
  int? numStrings,
  int? base,
  int? numDivisions,
}) {
  if (start != null && start is! String && start is! List<String>) {
    throw Exception('start param must be of type String or List<String>');
  }

  if (end != null && end is! String && end is! List<String>) {
    throw Exception('end param must be of type String or List<String>');
  }

  start = notEmptyString(start) ?? num2sym[0];

  int? length;
  if (start is String) {
    length = start.length;
  } else if (start is List) {
    length = start.length;
  } else {
    throw Exception('Illegal state. Length must not be null');
  }

  end = notEmptyString(end) ??
      JSShim.repeat(num2sym[num2sym.length - 1], length + 6);
  numStrings ??= 1;
  base ??= maxBase;
  numDivisions ??= numStrings + 1;

  final truncated = truncateLexHigher(start, end);
  start = truncated[0];
  end = truncated[1];
  final prevDigits = stringToDigits(start);
  final nextDigits = stringToDigits(end);
  final intermediateDigits =
      longLinspace(prevDigits, nextDigits, base, numStrings, numDivisions);
  final finalDigits = intermediateDigits
      .map((v) => v.res..addAll(roundFraction(v.rem, v.den!, base)))
      .toList();
  finalDigits.insert(0, prevDigits);
  finalDigits.add(nextDigits);
  return chopSuccessiveDigits(finalDigits)!
      .sublist(1, finalDigits.length - 1)
      .map(digitsToString)
      .toList();
}