How to find repeated patterns of numbers in the rows of a matrix with PHP

1 Answer

0 votes
function findRepeatingPatterns($matrix, $patternSize) {
    $patternMap = [];

    foreach ($matrix as $rowIndex => $row) {
        for ($col = 0; $col <= count($row) - $patternSize; $col++) {
            $pattern = implode('-', array_slice($row, $col, $patternSize));

            if (!isset($patternMap[$pattern])) {
                $patternMap[$pattern] = [];
            }
            $patternMap[$pattern][] = $rowIndex;
        }
    }

    echo "Repeated Patterns Found:\n";
    foreach ($patternMap as $pattern => $rows) {
        if (count($rows) > 1) {
            echo "$pattern appears " . count($rows) . " times in rows: " . implode(' ', $rows) . "\n";
        }
    }
}

$matrix = [
    [1, 2, 3, 8, 9, 7, 4, 9, 6],
    [1, 3, 2, 7, 8, 9, 4, 5, 6],
    [1, 2, 3, 8, 6, 1, 4, 9, 8],
    [1, 2, 3, 0, 8, 8, 4, 5, 9],
    [1, 2, 3, 4, 5, 6, 7, 8, 9],
    [1, 2, 3, 7, 0, 9, 4, 5, 7],
    [1, 3, 2, 4, 5, 6, 7, 8, 9]
];

$patternSize = 3; // Looking for sequences of 3 numbers

findRepeatingPatterns($matrix, $patternSize);



/*
run:

Repeated Patterns Found:
1-2-3 appears 5 times in rows: 0 2 3 4 5
2-3-8 appears 2 times in rows: 0 2
1-3-2 appears 2 times in rows: 1 6
7-8-9 appears 3 times in rows: 1 4 6
9-4-5 appears 2 times in rows: 1 5
4-5-6 appears 3 times in rows: 1 4 6
5-6-7 appears 2 times in rows: 4 6
6-7-8 appears 2 times in rows: 4 6

*/

 



answered May 25, 2025 by avibootz
edited May 25, 2025 by avibootz
...