fork download
  1. var
  2. a: array[0..15] of byte;
  3.  
  4.  
  5. function factorial(n: byte): int64;
  6. begin
  7. if n < 2 then
  8. exit(1);
  9. factorial := factorial(pred(n)) * n
  10. end;
  11.  
  12.  
  13. function number(
  14. a: array of byte;
  15. depth: byte
  16. ): int64;
  17.  
  18. var
  19. i, sum: byte;
  20. b: array[0..9] of byte;
  21.  
  22. begin
  23. if depth = 15 then
  24. begin
  25. sum := 0;
  26. for i := 1 to 15 do
  27. inc(sum, a[i]);
  28. if sum <> 69 then
  29. exit(0);
  30.  
  31. number := 1307674368000; (* factorial(15) *)
  32. for i := 0 to 9 do
  33. b[i] := 0;
  34. for i := 1 to 15 do
  35. inc(b[a[i]]);
  36. for i := 0 to 9 do
  37. number := number div factorial(b[i]);
  38. exit
  39. end;
  40.  
  41. number := 0;
  42. i := a[depth];
  43. inc(depth);
  44. repeat
  45. a[depth] := i;
  46. number := number + number(a, depth);
  47. inc(i)
  48. until i = 10
  49. end;
  50.  
  51.  
  52. begin
  53. a[0] := 0;
  54. writeln(number(a, 0))
  55. end.
Success #stdin #stdout 0.1s 340KB
stdin
Standard input is empty
stdout
35186410984875