public static string Compress(string[] input) { var previous = new LimitedQueue <string>(16); var result = input .Select(target => GetCompressed(previous, target)); return(string.Join("\n", result)); }
private static string GetCompressed(LimitedQueue <string> previous, string target) { if (previous.Count != 0) { return(previous .Select((temp, i) => CompressString(target, temp, previous.Count - i)) .Min(s => s) .Value); } previous.Add(target); return(target); }