Практика JavaScript

Задание  1: Сортировка карточек

Вам дана стопка посадочных карточек на различные виды транспорта, которые доставят вас из точки A в точку B. Карточки перепутаны, и вы не знаете, где начинается и где заканчивается ваше путешествие. Каждая карточка содержит информацию о том, откуда и куда вы едете на данном отрезке маршрута, а также о типе транспорта (номер рейса, номер места и прочее).
Предоставьте JavaScript API, который отсортирует такой список карточек и вернет словесное описание, как проделать ваше путешествие. API должен принимать на вход несортированный список карточек в формате придуманном вами и возвращать, например, такое описание:

• Take train 78A from Madrid to Barcelona. Seat 45B.
• Take the airport bus from Barcelona to Gerona Airport. No seat assignment.
• From Gerona Airport, take flight SK455 to Stockholm. Gate 45B. Seat 3A. Baggage drop at ticket counter 344.
• From Stockholm, take flight SK22 to New York JFK. Gate 22. Seat 7B. Baggage will be automatically transferred from your last leg.

Требования:

• Алгоритм должен работать с любым количеством карточек, если все карточки образуют одну неразрывную цепочку.
Время прибытия и отправления неизвестно и не важно. Подразумевается, что средство передвижения для следующего отрезка дожидается вас.
• Структура кода должна быть расширяема для использования любых типов транспорта и информации, которая может быть связана с каждым типом транспорта.
• API будет вызываться из других частей JavaScript-кода без необходимости дополнительных запросов между браузером и сервером.
• Не используйте библиотеки и фреймворки, напишите все с нуля.
Задокументируйте в коде формат входных и выходных данных.

Задание 2: Проход по дереву

Написать тело функции reversePrint(), чтобы она при вызове доходила до самого глубокого свойства next и поднимаясь выводила числа. Например, 4,3,2,1.

function reversePrint (linkedList) {
   // ...
}
 
var someList = {
    value: 1,
    next: {
        value: 2,
        next: {
            value: 3,
            next: {
                value: 4,
                next: null
            }
        }
     }
};
reversePrint(someList);

Задание 3: Сортировка массива объектов

Создайте массив объектов users. Каждый объект — элемент массива — должен иметь имя сотрудника, его возраст и рост. Отсортируйте массив по возрасту сотрудников (по свойству age объектов).

  1. изначально массив не должен быть упорядочен
  2. количество элементов не должно быть менее 5
  3. предусмотреть возможность сортировки по разным свойствам с использованием замыкания (Пример замыкания в JavaScript — https://www.youtube.com/watch?v=8JsteOQxJZc )

Задание 4: Работа с декартовыми координатами

Даны координаты трёх точек в декартовой системе. Определить какая из них ближе к четвёртой точке с координатами x,y. Примечания:

  1. координаты точек генерировать случайным образом
  2. решение должно выглядеть в виде функции
  3. формат хранения координат точек продумать самостоятельно, но не тратить на каждую ось по отдельной глобальной переменной
  4. рассмотреть вариант с трёхмерной системой координат

Задание 5: Работа со строкой

В переменной str находится текст. Написать функцию, возвращающую массив объектов, свойствами которых будут отдельные слова текста, а значениями — частота встречаемости этого слова

Задание 6: Копирование массивов 

Напишите функцию копирования многомерного массива. Примечание: используйте рекурсию.

Задание 7: Замена строк

Написать функцию myReplace(s1, s2, s3), которая будет принимать три строковых аргумента s1, s2, s3 и заменять в первом аргументе s1 все слова, совпадающие со вторым аргументом s2, на третий аргумент s3.

Задание 8: Фильтрация массива

Напишите функцию для фильтрации массива filterArr(inArr,filter), где inArr — входной одномерный массив, filter — функция принимающая по очереди каждый элемент inArr и возвращающая true, если этот элемент доложен входить в результат фильтрации или false, если элемент не должен попадать в результат.

  1. Рассмотрите варианты, когда inArr содержит (а) строки, (б) числа, (в) объекты. filter для разных случаев должна быть соответствующая.
  2. Функция filterArr(inArr,filter) должна возвращать отфильтрованный массив

Задание 9: Извлечение массива свойств

Возьмите массив, подобный массиву users из задания 3. Напишите функцию extractProps(prop), которая по значению аргумента prop вернёт массив всех одноимённых свойств из объектов массива users.

Задание 10: Числа словами

Создайте метод у всех числовых объектов, который бы выводил значение числа от 0 до 99 в виде слов. Например число 45 должно выводиться как «сорок пять». Для выполнения задания используйте свойство prototype.

Задание 11: Алгоритм Дейкстры

Реализовать алгоритм Дейкстры.