fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Euler
  9. {
  10. class ProblemEight
  11. {
  12. static byte[] input = new byte[] { 7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4, 9, 1, 9, 2, 2, 5, 1, 1, 9, 6, 7, 4, 4, 2, 6, 5, 7, 4, 7, 4, 2, 3, 5, 5, 3, 4, 9, 1, 9, 4, 9, 3, 4, 9, 6, 9, 8, 3, 5, 2, 0, 3, 1, 2, 7, 7, 4, 5, 0, 6, 3, 2, 6, 2, 3, 9, 5, 7, 8, 3, 1, 8, 0, 1, 6, 9, 8, 4, 8, 0, 1, 8, 6, 9, 4, 7, 8, 8, 5, 1, 8, 4, 3, 8, 5, 8, 6, 1, 5, 6, 0, 7, 8, 9, 1, 1, 2, 9, 4, 9, 4, 9, 5, 4, 5, 9, 5, 0, 1, 7, 3, 7, 9, 5, 8, 3, 3, 1, 9, 5, 2, 8, 5, 3, 2, 0, 8, 8, 0, 5, 5, 1, 1, 1, 2, 5, 4, 0, 6, 9, 8, 7, 4, 7, 1, 5, 8, 5, 2, 3, 8, 6, 3, 0, 5, 0, 7, 1, 5, 6, 9, 3, 2, 9, 0, 9, 6, 3, 2, 9, 5, 2, 2, 7, 4, 4, 3, 0, 4, 3, 5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5, 0, 4, 4, 5, 2, 4, 4, 5, 2, 3, 1, 6, 1, 7, 3, 1, 8, 5, 6, 4, 0, 3, 0, 9, 8, 7, 1, 1, 1, 2, 1, 7, 2, 2, 3, 8, 3, 1, 1, 3, 6, 2, 2, 2, 9, 8, 9, 3, 4, 2, 3, 3, 8, 0, 3, 0, 8, 1, 3, 5, 3, 3, 6, 2, 7, 6, 6, 1, 4, 2, 8, 2, 8, 0, 6, 4, 4, 4, 4, 8, 6, 6, 4, 5, 2, 3, 8, 7, 4, 9, 3, 0, 3, 5, 8, 9, 0, 7, 2, 9, 6, 2, 9, 0, 4, 9, 1, 5, 6, 0, 4, 4, 0, 7, 7, 2, 3, 9, 0, 7, 1, 3, 8, 1, 0, 5, 1, 5, 8, 5, 9, 3, 0, 7, 9, 6, 0, 8, 6, 6, 7, 0, 1, 7, 2, 4, 2, 7, 1, 2, 1, 8, 8, 3, 9, 9, 8, 7, 9, 7, 9, 0, 8, 7, 9, 2, 2, 7, 4, 9, 2, 1, 9, 0, 1, 6, 9, 9, 7, 2, 0, 8, 8, 8, 0, 9, 3, 7, 7, 6, 6, 5, 7, 2, 7, 3, 3, 3, 0, 0, 1, 0, 5, 3, 3, 6, 7, 8, 8, 1, 2, 2, 0, 2, 3, 5, 4, 2, 1, 8, 0, 9, 7, 5, 1, 2, 5, 4, 5, 4, 0, 5, 9, 4, 7, 5, 2, 2, 4, 3, 5, 2, 5, 8, 4, 9, 0, 7, 7, 1, 1, 6, 7, 0, 5, 5, 6, 0, 1, 3, 6, 0, 4, 8, 3, 9, 5, 8, 6, 4, 4, 6, 7, 0, 6, 3, 2, 4, 4, 1, 5, 7, 2, 2, 1, 5, 5, 3, 9, 7, 5, 3, 6, 9, 7, 8, 1, 7, 9, 7, 7, 8, 4, 6, 1, 7, 4, 0, 6, 4, 9, 5, 5, 1, 4, 9, 2, 9, 0, 8, 6, 2, 5, 6, 9, 3, 2, 1, 9, 7, 8, 4, 6, 8, 6, 2, 2, 4, 8, 2, 8, 3, 9, 7, 2, 2, 4, 1, 3, 7, 5, 6, 5, 7, 0, 5, 6, 0, 5, 7, 4, 9, 0, 2, 6, 1, 4, 0, 7, 9, 7, 2, 9, 6, 8, 6, 5, 2, 4, 1, 4, 5, 3, 5, 1, 0, 0, 4, 7, 4, 8, 2, 1, 6, 6, 3, 7, 0, 4, 8, 4, 4, 0, 3, 1, 9, 9, 8, 9, 0, 0, 0, 8, 8, 9, 5, 2, 4, 3, 4, 5, 0, 6, 5, 8, 5, 4, 1, 2, 2, 7, 5, 8, 8, 6, 6, 6, 8, 8, 1, 1, 6, 4, 2, 7, 1, 7, 1, 4, 7, 9, 9, 2, 4, 4, 4, 2, 9, 2, 8, 2, 3, 0, 8, 6, 3, 4, 6, 5, 6, 7, 4, 8, 1, 3, 9, 1, 9, 1, 2, 3, 1, 6, 2, 8, 2, 4, 5, 8, 6, 1, 7, 8, 6, 6, 4, 5, 8, 3, 5, 9, 1, 2, 4, 5, 6, 6, 5, 2, 9, 4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9, 1, 2, 8, 8, 3, 1, 4, 2, 6, 0, 7, 6, 9, 0, 0, 4, 2, 2, 4, 2, 1, 9, 0, 2, 2, 6, 7, 1, 0, 5, 5, 6, 2, 6, 3, 2, 1, 1, 1, 1, 1, 0, 9, 3, 7, 0, 5, 4, 4, 2, 1, 7, 5, 0, 6, 9, 4, 1, 6, 5, 8, 9, 6, 0, 4, 0, 8, 0, 7, 1, 9, 8, 4, 0, 3, 8, 5, 0, 9, 6, 2, 4, 5, 5, 4, 4, 4, 3, 6, 2, 9, 8, 1, 2, 3, 0, 9, 8, 7, 8, 7, 9, 9, 2, 7, 2, 4, 4, 2, 8, 4, 9, 0, 9, 1, 8, 8, 8, 4, 5, 8, 0, 1, 5, 6, 1, 6, 6, 0, 9, 7, 9, 1, 9, 1, 3, 3, 8, 7, 5, 4, 9, 9, 2, 0, 0, 5, 2, 4, 0, 6, 3, 6, 8, 9, 9, 1, 2, 5, 6, 0, 7, 1, 7, 6, 0, 6, 0, 5, 8, 8, 6, 1, 1, 6, 4, 6, 7, 1, 0, 9, 4, 0, 5, 0, 7, 7, 5, 4, 1, 0, 0, 2, 2, 5, 6, 9, 8, 3, 1, 5, 5, 2, 0, 0, 0, 5, 5, 9, 3, 5, 7, 2, 9, 7, 2, 5, 7, 1, 6, 3, 6, 2, 6, 9, 5, 6, 1, 8, 8, 2, 6, 7, 0, 4, 2, 8, 2, 5, 2, 4, 8, 3, 6, 0, 0, 8, 2, 3, 2, 5, 7, 5, 3, 0, 4, 2, 0, 7, 5, 2, 9, 6, 3, 4, 5, 0 };
  13. static long product, max = 0;
  14. public static void SolutionEight()
  15. {
  16. for (short i = 0; i < 987; i++)
  17. {
  18. product = (long)input[i]
  19. * input[i + 1]
  20. * input[i + 2]
  21. * input[i + 3]
  22. * input[i + 4]
  23. * input[i + 5]
  24. * input[i + 6]
  25. * input[i + 7]
  26. * input[i + 8]
  27. * input[i + 9]
  28. * input[i + 10]
  29. * input[i + 11]
  30. * input[i + 12];
  31. max = product > max ? product : max;
  32. }
  33. // Console.WriteLine(max);
  34. }
  35.  
  36.  
  37. public static void SolutionEight2()
  38. {
  39. var threads = 8;// Environment.ProcessorCount / 2;
  40. int windowSize = 1000 / threads;
  41. var tasks = new Task<long>[threads];
  42. for (int i = 0; i < threads; i++)
  43. {
  44. int windowStart = i;
  45. tasks[windowStart] = Task<long>.Run(() => { return GetMax(windowStart * windowSize, (windowStart + 1) * windowSize - ((windowStart == threads - 1) ? 12 : 0)); });
  46. }
  47. long max = 0;
  48. foreach (var task in tasks)
  49. {
  50. var result = task.Result;
  51. max = max > result ? max : result;
  52. }
  53. // Console.WriteLine(max);
  54. }
  55.  
  56. static public long GetMax(int start, int end)
  57. {
  58. long max = 0;
  59.  
  60. for (int i = start; i < end - 12; i++)
  61. {
  62. if (HasZero(i)) continue;
  63. // Optimised as suggested by @Falco
  64. if (i > 0 && input[i - 1] > input[i + 12]) continue;
  65.  
  66. // Optimised as suggestd by @domi1819
  67. long product = (long)(input[i]
  68. * input[i + 1]
  69. * input[i + 2]
  70. * input[i + 3]
  71. * input[i + 4]
  72. * input[i + 5]
  73. * input[i + 6])
  74. * (input[i + 7]
  75. * input[i + 8]
  76. * input[i + 9]
  77. * input[i + 10]
  78. * input[i + 11]
  79. * input[i + 12]);
  80.  
  81. max = product > max ? product : max;
  82. }
  83.  
  84.  
  85. return max;
  86. }
  87.  
  88. static bool HasZero(int i)
  89. {
  90. return !(input[i] != 0 &&
  91. input[i + 1] != 0 &&
  92. input[i + 2] != 0 &&
  93. input[i + 3] != 0 &&
  94. input[i + 4] != 0 &&
  95. input[i + 5] != 0 &&
  96. input[i + 6] != 0 &&
  97. input[i + 7] != 0 &&
  98. input[i + 8] != 0 &&
  99. input[i + 9] != 0 &&
  100. input[i + 10] != 0 &&
  101. input[i + 11] != 0 &&
  102. input[i + 12] != 0);
  103. }
  104. }
  105.  
  106. class Program
  107. {
  108. static void Main(string[] args)
  109. {
  110. ProblemEight.SolutionEight();
  111. ProblemEight.SolutionEight2();
  112.  
  113. Run(ProblemEight.SolutionEight);
  114. Run(ProblemEight.SolutionEight2);
  115. }
  116.  
  117. static void Run(Action action) {
  118. var timer = new Stopwatch();
  119. timer.Start();
  120.  
  121. for (int i = 0; i < 20000; i++)
  122. {
  123. action();
  124. }
  125.  
  126. timer.Stop();
  127. Console.WriteLine(timer.ElapsedMilliseconds);
  128. }
  129. }
  130. }
  131.  
Success #stdin #stdout 4.49s 29416KB
stdin
Standard input is empty
stdout
3221
1206