12th day both parts
This commit is contained in:
23
12/input
Normal file
23
12/input
Normal file
@@ -0,0 +1,23 @@
|
||||
vn-DD
|
||||
qm-DD
|
||||
MV-xy
|
||||
end-xy
|
||||
KG-end
|
||||
end-kw
|
||||
qm-xy
|
||||
start-vn
|
||||
MV-vn
|
||||
vn-ko
|
||||
lj-KG
|
||||
DD-xy
|
||||
lj-kh
|
||||
lj-MV
|
||||
ko-MV
|
||||
kw-qm
|
||||
qm-MV
|
||||
lj-kw
|
||||
VH-lj
|
||||
ko-qm
|
||||
ko-start
|
||||
MV-start
|
||||
DD-ko
|
||||
29
12/part1.php
Normal file
29
12/part1.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?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);
|
||||
function track($adjacencyList, $cave, $history) {
|
||||
$count = 0;
|
||||
$history[] = $cave;
|
||||
foreach($adjacencyList[$cave] as $path) {
|
||||
if(strtolower($path) === $path && in_array($path,$history)) {
|
||||
//bad path, go no further
|
||||
}
|
||||
else if($path == "end") {
|
||||
$count += 1;
|
||||
echo implode(",",$history) ."\n";
|
||||
}
|
||||
else {
|
||||
$count += track($adjacencyList, $path, $history);
|
||||
}
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
||||
31
12/part2.php
Normal file
31
12/part2.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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;
|
||||
}
|
||||
Reference in New Issue
Block a user