RosettaCodeData/Task/Van-Eck-sequence/D/van-eck-sequence.d

26 lines
627 B
D

import std.stdio;
void vanEck(int firstIndex, int lastIndex) {
int[int] vanEckMap;
int last = 0;
if (firstIndex == 1) {
writefln("VanEck[%d] = %d", 1, 0);
}
for (int n = 2; n <= lastIndex; n++) {
int vanEck = last in vanEckMap ? n - vanEckMap[last] : 0;
vanEckMap[last] = n;
last = vanEck;
if (n >= firstIndex) {
writefln("VanEck[%d] = %d", n, vanEck);
}
}
}
void main() {
writeln("First 10 terms of Van Eck's sequence:");
vanEck(1, 10);
writeln;
writeln("Terms 991 to 1000 of Van Eck's sequence:");
vanEck(991, 1000);
}