@ 2017-10-07T09:44:27Z <?php
error_reporting(-1);
define('SUBWAY', 'sub');
define('FOOT', 'foot');
define('BUS', 'bus');
$transportName = array(
SUBWAY => 'едешь на метро',
FOOT => 'идешь пешком',
BUS => 'едешь на автобусе'
);
$startPoint = 'pet'; // Петроградская
$endPoint = 'nov'; // Новая Голландия
$pointNames = array(
'pet' => 'ст. м. Петроградская',
'chk' => 'ст. м. Чкаловская',
'gor' => 'ст. м. Горьковская',
'spo' => 'ст. м. Спортивная',
'vas' => 'ст. м. Василеостровская',
'kre' => 'Петропавловская крепость',
'let' => 'Летний сад',
'dvo' => 'Дворцовая площадь',
'isa' => 'Исакиевский собор',
'nov' => 'Новая Голландия',
'ras' => 'Дом Раскольникова',
'gos' => 'Гостиный Двор',
'sen' => 'Сенная Площадь',
'vla' => 'ст. м. Владимирская',
'vit' => 'Витебский вокзал',
'teh' => 'Технологический Институт'
);
$paths = array(
'pet' => array(
'chk' => canGet(10, BUS),
'gor' => canGet(3, SUBWAY)
),
'chk' => array(
'pet' => canGet(10, BUS),
'spo' => canGet(3, SUBWAY)
),
'gor' => array(
'pet' => canGet(3, BUS),
'kre' => canGet(5, FOOT),
'gos' => canGet(6, SUBWAY)
),
'spo' => array(
'chk' => canGet(3, SUBWAY),
'vas' => canGet(10, BUS),
'sen' => canGet(7, SUBWAY)
),
'vas' => array(
'spo' => canGet(10, BUS),
'gos' => canGet(7, SUBWAY),
'nov' => canGet(11, FOOT)
),
'kre' => array(
'gor' => canGet(5, FOOT)
),
'let' => array(
'dvo' => canGet(6, FOOT),
'gos' => canGet(7, FOOT)
),
'dvo' => array(
'isa' => canGet(6, FOOT),
'gos' => canGet(6, FOOT),
'let' => canGet(6, FOOT)
),
'isa' => array(
'dvo' => canGet(6, FOOT),
'nov' => canGet(5, FOOT)
),
'nov' => array(
'vas' => canGet(11, FOOT),
'isa' => canGet(5, FOOT),
'ras' => canGet(7, BUS)
),
'ras' => array(
'nov' => canGet(7, BUS),
'sen' => canGet(3, FOOT)
),
'gos' => array(
'vas' => canGet(7, SUBWAY),
'sen' => canGet(3, SUBWAY),
'dvo' => canGet(6, FOOT),
'gor' => canGet(6, SUBWAY),
'let' => canGet(7, FOOT),
'vla' => canGet(7, FOOT)
),
'sen' => array(
'ras' => canGet(3, FOOT),
'spo' => canGet(7, SUBWAY),
'gos' => canGet(3, SUBWAY),
'vla' => canGet(4, SUBWAY),
'vit' => canGet(2, SUBWAY),
'teh' => canGet(3, SUBWAY)
),
'vla' => array(
'sen' => canGet(4, SUBWAY),
'gos' => canGet(7, FOOT),
'vit' => canGet(3, SUBWAY)
),
'vit' => array(
'sen' => canGet(2, SUBWAY),
'teh' => canGet(2, SUBWAY),
'vla' => canGet(3, SUBWAY)
),
'teh' => array(
'sen' => canGet(3, SUBWAY),
'vit' => canGet(2, SUBWAY)
)
);
function canGet($time, $byWhat) {
return array('time' => $time, 'by' => $byWhat);
}
$notVisited = array();
$notVisited = array_keys($paths);
foreach ($paths as $key => &$value) {
$value = array($value, array(1000, null));
}
$paths[$startPoint][1][0] = 0;
$paths[$startPoint][1][0] = 0;
$thisNode = null;
$settledSites = array();
while(1){
$timeNode = 1000;
foreach ($paths as $key => &$value) {
foreach ($settledSites as $key2 => &$value2) {
if ($value2 == $key){
continue 2;
}
}
if ($value[1][0] < $timeNode){
$thisNode = $key;
$timeNode = $value[1][0];
}
}
if ($thisNode == $endPoint){
break;
}
array_push($settledSites, $thisNode);
foreach ($paths[$thisNode][0] as $key => &$value) {
if ($paths[$thisNode][1][0] + $value['time'] < $paths[$key][1][0]){
$paths[$key][1][0] = $paths[$thisNode][1][0] + $value['time'];
$paths[$key][1][1] = $thisNode;
}
}
}
$way = array();
array_push($way, $endPoint);
while($way[count($way) - 1] != $startPoint){
array_push($way, $paths[$way[count($way) - 1]][1][1]);
}
$way = array_reverse($way);
echo "Начальная точка: \"{$pointNames[$way[0]]}\"\n";
for ($i = 0; $i < count($way) - 1; $i++){
echo "Из неё {$transportName[$paths[$way[$i]][0][$way[$i+1]]['by']]} до точки \"{$pointNames[$way[$i+1]]}\" {$paths[$way[$i]][0][$way[$i+1]]['time']} мин.\n";
}
echo "В итоге ты попадаешь в точку \"{$pointNames[$way[count($way) - 1]]}\" за {$paths[$way[count($way)-1]][1][0]} мин. Приятной поездки!";
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.24 , 7.1.0 - 7.1.33 , 7.2.6 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 - 8.3.7 Начальная точка: "ст. м. Петроградская"
Из неё едешь на метро до точки "ст. м. Горьковская" 3 мин.
Из неё едешь на метро до точки "Гостиный Двор" 6 мин.
Из неё едешь на метро до точки "Сенная Площадь" 3 мин.
Из неё идешь пешком до точки "Дом Раскольникова" 3 мин.
Из неё едешь на автобусе до точки "Новая Голландия" 7 мин.
В итоге ты попадаешь в точку "Новая Голландия" за 22 мин. Приятной поездки! Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Начальная точка: "ст. м. Петроградская"
Из неё едешь на метро до точки "ст. м. Горьковская" 3 мин.
Из неё едешь на метро до точки "Гостиный Двор" 6 мин.
Из неё едешь на метро до точки "Сенная Площадь" 3 мин.
Из неё идешь пешком до точки "Дом Раскольникова" 3 мин.
Из неё едешь на автобусе до точки "Новая Голландия" 7 мин.
В итоге ты попадаешь в точку "Новая Голландия" за 22 мин. Приятной поездки! preferences:dark mode live preview
159.77 ms | 404 KiB | 209 Q