Бюджет 42$ / 2500
руб
в месяц
Создан: 6 лет назад
Открыт
Описание
Необходимо решить задачу. 
Жизнь космического торговца очень проста: освобождаешь грузовой отсек своего корабля, чтобы погрузить новые торговые модули. Что находится внутри торговых модулей, разбираться некогда, да и слишком сложно это для простого торговца. Торговцы точно знают лишь то, что внутри модуля лежат «единицы экспорта», которые можно продать заинтересовавшимся.
Глава торговой космической гильдии стал замечать, что внутри торгового модуля остается всё больше и больше «единиц экспорта», которые никому не пригодились, а значит, и не принесли прибыли.
Торговцы решили сделать следующую систему:
- покупатели формируют единый заказ на конкретные "единицы экспорта"из торговых модулей. Такой заказ называется "входной заявкой";
- "входных заявок"может быть несколько;
Для описания заявки был выбрал Javascript и ES6 система модулей. Пример торговой заявки:

import {a, b} from './modules/module_a.js';  
import {c as k, d} from './modules/module_b.js';
Глава хочет найти инженера, способного разобраться во внутреннем устройстве товарных модулей. Инжинеру придётся наладить процесс отсеивания "единиц экспорта"из модулей по данным из "входной заявки"до того, как улетит торговый корабль.

Формат ввода
Несколько инженеров подступались к задаче, но так и не смогли ее решить. Вот какие выводы они сделали:
- из торгового модуля нив коем случае нельзя убирать «единицу экспорт», которая необходима кому-либо в заявке ;
- «единицы экспорта» внутри одного торгового модуля могут быть связаны так, что, убрав одну единицу, модуль обесценивается;
- внутри модуля могут быть переиспользованы «единицы экспорта» из других модулей, однако циклических зависимостей нет;
- гарантируется, что торговые модули состоят только из «единиц экспорта», все единицы именованы, а их имя уникально в рамках одного модуля;
- "единица экспорта"может представлять из себя: констату, функцию, объект, массив, строку, шаблонную строку.
Опираясь на выводы инженеров, вам необходимо разработать технологию, позволяющую максимально облегчать торговые модули, не обесценивая их.
Необходимо реализовать функцию, принимающую на вход: Информацию о заявках, в формате объекта, где:
- ключ – абсолютный путь до модуля от корня,
- значение – строковое представление кода, Второй аргумент функции – массив с абсолютными путями до "входных заявок"торговцев.
В результате выполнения функции исходный код должен измениться таким образом, что остаться должны только используемые экспорты. Менять при этом аргументы import и делать полный dead code elimination в исходном коде не требуется. Главное – удалить неиспользуемые единицы экспорта.
Пример: Первый аргумент.

{  
  "/root/omegaTradersCluster/firstTrader.js":  
    "export const first = () => 12;nnexport const second = {a: 12};n",  
  "/root/entrypoint.js":  
    "import {first} from "./omegaTradersCluster/firstTrader.js";n"  
}
Второй аргумент.

["/root/entrypoint.js"]
Заметим, что second не был использован и его код может быть удален.

Формат вывода
Ответ:
{  
  "/root/omegaTradersCluster/firstTrader.js":  
        "export const first = () => 12;n",  
  "/root/entrypoint.js":  
        "import { first } from "./omegaTradersCluster/firstTrader.js";n"  
}
Для быстрого освоение со структорой AST, рекомендуется использовать интерактивный сайт: astexplorer.net/#/gist/48...

Примечания
Файл с решением оформите по шаблону::

// обязательно используйте этот парсер для построения дерева  
const parser = require('@babel/parser');  
// для обхода дерева можете использовать данную библиотеку  
// или написать свой обход  
// подробнее тут: babeljs.io/docs/en/babel-...  
const traverse = require('@babel/traverse').default;  
// обязательно используйте генератор для формирования ответа  
const generate = require('@babel/generator').default;  
 
module.exports = function (filesInfo, entrypoints) {  
    const result = {};  
 
    for (const [filePath, fileText] of Object.entries(filesInfo)) {  
        // подробнее babeljs.io/docs/en/babel-...  
        // однако дополнительных опций не требуется  
        const ast = parser.parse(fileText, {  
            sourceType: 'module',  
        });  
 
        // какие-то манипуляции с деревом исходного файла  
 
        // генерируем новый код из дерева, не добавляйте дополнительных опций  
        // подробнее babeljs.io/docs/en/babel-...  
        const new_code = generate(ast).code;  
 
        result[filePath] = new_code;  
    }  
 
    return result;  
}
Категория
Источник: fl.ru

Похожие проекты

safe 
0 2
Необходимо разработать систему, которая: Подключается к API Diagnocat и iDent (через токены доступа). Получает данные о пациенте, результатах диагностики, снимках и назначениях. Автоматически формирует структурированный отчет по шаблону (включая врачей, этапы лечения, стоимость и описание процедур).......
 
0 0
Необходимо связать БД 1C:ERP с БД Outlook, MS Access, Битрикс24. Например при вводе нового сотрудника в 1С:ERP он должен автоматически появляться в вышеперечисленных БД....
1 месяц назад
 
0 1
Требуется реализация отчёта на кастомизированной 1С:УПП 1. 2, ТЗ и контрольный пример во вложении, 80% кода должно быть покрыто модульными тестами....
2 месяца назад
$7
0 1
Мне нужно копировать мой текст и вставлять в одну группу ВК с открытой стеной для публикации рекламы. Задача скрипта/сервиса/программы - примерно каждые 10 секунд брать мой текст и вставлять в эту группу. Я пробовал через одну программу, которая записывает действия мышки и потом повторяет, но она как-то......
4 месяца назад
safe 
0 0
Написать прошивку для A94B114, используя 2 подобные рабочие прошивки. Все файлы есть....
$21
0 2
Нужно разархивировать файл архив. ujems, есть распаковщик, но выдает ошибку. Прислать пруфы(скрины)....
6 месяцев назад
safe 
0 1
Входные: Имеется скрипт по обработке email писем и добавление их в систему Redmine   Проблема: Система обработки этих писем написана некорректная и негибкая    Задача: Переписать логику обработки входящих писем, чтобы исключить их потерю при незначительных отклонениях от ожидаемой структуры....
$37
0 1
- В обязанности сотрудника входит поддержание мобильного приложения системы автоматизации бизнеса. - Работа сдельная: задачи выдаются на оценку, далее после согласования передаются на реализацию. - Заключаем договор и NDA (соглашение о неразглашении)....
$71
0 0
Информация о проекте: Проект включает в себя React Native приложение с Expo внутри которого находится webview с сайтом На устройствах с ОС IOS проблема с воспроизведением видео....
6 месяцев назад
safe 
0 0
Разрабатываю десктопные программы на языке Java,  а так же Java + SQL....
 
0 6
  1. Чтобы можно было писать описание события (без заголовка) - превью в списке берется N количества букв с начала. (в списке писать дату события и сколько осталось до него) . Выставление даты и времени напоминания и ИНТЕРВАЛА ПОВТОРА ОТ 1 МИНУТЫ! Выставлять количество повторов, далее напоминания прекращаются.......
safe 
0 4
Сайт arg2028t. beget. tech/. Нужно сделать вот такой калькулятор. airprint. by/outdoor/wide-format. и еще некоторые доработки....
safe 
0 6
Краткое описание: Мы ищем исполнителя для тестирования функционала мобильного приложения на платформе Android. Задача включает проверку основных функций приложения, таких как работа комнаты, передача видео, звука и чата, а также создание подробной отчетности о найденных ошибках.   Требования к исполнителю:......
safe 
0 12
Разработка чат-бота под ваши нужды....
$143
0 0
Oпpocы (1008pyб/чaс) Заходитe на сaйт: gonsù....
9 месяцев назад
 
0 4
Требуется создать скрипт для premiere pro. Данная суть скрипта: в выделеном бине нужно что бы автоматически проставлялся in out ровно по серидине файла так что бы выделенная область была длиной 3 секунды. И требуется кнопка что бы работало через окно expressions. Проблема текущего в том что он не работает......
 
0 2
Нужно создать приложения под гемблинг/беттинг, на котлин. Приложение должно работать Firebase. Детали вышлю при обсуждение....
$21
0 4
Нужно разархивировать файл archive. ujems, есть распаковщик, но выдает ошибку. Прислать пруфы  ....
1 год назад
safe 
0 3
Разработать впн сервис ( Приложения на ios и android + сайт для оплаты подписки). Настройка Серверов. Оплата по договоренности. Работаем черед безопасную сделку....
1 год назад
Смотреть все