using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var nums = new List<string>();
for (var i = 0L; i <= 99999L; i += 101)
{
var s = i.ToString().PadLeft(9, '0');
if (!nums.Any(n => LessThan2SequentialCharsDiff(n, s)))
nums.Add(s);
else
Console.WriteLine("Not valid: " + s);
if (i % 10000L < 101) Console.WriteLine(i);
}
Console.WriteLine("Count: " + nums.Count);
}
public static bool LessThan2SequentialCharsDiff(string a, string b)
{
var diffCount = 0;
var timesCount = 0;
var isSequential = false;
for (var i = 0; i < a.Length && diffCount <= 2 && timesCount <= 1; i++)
if (a[i] != b[i])
{
if (!isSequential) timesCount++;
diffCount++;
isSequential = true;
}
else
{
diffCount = 0;
isSequential = false;
}
return diffCount <= 2 && timesCount <= 1;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIG51bXMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAJZm9yICh2YXIgaSA9IDBMOyBpIDw9IDk5OTk5TDsgaSArPSAxMDEpCiAgICAJewogICAgCQl2YXIgcyA9IGkuVG9TdHJpbmcoKS5QYWRMZWZ0KDksICcwJyk7CiAgICAJCWlmICghbnVtcy5BbnkobiA9PiBMZXNzVGhhbjJTZXF1ZW50aWFsQ2hhcnNEaWZmKG4sIHMpKSkKICAgIAkJCW51bXMuQWRkKHMpOwogICAgCQllbHNlCiAgICAJCQlDb25zb2xlLldyaXRlTGluZSgiTm90IHZhbGlkOiAiICsgcyk7CiAgICAJCWlmIChpICUgMTAwMDBMIDwgMTAxKSBDb25zb2xlLldyaXRlTGluZShpKTsKICAgIAl9CiAgICAJQ29uc29sZS5Xcml0ZUxpbmUoIkNvdW50OiAiICsgbnVtcy5Db3VudCk7Cgl9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgYm9vbCBMZXNzVGhhbjJTZXF1ZW50aWFsQ2hhcnNEaWZmKHN0cmluZyBhLCBzdHJpbmcgYikKICAgIHsKICAgICAgICB2YXIgZGlmZkNvdW50ID0gMDsKICAgIAl2YXIgdGltZXNDb3VudCA9IDA7CiAgICAJdmFyIGlzU2VxdWVudGlhbCA9IGZhbHNlOwogICAgCWZvciAodmFyIGkgPSAwOyBpIDwgYS5MZW5ndGggJiYgZGlmZkNvdW50IDw9IDIgJiYgdGltZXNDb3VudCA8PSAxOyBpKyspCiAgICAJCWlmIChhW2ldICE9IGJbaV0pCiAgICAJCXsKICAgIAkJCWlmICghaXNTZXF1ZW50aWFsKSB0aW1lc0NvdW50Kys7CiAgICAJCQlkaWZmQ291bnQrKzsKICAgIAkJCWlzU2VxdWVudGlhbCA9IHRydWU7CiAgICAJCX0KICAgIAkJZWxzZQogICAgCQl7CiAgICAJCQlkaWZmQ291bnQgPSAwOwogICAgCQkJaXNTZXF1ZW50aWFsID0gZmFsc2U7CiAgICAJCX0KICAgIAlyZXR1cm4gZGlmZkNvdW50IDw9IDIgJiYgdGltZXNDb3VudCA8PSAxOwogICAgfQp9