Как оптимально решить эту задачу на php?

Недавно решал тестовое задание на стажировку в одну контору. Не смог тогда в положенное время решить одну задачу, собственно пролетел. Потом решил её для себя, но у меня возник вопрос - достаточно ли моё решение оптимально, или, исходя из условий задачи, его можно как-то улучшить? Вот сама задача: Описание задачи

Вот моё окончательное решение (после строки комментария):

<?php
$cars = [
    ['name' => 'Такси 1', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
    ['name' => 'Такси 2', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
    ['name' => 'Такси 3', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
    ['name' => 'Такси 4', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
    ['name' => 'Такси 5', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
];

$passenger = rand(0, 1000);

/* ===== Ваш код ниже ===== */

$min = null;
foreach($cars as $car){
    if($car['isFree']==true){
        if(abs($car['position'] - $passenger) < $min OR $min === null){
            $min = abs($car['position'] - $passenger);
     } 
 }
}

foreach($cars as $car){
    echo $car['name'].", стоит на ".$car['position']." км, до пассажира ".abs($car['position'] - $passenger)." км";
    if($car['isFree']==true){
        echo " (свободен)";
        if(abs($car['position'] - $passenger)==$min){
        echo " - едет эта машина";
        }
        echo "<br/>";
    } else{
        echo " (занят)"."<br/>";
    }   
}
?>

Я знаю, что эта задача здесь уже фигурировала, но тогда отвечающий при её решении использовал создание функции, а это запрещено условием. Заранее спасибо)


Ответы (1 шт):

Автор решения: MBo

Безотносительно PHP, общечеловеческие замечания:

Зачем два (в итоге даже три) раза вычислять для каждой машины abs($car['position'] - $passenger)? Функция min поможет оформить сравнение более кратко. Если она вдруг запрещена - можно записать в переменную.

Что будет, если до двух машин одинаковое расстояние? Обе поедут?

При обновлении минимума нужно запоминать индекс, тогда вывод будет однозначен

→ Ссылка