Execute a Markov algorithm: Difference between revisions

Updated D entry
(Added OCaml solution)
(Updated D entry)
Line 1,383:
=={{header|D}}==
{{trans|Perl}}
<lang d>void main() {
<lang d>import std.stdio, std.array, std.file, std.regex, std.string,
import std.stdio, std.file, std.regex, std.string, std.range;,
std.functional;
 
const rules = "markov_rules.txt".readText.splitLines.split("");
void main() {
string[][]auto rulestests = readText("markov_rulesmarkov_tests.txt").readText.splitLines();
auto re = ctRegex!(r"^([^#]*?)\s+->\s+(\.?)(.*)"); // 130160 MB RAM.
.split("");
auto tests = readText("markov_tests.txt").splitLines();
auto re = ctRegex!(r"^([^#]*?)\s+->\s+(\.?)(.*)"); // 130 MB RAM.
 
autoalias pairsslZip = curry!(zip(, StoppingPolicy.requireSameLength, tests, rules);
foreach (test, const rule; pairsslZip(tests, rules)) {
autoconst origTest = test.dup;
 
string[][] capt;
foreach (const line; rule) {
auto m = line.match(re);
if (!m.empty) {
//capt ~= .put(m.captures.array(dropOne)[1 .. $];
capt ~= m.captures.dropOne.array;
}
}
 
REDO:
autoconst copy = test;
foreach (const c; capt) {
test = test.replace(c[0], c[2]);
if (c[1] == ".")