makispaiktis

Project Euler 11 - Largest product in a grid

May 5th, 2020 (edited)
1,042
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.80 KB | None | 0 0
  1. /*
  2. In the 20x20 grid below, four numbers along a diagonal line have been marked in red.
  3.  
  4. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
  5. 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
  6. 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
  7. 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
  8. 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
  9. 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
  10. 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
  11. 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
  12. 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
  13. 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
  14. 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
  15. 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
  16. 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
  17. 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
  18. 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
  19. 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
  20. 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
  21. 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
  22. 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
  23. 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
  24.  
  25. The product of these numbers is 26 x 63 x 78 x 14 = 1788696.
  26. What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
  27. */
  28.  
  29. #include <iostream>
  30. #include <stdlib.h>
  31. #include <vector>
  32. #include <algorithm>
  33. #define N 20
  34. #define seri 4
  35.  
  36. using namespace std;
  37.  
  38.  
  39. // Auxiliary Functions
  40. // 1. Right-left directions
  41. int maxRightLeft(int matrix[N][N]){
  42.     int maxProduct = 0;
  43.     for(int i=0; i<N; i++){
  44.         // I take i = N = 20 rows
  45.         for(int j=0; j<N-seri+1; j++){
  46.             // With the previous for-loop I will do the same process N-seri+1 times
  47.             int product = matrix[i][j] * matrix[i][j+1] * matrix[i][j+2] * matrix[i][j+3];
  48.             if(product > maxProduct){
  49.                 maxProduct = product;
  50.             }
  51.         }
  52.     }
  53.     return maxProduct;
  54. }
  55.  
  56. // 2. Up-down directions
  57. int maxUpDown(int matrix[N][N]){
  58.     int maxProduct = 0;
  59.     for(int i=0; i<N; i++){
  60.         // I take i = N = 20 columns
  61.         for(int j=0; j<N-seri+1; j++){
  62.             // With the previous for-loop I will do the same process N-seri+1 times
  63.             int product = matrix[j][i] * matrix[j+1][i] * matrix[j+2][i] * matrix[j+3][i];
  64.             if(product > maxProduct){
  65.                 maxProduct = product;
  66.             }
  67.         }
  68.     }
  69.     return maxProduct;
  70. }
  71.  
  72.  
  73. // MAIN FUNCTION
  74. int main()
  75. {
  76.     // Data
  77.     int matrix[N][N] = {8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8,
  78.                         49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00,
  79.                         81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65,
  80.                         52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91,
  81.                         22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80,
  82.                         24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50,
  83.                         32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70,
  84.                         67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21,
  85.                         24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72,
  86.                         21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95,
  87.                         78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 04, 62, 16, 14, 9, 53, 56, 92,
  88.                         16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57,
  89.                         86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58,
  90.                         19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40,
  91.                         4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66,
  92.                         88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69,
  93.                         4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36,
  94.                         20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16,
  95.                         20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54,
  96.                         1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48};
  97.     cout << maxRightLeft(matrix) << endl;
  98.     cout << maxUpDown(matrix) << endl;
  99.     return 0;
  100. }
Add Comment
Please, Sign In to add comment