part2

#!/usr/bin/env php
<?php
/**
 * Find the gears (any * with exactly 2 numbers adjacent to it. Numbers may be multiple characters.)
 */

//$input = file_get_contents(__DIR__.'/sample2.txt');
//$input = file_get_contents(__DIR__.'/sample2b.txt');
//$input = file_get_contents(__DIR__.'/sample2c.txt');
$input = file_get_contents(__DIR__.'/input2.txt');

$expected_output = '';

//$game_lines = explode("\n", trim($input));

$lines = explode("\n", trim($input));

$total = 0;


$completed_products = [];
foreach ($lines as $line_num => $line){
    $chars = str_split($line);

    $cur_num = null;

    $is_cur_num_valid = false;


    $nums = [];

    foreach ($chars as $index=>$c){

        if ($c != '*')continue;
        $pos_line = $line_num;
        $pos_char = $index;
        $new_numbers_found = 0;
        $is_number_active = false;
        $number_positions = [];

        $_positions = [ 
            [$pos_line - 1, $pos_char - 1], [$pos_line - 1, $pos_char], [$pos_line - 1, $pos_char+1], 
            [$pos_line, $pos_char - 1], [$pos_line, $pos_char], [$pos_line, $pos_char +1], 
            [$pos_line+ 1, $pos_char - 1], [$pos_line+ 1, $pos_char ], [$pos_line+ 1, $pos_char +1], 
        ];
        echo "\n\nTEST POSITIONS\n";
        $prev_line_num = $pos_line - 1;
        foreach ($_positions as $number_search_pos){
            $_pos_line = $number_search_pos[0];
            $_pos_char = $number_search_pos[1];
            $line = $lines[$_pos_line] ?? "";
            $char = str_split($line)[$_pos_char] ?? null;

            if ($prev_line_num < $_pos_line){
                $is_number_active = false;
            }
            $prev_line_num = $_pos_line;

            echo $char;

            if (is_numeric($char)&&!$is_number_active){
                //var_dump("NUMERIC MAKE ACTIVE");
                $is_number_active = true;
                $new_numbers_found++;
                $number_positions[] = [$_pos_line, $_pos_char];
            } else if (is_numeric($char)){
                // do nothing because we didn't find a new number
            } else {
                $is_number_active = false;
            }
        }

        //var_dump($number_positions);
        
        if ($new_numbers_found == 2){
            //echo "WE DID IT";
            //exit;
            // we found a gear
            $num1_pos = $number_positions[0];
            $l1 = $num1_pos[0];
            $c1 = $num1_pos[1];
            $line = $lines[$l1];
            $start_pos = $c1;
            $search_pos = $c1-1;
            while ($search_pos>=0 
                && is_numeric( substr($line,$search_pos,1) ) 
            ){
                $start_pos = $search_pos;
                $search_pos = $start_pos - 1;
            }
            $c1 = $start_pos;
            $num1 = '';
            $yoink_pos = $start_pos;
            while (($char = substr($line,$yoink_pos,1)) !== false){
                $yoink_pos = $yoink_pos + 1;
                if (is_numeric($char)) $num1 .= $char;
                else break;
            }




            $num2_pos = $number_positions[1];
            $l2 = $num2_pos[0];
            $c2 = $num2_pos[1];
            $line = $lines[$l2];
            $start_pos = $c2;
            $search_pos = $c2-1;
            while ($search_pos>=0 
                && is_numeric( substr($line,$search_pos,1) ) 
            ){
                $start_pos = $search_pos;
                $search_pos = $start_pos - 1;
            }
            $c2 = $start_pos;
            $num2 = '';
            $yoink_pos = $start_pos;
            while (($char = substr($line,$yoink_pos,1)) !== false){
                $yoink_pos = $yoink_pos + 1;
                if (is_numeric($char)) $num2 .= $char;
                else break;
            }

            $num1 = (int)$num1;
            $num2 = (int)$num2;
            //var_dump($num1);;
            //var_dump($num2);
            $l3 = $l1;
            $c3 = $c1;
            $l4 = $l2;
            $c4 = $c2;
            if ($l3 > $l4 || $l3 === $l4 && $c3 > $c4){
                $l3 = $l2;
                $c3 = $l2;
                $l4 = $l1;
                $c4 = $l1;
            }
            //$product_name = "$l3:$c3-$l4:$c4";
            $p1 = "$l1:$c1";
            $p2 = "$l2:$c2";
            if (isset($completed_products[$p1]) || isset($completed_products[$p2])){
                //echo "ALREADY ADDED";
                continue;
            }
            $completed_products[$p1] = "$num1 * $num2";
            $completed_products[$p2] = "$num1 * $num2";
            //$completed_products[$product_name] = "$num1 * $num2";
            
            $product = $num1 * $num2;
            $total += $product;
        }

    }

}

print_r($completed_products);

echo "\n\nSum of powers: ". $total."\n\n";