static bool SameUpToCoordinatePermutation(List <string> l1, List <string> l2) { if (l1.Count <= 0 && l2.Count <= 0) { return(true); } if (l2.Count <= 0) { return(false); } var n = l2[0].Length; l1 = l1.OrderBy(s => s).ToList(); foreach (var p in Permutation.EnumerateAll(n)) { var vvv = TarpitEnumerator.EnumerateAlphabetPermutations(l2.Select(s => string.Join("", p.Apply(s.ToCharArray().ToList()))).OrderBy(s => s).ToList()).ToList(); var vv = Enumerable.Range(0, l2.Count).Select(i => vvv.Select(l => l[i]).OrderBy(s => s).First()); if (vv.SequenceEqual(l1)) { return(true); } } return(false); }
public static void Go() { using (_sw = new StreamWriter("tarpits cart attempt" + Length + ".txt")) { _sw.AutoFlush = true; System.Console.ForegroundColor = ConsoleColor.White; var tarpitEnumerator = new FastTarpitEnumerator(Length); var count = 0; var tarpitCores = new List <List <string> >(); tarpitEnumerator.GenerateMinimalTarpits(tarpit => { var isClosed = TarpitEnumerator.IsPermutationClosed(tarpit); var core = TarpitEnumerator.RemovePermutationRedundancies(tarpit); core = TarpitEnumerator.ReorderAlphabetByOccurenceRate(core); WriteLine(string.Join(" ", core)); System.Console.ForegroundColor = ConsoleColor.White; count++; tarpitCores.Add(core); }); WriteLine(); Write("found " + count + " tarpits. "); WriteLine("computing transversal hypergraph..."); WriteLine(); var H = new Hypergraph <string>(tarpitCores); var transversals = H.Tr(); var ordered = transversals.E.OrderBy(l => l.Count(ss => ss.Contains('z')) + string.Join("", l.OrderWords())).Select(t => t.OrderWords().ToList()).ToList(); foreach (var t in ordered) { var ss = string.Join(" ", t); WriteLine(ss); } WriteLine(); var chunks = Boxification.SplitMultiway(ordered); foreach (var chunk in chunks) { WriteLine(Boxification.ToMultiChunkString(chunk)); } // var chunks = Boxification.Split(ordered); //foreach (var chunk in chunks) // WriteLine(Boxification.ToChunkString(chunk)); } }