private static void Task51() { var text = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736"; var a = text.Length; //68 for (int i = 2; i < a / 2; i++) { if (a % i != 0) { continue; } var length = text.Length / i; var strs = new List <string>(); //делим блоки попарно for (var t = 0; t < i; t++) { var tmp = text.Substring(t * length, length); strs.Add(tmp); } if (strs.Count % 2 != 0) { continue; } //находим расстояние var averageHamingDistance = 0; for (var t = 0; t < strs.Count; t += 2) { var xor = Xor.XoringTwoBinars(strs[t], strs[t + 1]); var HammingDistance = xor.Count(x => x == '1'); averageHamingDistance += HammingDistance; } averageHamingDistance /= strs.Count / 2; //Взламываем var blocks = new StringBuilder(); for (var m = 0; m *averageHamingDistance < text.Length; m++) { blocks.Append(new String(text.Skip(m * averageHamingDistance).Take(averageHamingDistance).ToArray())); } var kek = blocks.Length; Console.WriteLine("\n"); } var d = a / 4; //16 }