mudder method
List<String>
mudder(
{ - dynamic start,
- dynamic end,
- int? numStrings,
- int? base,
- 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();
}