38 lines
1.1 KiB
Plaintext
38 lines
1.1 KiB
Plaintext
sumDigitsSquared[n_Integer] := Total[IntegerDigits[n]^2]
|
|
stopValues = Join[{1}, NestList[sumDigitsSquared, 89, 7]];
|
|
iterate[n_Integer] :=
|
|
NestWhile[sumDigitsSquared, n, Intersection[stopValues, {#}] == {} &]
|
|
|
|
numberOfDigits = 8;
|
|
maxSum = numberOfDigits 9^2;
|
|
loopVariables =
|
|
ToExpression@Table["i" <> ToString[n], {n, numberOfDigits}];
|
|
iteratesToOne = Cases[Range@maxSum, _?(iterate[#] == 1 &)];
|
|
allIterators =
|
|
Flatten[{Reverse@#, 9}] & /@ Partition[loopVariables, 2, 1];
|
|
maxCombinations = numberOfDigits!;
|
|
|
|
ssd =
|
|
SparseArray[Table[n^2 -> numberOfDigits, {n, 9}], {maxSum}];
|
|
|
|
Do[
|
|
variables = loopVariables[[;; digitCount]];
|
|
iterators = allIterators[[;; digitCount - 1]];
|
|
|
|
Do[ssd +=
|
|
SparseArray[
|
|
Total[variables^2] ->
|
|
maxCombinations/
|
|
Times @@ (Tally[PadRight[variables, numberOfDigits]][[All,
|
|
2]]!), {maxSum}], {i, 9}, Evaluate[Sequence @@ iterators]],
|
|
|
|
{digitCount, 2, numberOfDigits}];
|
|
|
|
onesCount =
|
|
Total[Cases[
|
|
ArrayRules[ssd] /.
|
|
HoldPattern[{a_} -> b_] :> {a,
|
|
b}, {_?(MemberQ[iteratesToOne, #] &), _}][[All, 2]]];
|
|
|
|
(10^numberOfDigits - 1) - onesCount
|