public SumMemoTable Generate(Int64 maxDigits, Int64 digitRange) { var maxLinearSum = maxDigits * digitRange; var maxSquareSum = maxDigits * digitRange * digitRange; var sumMemoTable = new SumMemoTable(maxDigits, digitRange); _strategy = new OneDigitGeneratorStrategy(sumMemoTable); _strategy.Run(); for (var i = 1; i < maxDigits; i++) { for (var j = 0; j <= digitRange; j++) { if (j == 0) { _strategy = new FirstDigitZeroGeneratorStrategy(sumMemoTable, i); } else { _strategy = new FirstDigitNonZeroGeneratorStrategy(sumMemoTable, i, j); } _strategy.Run(); } } return sumMemoTable; }
public OneDigitGeneratorStrategy(SumMemoTable sumMemoTable) { _sumMemoTable = sumMemoTable; }
public FirstDigitZeroGeneratorStrategy(SumMemoTable sumMemoTable, Int64 numDigits) { _sumMemoTable = sumMemoTable; _numDigits = numDigits; }
public FirstDigitNonZeroGeneratorStrategy(SumMemoTable sumMemoTable, Int64 numDigits, Int64 firstDigit) { _sumMemoTable = sumMemoTable; _numDigits = numDigits; _firstDigit = firstDigit; }
private void GenerateTables(Int64 maxDigits, Int64 digitRange) { _sumMemoTable = new SumMemoTableGenerator().Generate(maxDigits, digitRange); _primeTable = new PrimeTableGenerator().Generate(_sumMemoTable.MaxSquareSum); }