Day 04

 avatar
unknown
php
4 months ago
3.5 kB
66
Indexable
<body style="margin-left: 10px; font-family: consolas; font-size: 18px">

<?php
$day = 4;
$file = "advent$day.txt";
echo "-- Start processing $file --<br><br>";

$input = file_get_contents($file);
$inputArray = explode("\r\n", $input);
$xmasArray = array();

foreach ($inputArray as $row) {
    array_push($xmasArray, str_split($row, 1));
}

// check directions
$dirArray = [
    "NE",
    "SE",
    "SW",
    "NW"
];

// check letters
$letterArray = [
    "M",
    "A",
    "S"
];

// record valid paths
$pathArray["X"] = array();
$pathArray["M"] = array();
$pathArray["A"] = array();
$pathArray["S"] = array();

// push As
$rowNum = 0;

foreach ($xmasArray as $row) {

    $colNum = 0;

    foreach ($row as $letter) {

        if ($letter == "A")
            array_push($pathArray["A"], [
                $rowNum,
                $colNum
            ]);

        $item = $xmasArray[$rowNum][$colNum];
        // echo "$item ";
        $colNum ++;
    }
    // echo "<br>";
    $rowNum ++;
}

// checker function
function check($row, $col, $dir, $letter)
{
    global $xmasArray;
    global $pathArray;
    switch ($dir) {
        case "N":
            $row --;
            break;

        case "NE":
            $row --;
            $col ++;
            break;

        case "E":
            $col ++;
            break;

        case "SE":
            $row ++;
            $col ++;
            break;

        case "S":
            $row ++;
            break;

        case "SW":
            $row ++;
            $col --;
            break;

        case "W":
            $col --;
            break;

        case "NW":
            $row --;
            $col --;
            break;
    }

    if (isset($xmasArray[$row][$col]))
        if ($xmasArray[$row][$col] == $letter) {

            // echo "True<br>";

            array_push($pathArray[$letter], [
                $row,
                $col,
                $dir
            ]);
        } else {
            // echo "False<br>";
        }
}

function check2($row, $col, $dir, $letter)
{
    global $xmasArray;
    global $pathArray;

    switch ($dir) {

        case "NE":
            $row = $row + 2;
            $col = $col - 2;
            break;

        case "SE":
            $row = $row - 2;
            $col = $col - 2;
            break;

        case "SW":
            $row = $row - 2;
            $col = $col + 2;
            break;

        case "NW":
            $row = $row + 2;
            $col = $col + 2;
            break;
    }

    if (isset($xmasArray[$row][$col]))
        if ($xmasArray[$row][$col] == $letter) {

            // echo "True<br>";

            array_push($pathArray[$letter], [
                $row,
                $col,
                $dir
            ]);
        } else {
            // echo "False<br>";
        }
}

$count = 0;

foreach ($pathArray["A"] as $loc) {

    foreach ($dirArray as $dir) {

        check($loc[0], $loc[1], $dir, "M");
    }

    if (count($pathArray["M"]) == 2) {

        foreach ($pathArray["M"] as $loc) {
            check2($loc[0], $loc[1], $loc[2], "S");
        }

        if (count($pathArray["S"]) == 2)
            $count ++;
        $pathArray["S"] = array();
    }

    $pathArray["M"] = array();
}

echo $count;

echo "<br><br>-- Finished processing $file --<br>";
Editor is loading...
Leave a Comment