In addition to
OriginalGriff[
^]'s solution, i'd like to provide sample code with bit of improvement.
My solution is Linq based:
string sentence = "600599598596";
int len = sentence.Length;
int half = len/2;
var dividers = Enumerable.Range(1, half).Where(i=>len%i==0).ToList();
foreach(int d in dividers)
{
List<int> numbers = new List<int>();
int i = 0;
do
{
string tmp = string.Join("", sentence.Skip(i).Take(d));
int number = 0;
if (Int32.TryParse(tmp, out number)) numbers.Add(number);
i+=d;
} while (i<len);
var misVal = numbers.Zip(numbers.Skip(1), (first, second) => Tuple.Create(first, second, first-second-1))
.Where(x=>x.Item3==1)
.Select(x=> x.Item2+1)
.FirstOrDefault();
Console.WriteLine("For list: [{0}] missing value is: {1}", string.Join(";", numbers), misVal);
}
Result:
For list: [6;0;0;5;9;9;5;9;8;5;9;6] missing value is: 0
For list: [60;5;99;59;85;96] missing value is: 0
For list: [600;599;598;596] missing value is: 597
For list: [600599;598596] missing value is: 0
In case you'd like to return list of missing values, change last query into this form:
var misVal = numbers.Zip(numbers.Skip(1), (first, second) => Tuple.Create(first, second, first-second-1))
.Where(x=>x.Item3==1)
.Select(x=>x.Item2+1)
.ToList();
Feel free to change the code to your needs!