Задача для JS
Бюджет
42$
/ 2500
руб
в месяц
Создан: 5 лет назад
Открыт
- Описание
- Необходимо решить задачу.
Жизнь космического торговца очень проста: освобождаешь грузовой отсек своего корабля, чтобы погрузить новые торговые модули. Что находится внутри торговых модулей, разбираться некогда, да и слишком сложно это для простого торговца. Торговцы точно знают лишь то, что внутри модуля лежат «единицы экспорта», которые можно продать заинтересовавшимся.
Глава торговой космической гильдии стал замечать, что внутри торгового модуля остается всё больше и больше «единиц экспорта», которые никому не пригодились, а значит, и не принесли прибыли.
Торговцы решили сделать следующую систему:
- покупатели формируют единый заказ на конкретные "единицы экспорта"из торговых модулей. Такой заказ называется "входной заявкой";
- "входных заявок"может быть несколько;
Для описания заявки был выбрал 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
Похожие проекты
$21
0
1
Нужно разархивировать файл archive. ujems, есть распаковщик, но выдает ошибку. Прислать пруфы ....
1 неделя назад
0
0
Разработать впн сервис ( Приложения на ios и android + сайт для оплаты подписки). Настройка Серверов. Оплата по договоренности. Работаем черед безопасную сделку....
2 недели назад
$357
0
0
$21
0
3
Нужно разархивировать файл archive. ujems, есть распаковщик, но выдает ошибку. Прислать пруфы ....
1 месяц назад
$214
0
1
Здравствуйте, у кого есть проект по продвижению chaturbate? Или кто-то делает?...
1 месяц назад
$21
0
0
Заказные доработки функционирующих учётно-управленческих систем на производственных предприятиях. Навыки программирования в MS SQL, VBScript, 1С, знание принципов ООП....
1 месяц назад
$36
0
2
Нужно опубликовать мобильное приложение для Android в Гугл маркет с аккаунта разработчика Гугл плей консоль, созданного ДО Ноября 2023. В рамках проекта, необходимо прислать приглашение мне на почту, чтобы я загрузила приложение и отправила его на модерацию, с сохранением безвременного доступа к моему......
1 месяц назад
$71
0
3
Сделать игру для яндекс игр, настроить рекламу в игре и помочь с публикацией игры в платформе яндекс игры. Игра - карточная игра Пасьянс Паук (косынка) Игровой процесс: Тип игры: Пасьянс Паук. Количество мастей: Игрок может выбирать количество мастей: 1, 2, 3 или 4. Подсказки: Автоматические подсказки,......
2 месяца назад
$14
0
2
Без акцента на идею, необходимо создать мобильное приложение iOs и Android, с возможностью трансляции основной информации в миниапп Tg. Интеграция с платежной системой, внутренний кошелек, две валюты. В зависимости от гео, возможность конвертации валют ч/з сервер. На старте, сервер скорее облачный. Двухфакторная......
2 месяца назад
$1200
0
0
Необходимо перевести действующую БД с версии 77 на 8 (переписать конфигурацию, настроить обработки для переноса данных). Не типовая конфигурация по учету пенсионеров в ГУ РК....
2 месяца назад
$22
9
3
требуется готовую онлайн анкету на django по приему на работу перенести в whatsapp, telegram и viber. Нужно чтобы кандидат мог с удобством заполнять анкету с телефона, а все заполненные им данные по всем позициям автоматически загружались в нашу базу данных. В нашей базе будет создаваться резюме кандидата......
2 месяца назад
$714
0
1
Описание задачи: Необходимо разработать serverless функцию на базе NestJS и TypeScript для автоматизированной обработки видеофайлов, загружаемых в Yandex Cloud Storage. Функция должна выполнять конвертацию видео в формат, поддерживаемый основными веб-браузерами, с последующим сжатием до оптимального......
2 месяца назад
$44
49
1
Трипланарная транспортная задача (отправители - транспорт - получатели) генерация исходных данных трехэтапное решение 1....
2 месяца назад
28
1
В наличии массив кадастровых номеров (КН), необходимо путем запроса на ПКК определить примерные географические координаты каждого объекта из массива КН (ОКС, ЗУ), вывести в результирующий файл эти ко-ты и ряд сопутствующих данных по этому КН....
2 месяца назад
44
7
Необходимо разработать бек и фронт мини-сервиса таким образом, чтоб его можно было развернуть внутри другого проекта....
2 месяца назад
$1111
23
0
Стоит на Бизнесе для своих нужд на простеньком базовом шаблоне, складываю туда контент потихоньку. Нужно начинать приводить в соответствие что бы публика сразу не убегала, а как то цеплялась, да и продвигать не торопясь. Шаблон где порвался от вставки баннеров подправить, для мобилок может сверстать.......
2 месяца назад
$33
31
2
$22
55
0
Парсер для сайта stockx. com на питоне (selenium/pyppeteer). Необходим следующий функционал: 1. На главной странице с поиском по ключевым словам найти первый результат из поиска (ссылку на страницу товара) ....
2 месяца назад
36
0
Требуется написать софт , который будет делать рассылку по личным сообщениям на площадке Ebay Kleinanzeigen по заранее спаршенным обьявлениям....
2 месяца назад
83
4
37
0
Требуется написать софт , который будет делать рассылку по личным сообщениям на площадке Ebay Kleinanzeigen по заранее спаршенным обьявлениям....
2 месяца назад
Похожая удалённая работа
- Удаленная работа для веб-программиста
- Удаленная работа для разработчика баз данных
- Удаленная работа для прикладного программиста
- Удаленная работа для системного программиста
- Удаленная работа для разработчика игр
- Удаленная работа для разработчика мобильных приложений
- Удаленная работа для тестировщика ПО
- Удаленная работа для 1С программиста
- Удаленная работа для разработчика встраиваемых систем
- Удаленная работа для разработчика CRM и ERP