import std.file; import std.stdio; int main(string[] args) { if (args.length < 2) { stderr.writeln(args[0], " filename"); return 1; } int cei, cie, ie, ei; auto file = File(args[1]); foreach(line; file.byLine) { auto res = eval(cast(string) line); cei += res.cei; cie += res.cie; ei += res.ei; ie += res.ie; } writeln("CEI: ", cei, "; CIE: ", cie); writeln("EI: ", ei, "; IE: ", ie); writeln("'I before E when not preceded by C' is ", verdict(ie, ei)); writeln("'E before I when preceded by C' is ", verdict(cei, cie)); return 0; } string verdict(int a, int b) { import std.format; if (a > 2*b) { return format("plausible with evidence %f", cast(double)a/b); } return format("not plausible with evidence %f", cast(double)a/b); } struct Evidence { int cei; int cie; int ei; int ie; } Evidence eval(string word) { enum State { START, C, E, I, CE, CI, } State state; Evidence cnt; for(int i=0; i