srecord noeq MakeLSFRTripletsTable(int maxBits) { event tripletFound(int bits, int[] triplet); settable bool verbose = true; new TreeMap out; // print table & copy to clipboard run { print(copyToClipboard(toJava())); } TreeMap getMap() { for ping (int bits = 1; bits <= maxBits; bits++) { reMutable bits; var searcher = FindAllLSFRTriplets(bits); if (verbose) { searcher.onTestingTriplet((triplet, checker) -> print("Testing: " + toList(triplet) + " for " + nBits(bits) + " (step " + n2(searcher.steps) + " of " + n2(searcher.expectedSteps()) + ")") ); searcher.onTripletRejected((triplet, checker) -> print("Triplet rejected after " + n2(checker.steps, "value")) ); } var triplet = searcher.next(); printVars(bits := searcher.bits, triplet := toList(triplet), steps := searcher.steps, cycleLength := searcher.cycleLength()); out.put(bits, triplet); if (verbose) print(triplet == null ? "No triplet found for " + nBits(bits) : "Triplet found for " + nBits(bits) + ": "+ toList(triplet)); if (triplet != null) tripletFound(bits, triplet); } ret out; } S toJava() { var map = getMap(); int n = lastKey(map); new LS out; for (int bits = 1; bits <= n; bits++) { var triplet = map.get(bits); out.add(triplet == null ? "null" : "{ " + joinWithComma(toList(triplet)) + " }"); } ret indentx(4, join(",\n", out)); } }