I’ve been busy with projects for the lab, but I got the chance to do one quick coding challenge this weekend. The challenge presented a 20 X 20 matrix of numbers, and asked:

What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the 20Ã—20 grid?

As an example, the numbers 26, 63, 78, and 14 were highlighted in red.

I particularly like this challenge because it’s very cut and dry. I know that if I create an algorithm that goes through all the possibilities, I will undoubtedly find the answer! And I had to use matlab for this one… because it is the Matrix Laboratory! It was a nice little bit of fun after a Sunday filled with running analysis and practicing a journal club presentation. Ok, I know, I shouldn’t try to deceive anyone that I suffered though that. I very much enjoyed both those things, otherwise I wouldn’t have chosen to do them!


function grid_product()
%--------------------------------------------------------------------------
% This function finds the greatest product for any four diagonal, vertical,
% or horizontal numbers in a 20 X 20 grid
%--------------------------------------------------------------------------

% Read in the grid matrix
grid_matrix ={08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08; 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00; 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65; 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91; 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80; 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50; 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70; 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21; 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72; 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95; 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92; 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57; 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58; 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40; 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66; 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69; 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36; 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16; 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54; 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48;};

highestproduct = 0;

% DIAGONAL RIGHT: Go through the grid, and for each spot, find the product of the diagonal.
for i=1:17

for j=1:17
product = grid_matrix{i,j}*grid_matrix{i+1,j+1}*grid_matrix{i+2,j+2}*grid_matrix{i+3,j+3};
if (product > highestproduct)
highestproduct = product;
end
end
end

% RIGHT and LEFT: Go through the grid, and for each spot, find the % product of horizontal numbers.
for i=1:20
for j=1:17
product = grid_matrix{i,j}*grid_matrix{i,j+1}*grid_matrix{i,j+2}*grid_matrix{i,j+3};
if (product > highestproduct)
highestproduct = product;
end
end
end

% DIAGONAL LEFT: Go through the grid, and for each spot, find the product of the diagonal.
for i=1:17
for j=4:20
product = grid_matrix{i,j}*grid_matrix{i+1,j-1}*grid_matrix{i+2,j-2}*grid_matrix{i+3,j-3};
if (product > highestproduct)
highestproduct = product;
end
end
end

% UP AND DOWN: Go through the grid, and for each spot, find the vertical
% product,vstarting at the top.
for i=1:17
for j=1:20
% Check if the farthest out value exists, 4 rows down, 1 to the
% right
product = grid_matrix{i,j}*grid_matrix{i+1,j}*grid_matrix{i+2,j}*grid_matrix{i+3,j};
if (product > highestproduct)
highestproduct = product;
end
end
end

fprintf('%s%d\n','The highest product is ',highestproduct);
end



Suggested Citation:
Sochat, Vanessa. "Grid Matrix!." @vsoch (blog), 08 Nov 2010, https://vsoch.github.io/2010/grid-matrix/ (accessed 20 Mar 23).