[OT] The horizon of a stream
mgen
bmeck at stedwards.edu
Thu Oct 23 14:10:09 PDT 2008
If size is a problem use a trie!
//---CODE---
import std.stream;
import std.stdio;
class position_trie
{
bool seen = false;
int last_seen = 0;
position_trie[char] branch;
}
void main()
{
int[char[]] last;
int max;
Stream file = new MemoryStream(
"lorem
ipsum
dolor
habeas
corpus
ipsum
sit
amet
rigor
mortis
consectetur
coitus
interruptus
corpus
adipisicing
elit"
);
auto root = new position_trie();
position_trie node = root;
position_trie next;
foreach(ulong lineno,char[] line;file)
{
foreach(int chrno,char chr;line)
{
if(chr in node.branch)
{
node = node.branch[chr];
}
else
{
next = new position_trie();
node.branch[chr] = next;
node = next;
foreach(char chr2; line[chrno+1..$])
{
next = new position_trie();
node.branch[chr2] = next;
node = next;
}
break;
}
}
if(node.seen)
{
auto dist = lineno - node.last_seen;
if(dist > max)
max = dist;
}
node.seen = true;
node.last_seen = lineno;
node = root;
}
writefln(max);
}
More information about the Digitalmars-d
mailing list