{"id":132,"date":"2014-04-24T15:43:37","date_gmt":"2014-04-24T22:43:37","guid":{"rendered":"http:\/\/willclausen.com\/?p=132"},"modified":"2014-04-24T15:45:01","modified_gmt":"2014-04-24T22:45:01","slug":"project-euler-problem-11","status":"publish","type":"post","link":"https:\/\/willclausen.com\/?p=132","title":{"rendered":"Project Euler Problem 11"},"content":{"rendered":"<p>The problem:<\/p>\n<p>Find the largest product of 4 adjacent numbers in a 20&#215;20 grid. Numbers can be adjacent in any direction, vertical, horizontal, diagonal.<\/p>\n<p>http:\/\/projecteuler.net\/problem=11<\/p>\n<p>My solution (in java):<\/p>\n<pre class=\"brush: java; light: false; title: ; toolbar: true; notranslate\" title=\"\">\r\n\r\n\/\/ Author: Will Clausen\r\n\/\/\r\n\/\/ Date: Jan. 16, 2013\r\n\/\/\r\n\/\/ This program will solve Problem 11 from Project Euler.\r\n\r\nimport java.util.Scanner;\r\n\r\npublic class Problem11 {\r\n\u00a0\u00a0 \u00a0\/\/ Grid to store all the numbers\r\n\u00a0\u00a0 \u00a0int&#x5B;]&#x5B;] grid;\r\n\u00a0\u00a0 \u00a0\/\/ The number of adjacent numbers to use when looking for the maximum\r\n\u00a0\u00a0 \u00a0int numAdjacent;\r\n\u00a0\u00a0 \u00a0\/\/ Grid dimensions\r\n\u00a0\u00a0 \u00a0int gridWidth;\r\n\u00a0\u00a0 \u00a0int gridHeight;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/ To make my solution a little more general, I allow for the specification\r\n\u00a0\u00a0 \u00a0\/\/ of the size of the grid and the number of adjacent entries in the matrix\r\n\u00a0\u00a0 \u00a0\/\/ to consider.\r\n\u00a0\u00a0 \u00a0Problem11(String input, int gw, int gh, int limit)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Assign variables according to proper input.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0numAdjacent = limit;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0gridWidth = gw;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0gridHeight = gh;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Create scanner for reading from the input string.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Scanner scanner = new Scanner(input);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Scanner line;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0grid = new int&#x5B;gridHeight]&#x5B;gridWidth];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Variables for indexing into the grid when inserting numbers\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int widthIndex = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int heightIndex = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ While there are still things to read from the input.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0while (scanner.hasNextLine()) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Get the next line of numbers for the grid\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0line = new Scanner(scanner.nextLine());\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Take the numbers out of the line and put them in the grid.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0while (line.hasNextInt()) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int nextNum = line.nextInt();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0grid&#x5B;heightIndex]&#x5B;widthIndex] = nextNum;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Update the indexing accordingly\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0widthIndex++;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Update indexing accordingly\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0widthIndex = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0heightIndex++;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0line.close();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Remember to close the scanner.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0scanner.close();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Method to ensure everything was inputted properly.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printGrid();\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/ Method to actually solve problem 11.\r\n\u00a0\u00a0 \u00a0public int solve()\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Start with an initial maximum, will be changed during execution.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int maxProd = 1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Initialize the next product to be checked to the mulitplicative identity.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int nextProd = 1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Arrays to keep track of the most recent numbers seen.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int&#x5B;] horiz = new int&#x5B;numAdjacent];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int&#x5B;] vert = new int&#x5B;numAdjacent];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int&#x5B;] diag = new int&#x5B;numAdjacent];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int&#x5B;] diag2 = new int&#x5B;numAdjacent];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int&#x5B;] max = new int&#x5B;numAdjacent];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ To simplify things, loop through the array in different directions\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ using multiple loops. It adds computation time, but it makes much\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ more sense conceptually.\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ get maximum horizontal product\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = 0; i &lt; gridHeight; i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int j = 0; j &lt;= (gridWidth - numAdjacent); j++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int k = j; k &lt; (numAdjacent + j); k++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0horiz&#x5B;k % numAdjacent] = grid&#x5B;i]&#x5B;k];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0nextProd = calcProd(horiz);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (nextProd &gt; maxProd) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0maxProd = nextProd;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;New max product is: &quot; + maxProd);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(horiz);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0max = horiz;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(max);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The final horizontal array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(horiz);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ get the maximum vertical product\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = 0; i &lt; gridWidth; i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int j = 0; j &lt;= (gridHeight - numAdjacent); j++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int k = j; k &lt; (numAdjacent + j); k++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0vert&#x5B;k % numAdjacent] = grid&#x5B;k]&#x5B;i];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0nextProd = calcProd(vert);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (nextProd &gt; maxProd) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0maxProd = nextProd;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;New max product is: &quot; + maxProd);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(vert);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0max = vert;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(max);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The final vertical array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(vert);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ get the maximum diagonal product (down and to the right)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = 0; i &lt;= (gridWidth - numAdjacent); i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int j = 0; j &lt;= (gridHeight - numAdjacent); j++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int k = 0; k &lt; (numAdjacent); k++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0diag&#x5B;k] = grid&#x5B;i + k]&#x5B;j + k];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0nextProd = calcProd(diag);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (nextProd &gt; maxProd) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0maxProd = nextProd;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;New max product is: &quot; + maxProd);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(diag);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0max = diag;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(max);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The final diagonal array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(diag);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ get the maximum diagonal product (up to the right)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = numAdjacent-1; i &lt; gridHeight; i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int j = 0; j &lt;= (gridWidth - numAdjacent); j++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int k = 0; k &lt; numAdjacent; k++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0diag2&#x5B;k] = grid&#x5B;i - k]&#x5B;j + k];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0nextProd = calcProd(diag2);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (nextProd &gt; maxProd) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0maxProd = nextProd;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;New max product is: &quot; + maxProd);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;The array is: &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(diag2);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0max = diag2;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(max);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int finalProd = calcProd(max);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;The product of the final array is: &quot; + finalProd);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0printArray(max);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return maxProd;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/ Helper method for calculating the product of numbers in an array.\r\n\u00a0\u00a0 \u00a0public int calcProd(int&#x5B;] nums)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int prod = 1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = 0; i &lt; nums.length; i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (nums&#x5B;i] == 0) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0} else {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0prod *= nums&#x5B;i];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return prod;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/ Helper method for printing the contents of an array of numbers in a nice way.\r\n\u00a0\u00a0 \u00a0public static void printArray(int&#x5B;] numArray)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;&#x5B;&quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = 0; i &lt; numArray.length; i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(numArray&#x5B;i] + &quot;, &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;]&quot;);\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/ Helper method for printing a gird of numbers in a nice way.\r\n\u00a0\u00a0 \u00a0public void printGrid()\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (int i = 0; i &lt; gridHeight; i++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(&quot;&#x5B;&quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for(int j = 0; j &lt; gridWidth; j++) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.print(grid&#x5B;i]&#x5B;j] + &quot;, &quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;]&quot;);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/**\r\n\u00a0\u00a0 \u00a0 * @param args\r\n\u00a0\u00a0 \u00a0 *\/\r\n\u00a0\u00a0 \u00a0public static void main(String&#x5B;] args) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Problem11 prob11 = new Problem11(&quot;08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 \\n&quot; + \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&quot;01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48&quot;, 20, 20, 4);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0int solution = prob11.solve();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0System.out.println(&quot;The solution is: &quot; + solution);\r\n\u00a0\u00a0 \u00a0}\r\n\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>The problem: Find the largest product of 4 adjacent numbers in a 20&#215;20 grid. Numbers can be adjacent in any direction, vertical, horizontal, diagonal. http:\/\/projecteuler.net\/problem=11 My solution (in java): \/\/ Author: Will Clausen \/\/ \/\/ Date: Jan. 16, 2013 \/\/ \/\/ This program will solve Problem 11 from Project Euler. import java.util.Scanner; public class Problem11 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[35,34,36,42],"class_list":["post-132","post","type-post","status-publish","format-standard","hentry","category-project-euler","tag-grid","tag-problem-11","tag-product","tag-project-euler"],"_links":{"self":[{"href":"https:\/\/willclausen.com\/index.php?rest_route=\/wp\/v2\/posts\/132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/willclausen.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/willclausen.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/willclausen.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/willclausen.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=132"}],"version-history":[{"count":2,"href":"https:\/\/willclausen.com\/index.php?rest_route=\/wp\/v2\/posts\/132\/revisions"}],"predecessor-version":[{"id":134,"href":"https:\/\/willclausen.com\/index.php?rest_route=\/wp\/v2\/posts\/132\/revisions\/134"}],"wp:attachment":[{"href":"https:\/\/willclausen.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/willclausen.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/willclausen.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}