Warning: session_start(): open(/var/lib/php/sessions/sess_9bghi0jlfg51eeraupnee5q6br, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
cprint {
srecord While(IF0 condition, Runnable body) {}
// basically immutable (we make a new copy for every step)
// to allow evaluating states in parallel and in any order
sclass GreedySplitIntoWordsCI_Multi {
S s; // the input to be split
TreeSet wordsSet = asCISet(words);
int i = 0, last = 0;
new ReverseChain out;
// either we return some choices or a final result
Either, LS> run() {
int longestMatch = l(longestPrefixInCISet(substring(s, i), wordsSet));
if (longestMatch == 0) { // also true when we're at end of string
flush();
ret eitherB(out);
}
ret eitherA(mapNonNulls(countBackwardsTo1(longestMatch), matchLength -> {
if (!contains(wordsSet, substring(s, i, i+matchLength))) null;
GreedySplitIntoWordsCI_Multi clone = shallowClone(this);
clone.i = clone.last = i+longestMatch;
clone.out = revChainPlus(out, substring(s, i, clone.i));
ret clone;
}));
}
}
void flush {
if (i > last) {
// modifying this object in spite of convention
out = revChainPlus(out, substring(s, last, i));
last = i;
}
}
}
static While greedySplitIntoWordsCI_x(S s, Cl words) {
}