!752 p { S text = loadSnippet("#1004687"); InfiniteStream stream1 = new InfiniteStream(text + "\n***\n"); O stream2 = predictor(); int n = 0, score = 0; double theScore = 0; while licensed { char c = stream1.next(); Character d = cast call(stream2, "predict"); if (eq(c, d)) ++score; ++n; call(stream2, "feed", c); if (stream1.atStart()) { theScore = ((double) score)/n*100; print("score: " + formatDouble(theScore, 2)); score = n = 0; } } } static O predictor() { ret new O { char c = '!'; Character predict() { ret c; } void feed(char c) { this.c = c; } }; /*ret new O { Character predict() { ret null; } void feed(char c) {} };*/ } sclass InfiniteStream { S text; int pos; *(S *text) { assertNempty(text); } char next() { char c = text.charAt(pos); pos = (pos+1) % l(text); ret c; } bool atStart() { ret pos == 0; } }