Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательности нулей и единиц (или точек и тире). Из-за помех возможен ошибочный прием некоторых сигналов: нуль может быть воспринят как единица и наоборот. Для повышения надежности передачи сообщений применяют мажорирование, когда каждый сигнал троируется (например 101 преобразуется в 111000111). При расшифровке три последовательные цифры заменяются той цифрой, которая среди этой тройки встречается по крайней мере дважды. Написать программу шифровки и расшифровки мажорированных сообщений.
private IEnumerable<string> TakeByThree(string input)
{
var remains = input;
while (!string.IsNullOrEmpty(remains) && remains.Length >= 3)
{
yield return remains.Substring(0, 3);
remains = remains.Substring(3);
}
}
public string Contract(string input) =>
new string(TakeByThree(input).Select(t => t[0] == t[1] || t[0] == t[2] ? t[0] : t[1]).ToArray());