32 lines
1003 B
PHP
32 lines
1003 B
PHP
<?php
|
|
$input = file('input', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
|
$input = array_map(fn($line) => explode('-', $line), $input);
|
|
|
|
$adjacencyList = [];
|
|
foreach ($input as $key => $item) {
|
|
if ($item[1] != 'start') $adjacencyList[$item[0]][] = $item[1];
|
|
if ($item[0] != 'start') $adjacencyList[$item[1]][] = $item[0];
|
|
}
|
|
$history = [];
|
|
echo track($adjacencyList, "start", $history, 0);
|
|
|
|
function track($adjacencyList, $cave, $history, $doubled)
|
|
{
|
|
$count = 0;
|
|
$history[] = $cave;
|
|
foreach ($adjacencyList[$cave] as $path) {
|
|
//small cave, not already visited
|
|
if ($path == "start") {
|
|
} elseif (strtolower($path) === $path && in_array($path, $history)) {
|
|
if ($doubled == 0) {
|
|
$count += track($adjacencyList, $path, $history, 1);
|
|
}
|
|
} elseif ($path == "end") {
|
|
$count += 1;
|
|
} else {
|
|
$count += track($adjacencyList, $path, $history, $doubled);
|
|
}
|
|
}
|
|
return $count;
|
|
}
|