Php: Дешёвые отели

PHP: Полиморфизм 1 сообщение
Обновлено: 21 апр., 16:43
43
Студента
93%
Завершения

Существуют сервисы бронирования отелей, такие как Booking, Kayak, Ostrovok. Каждый из них имеет какую-то комиссию и политику ценообразования. В течение этой задачи нам предстоит реализовать API, работающее с этими сервисами и поиск самого выгодного предложения из них. Наш сервис должен показывать честную цену, с учетом всех комиссий и преобразований. Валюта отображения – рубли.

Политика ценообразования для сервисов:

Все совпадения случайны

  • Ostrovok: цену нужно увеличивать на налог 12%, платится за каждое бронирование
  • Booking: цену нужно преобразовывать из долларов в рубли по курсу 1:75
  • Kayak: никаких изменений, показывают конечную и удобную цену для нас

Описание отеля в каждом сервисе выглядит одинаково:

<?php

// cost будет разный в зависимости от сервиса и его политики ценообразования
// именно это число нужно "нормализовывать" для сравнения
$hotel = [ 'name' => 'hexletInn', 'cost' => 600 ];

src/Gateway.php

Реализуйте функцию findAll(), обрабатывающую данные от разных сервисов бронирования. Он должен устанавливать для каждого цену, с учётом коэффициента этого сервиса. Сервис возвращает массив отелей и сервисов, попавших в условие. Данные для обработки находятся в массиве $hotelsByService.

<?php

// Цены на отели возвращаются уже в нормализованном виде
// возвращается массив отелей объединенных с именем сервиса из которого они извлекаются
$hotelInfos = findAll();
// [
//     ['hotel' => ['cost' => 224, 'name' => 'volga'], 'service' => 'ostrovok'],
//     ['hotel' => ['cost' => 500, 'name' => 'hexletInn'], 'service' => 'booking']
// ]

Шлюз поддерживает фильтрацию по минимальной и максимальной цене:

<?php

// По умолчанию min и max не заданы, но их можно указать
findAll(['min' => 200, 'max' => 300]);

// Можно указывать только один предикат
findAll(['max' => 500]);
findAll(['min' => 100]);

src/Solution.php

Реализуйте логику функции findTheCheapestService(), работающей со шлюзом таким образом, чтобы она принимала от пользователя диапазон цен, обращалась к сервису и выбирала из него наиболее выгодное предложение:

<?php

findTheCheapestService(['min' => 200, 'max' => 300]);
// ['hotel' => ['cost' => 224, 'name' => 'volga'], 'service' => 'ostrovok']

Подсказки

  • В решении учителя нет ни одной условной конструкции

Для полного доступа к испытанию нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Впечатления

Аватар пользователя Stanislav Kletsov
Stanislav Kletsov 10 февраля 2021

Как чувствовал что нужен collect :) Задания из этого курса все очень понравились. Решил как мне кажется не по заветам, но получилось не так многословно как у преподавателя. С будильником же наоборот, наворотил столько лишнего, что страшно смотреть :) Спасибо за интересный курс!