How to find max product of 4 adjacent numbers in the same direction in a 20×20 grid with PHP

1 Answer

0 votes
function printGrid($grid, $size) {
    for ($i = 0; $i < $size; $i++) {
        for ($j = 0; $j < $size; $j++) {
            printf("%4d", $grid[$i][$j]);
        }
        echo "\n";
    }
}
 
function generateRandomMatrix($size)  {
    $grid = array_fill(0, $size, array_fill(0, $size, 0));
     
    for ($i = 0; $i < $size; $i++) {
        for ($j = 0; $j < $size; $j++) {
            $grid[$i][$j] = rand(1, 100);
        }
    }
    return $grid;
}
 
function FindMaxProduct($grid, $size) {
        $max = 0; $product = 0;
        $n1 = 0; $n2 = 0; $n3 = 0; $n4 = 0;
            
        for ($i = 0; $i < $size; $i++) {
            for ($j = 0; $j < $size - 3; $j++) {
                $product = $grid[$i][$j] * $grid[$i][$j + 1] * $grid[$i][$j + 2] * $grid[$i][$j + 3];
                if ($product > $max) {
                    $n1 = $grid[$i][$j]; $n2 = $grid[$i][$j + 1]; $n3 = $grid[$i][$j + 2]; $n4 = $grid[$i][$j + 3];
                    $max = $product;
                }
            }
        }
                       
        for ($i = 0; $i < $size; $i++) {
            for ($j = 0; $j < $size - 3; $j++) {
                $product = $grid[$j][$i] * $grid[$j + 1][$i] * $grid[$j + 2][$i] * $grid[$j + 3][$i];
                if ($product > $max) {
                    $n1 = $grid[$i][$j]; $n2 = $grid[$j + 1][$i]; $n3 = $grid[$j + 2][$i]; $n4 = $grid[$j + 2][$i];
                    $max = $product;
                }
            }
        }
               
        for ($i = 0; $i < $size - 3; $i++) {
            for ($j = 0; $j < $size - 3; $j++) {
                $product = $grid[$j][$i] * $grid[$j + 1][$i + 1] * $grid[$j + 2][$i + 2] * $grid[$j + 3][$i + 3];
                if ($product > $max) {
                    $n1 = $grid[$j][$i]; $n2 = $grid[$j + 1][$i + 1]; $n3 = $grid[$j + 2][$i + 2]; $n4 = $grid[$j + 3][$i + 3];
                    $max = $product;
                }
            }
        }
               
        for ($i = 0; $i < $size - 3; $i++) {
            for ($j = 3; $j < $size; $j++) {
                $product = $grid[$j][$i] * $grid[$j - 1][$i + 1] * $grid[$j - 2][$i + 2] * $grid[$j - 3][$i + 3];
                if ($product > $max) {
                    $n1 = $grid[$j][$i]; $n2 = $grid[$j - 1][$i + 1]; $n3 = $grid[$j - 2][$i + 2]; $n4 = $grid[$j - 3][$i + 3];
                    $max = $product;
                }
            }
        }
                        
        echo "\n" . $n1 . " * " . $n2 . " * " . $n3 . " * " . $n4 . " = ";
     
        return $max;
    }
         
         
$grid = generateRandomMatrix(20);
 
printGrid($grid, 20);
 
echo FindMaxProduct($grid, 20);
 
 
 
 
/*
run:
 
  35  47 100  43  11  58  60  86  96  74  43  92  99  62  93  28  69  48  40  38
  49  45   3  13  52  50  49  85  73  70  75  84 100   1  64  66  96  67  47  52
  14  90  40  26  65  66  30  98  57  17  99  26   8  53  72  25  81  86  33  83
   7  25  17  77  56  30  81   4  48  19  18 100  88  68  67  98  66  50  50  79
  56  74  87  58  48  31  49  15  63  46 100  50  15  60  19  66  38  74  10  73
  42  39  35  16  65  31  21  35  78  77  54  91  85  31  41  51  58  70  48  91
  81  14  44  69   9  94  26  72  71  15  51  85  28   6   5   9  90  73  34  49
  39  92  60  62  71  60  17  39  10  50  46  56  24  29  73  56  27  75  72  56
  52  74  54  89   4  45   8  13  52  20  96  38  57  87  47  70  77  66  79  35
  11  27  94  40  99  37  88  35  20  76  40  71  70  10  47  59  53  36  49   2
  44  59  45  59  81  92  22  78  56  33  42  32  93  68  46  73  16  23  22  92
  95  50  77  42  42  41  74  48  72   5  97  85  20  24  51   6  96  20  18  30
  40  92  47  87  86  60   7  47  15  94  66  61  38  47  32  47  50  57  62  46
  92   4  98  58  27  19  19  97  15  52  84  98  27  58  47  15  56  11  81  23
  85  44  25  94  36  96   8  89  70  34  54   5  66  30  98  90  38  33  10  63
  91  57  20  40  78   8  90  96  16  29  81  52  52  65  89  39  80  92  65  39
  69  38  85   2  34  50  58   8  16  23  13  62  10  27  41   2  10   3  70  26
  89  87  35  96  92  64  72  35  70  35  90  72  11  24  87  35  89  62  72  73
  41  34  19  44  87  61  83  34  98  62  20  94  68  92  26  62  89  65  14  57
  50  15  93  50  94  88  67  16  24  74  46  30  47  65  89  19  32  78  26  27
 
95 * 92 * 98 * 94 = 80512880
   
*/

 



answered Nov 2, 2023 by avibootz
edited Nov 2, 2023 by avibootz
...