Can this implementation of Damm algorithm be optimized?
Nestor via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Feb 9 09:36:11 PST 2017
Hi,
I was trying to port C code from the article in Wikiversity [1]
to D, but I'm not sure this implementation is the most efficient
way to do it in D, so suggestions to optimize it are welcome:
import std.stdio;
static immutable char[] QG10Matrix =
"03175986427092154863420687135917509834266123045978" ~
"36742095815869720134894536201794386172052581436790";
char checkDigit(string str) {
char tmpdigit = '0';
foreach(chr; str) tmpdigit = QG10Matrix[(chr - '0') + (tmpdigit
- '0') * 10];
return tmpdigit;
}
enum {
EXIT_SUCCESS = 0,
EXIT_FAILURE = 1,
}
int main(string[] args) {
scope(failure) {
writeln("Invalid arguments. You must pass a number.");
return EXIT_FAILURE;
}
assert(args.length == 2);
char digit = checkDigit(args[1]);
if(digit == '0') writefln("%s is a valid number.", args[1]);
else {
writefln("%s is not a valid number (but it would be,
appending digit %s).",
args[1], digit);
}
return EXIT_SUCCESS;
}
[1] https://en.wikiversity.org/wiki/Damm_algorithm
More information about the Digitalmars-d-learn
mailing list