!759 !include #1004027 // WordAdapter p { genLog_set(latestChatLog()); print("Result: " + bla()); } static bool adapt_debug; static S bla() { L log = gLog(); S bestResult = null; double bestValue = 0; thislearn: for (L learn : gLearns()) { if (adapt_debug) print("Testing learn: " + struct(learn)); // j is starting point of match in log j: for (int j = l(log)-l(learn)+1; j < l(log); j++) pcall { if (adapt_debug) print("\nl(log)=" + l(log) + ", j=" + j); Adapter adapter = new WordAdapter; int k; for (k = j; k < l(log); k++) { S in = learn.get(k-j), out = log.get(k); if (adapt_debug) print(in + " => " + out); if (!adapter.canMatch(in, out)) { if (adapt_debug) print("Can't match"); continue j; } adapter = adapter.plus(in, out); if (adapt_debug) printStructure(" ", adapter); } double v = adapter.size(); if (bestResult == null || v < bestValue) { bestResult = adapter.get(learn.get(k-j)); bestValue = v; if (adapt_debug) print("New best: " + formatDouble(bestValue, 1) + " -- " + bestResult); } } } ret bestResult; }