function processDistances($in) { $dirs = explode("\n", $in); $routes = array(); $places = array(); $patt = "/(.*) to (.*) = ([0-9]*)/"; foreach ($dirs as $dir) { if (!$dir) { continue; } $matches = array(); preg_match($patt, $dir, $matches); $routes = addToRoutes($matches[1], $matches[2], $matches[3], $routes); $places[] = $matches[1]; $places[] = $matches[2]; } $places = array_unique($places); $currentLowestDist = -1; $currentLowestRoute = array(); foreach (getAllRoutes($places) as $route) { $dist = calcDistance($route, $routes); if ($dist > $currentLowestDist) { $currentLowestDist = $dist; $currentLowestRoute = $route; } } echo "Lowest Distance: " . $currentLowestDist . "\n"; }
function getAllRoutes($places) { if (count($places) == 1) { return $places; } $allRoutes = array(); foreach ($places as $index => $place) { $newPlaces = $places; unset($newPlaces[$index]); $routes = getAllRoutes($newPlaces); foreach ($routes as $route) { $allRoutes[] = $place . "," . $route; } } return $allRoutes; }