import std.stdio : writeln, stdin;
import std.exception : enforce;
import stats;

void main(string[] args)
{
    Stat[] stats;
    foreach (arg; args[1 .. $])
    {
        auto newStat = cast(Stat) Object.factory("stats." ~ arg);
        enforce(newStat, "Invalid statistics function: " ~ arg);
        stats ~= newStat;
    }
    for (double x; stdin.readf(" %s ", &x) == 1;)
    {
        foreach (s; stats)
        {
            s.accumulate(x);
        }
    }
    foreach (s; stats)
    {
        s.postprocess();
        writeln(s.result());
    }
}
