[OT] The horizon of a stream
bearophile
bearophileHUGS at lycos.com
Thu Oct 23 13:08:36 PDT 2008
This versions compares hash values first, avoiding some slower string compares, because in D1 strings don't store their hash value:
import d.all, d.string;
void main() {
int[Record!(hash_t, string)] seen;
int horizon;
foreach (nline, line; xfile("data.txt")) {
auto clean_line = line.chomp();
auto hash_clean_line = hash(clean_line);
auto pos_ptr = record(hash_clean_line, clean_line) in seen;
if (pos_ptr) {
if ((nline - *pos_ptr) > horizon)
horizon = nline - *pos_ptr;
} else
seen[record(hash_clean_line, clean_line.dup)] = nline;
}
putr(horizon);
}
Maybe it's not fully correct yet, so I'll test it some more...
Bye,
bearophile
More information about the Digitalmars-d
mailing list