Публичная задачка из бесплатной социальной сети твиттер точка ком от Владислава Козули - Исходный тред (осторожно там есть спойлеры решения)
Да кто такой, этот ваш Козуля?
Сижу на дейли, случайно открываю пост Владислава. Ощущаю как олипмиадное альетэго вырывается из груди и дальше всё как в тумане.....
Придумываю решение, потом придумываю тексты по которым решение не проходит, потому думаю дальше. Через час удовлетворяюсь всем зеленым тестам и думаю ну не выкидывать же наработанное, вдруг кому пригодится.
Добро пожаловать 🖖
Написать метод, который принимает список транзакий и баланс пользователя
type Transaction = {
id: number;
orderId: number;
amount: number;
txType: 'Bet' | 'Win';
}- Вернуть произвольную структуру, где каждая транзакция помечена как валидная или невалиданая.
- Транзакции обрабатываются от меньшего id к большему.
- Bet уменьшает баланс на сумму в amount, Win увеличивает.
- Если баланс ушел в минус, транзакция считается невалидной.
- Если транзакция не валидна, последующие транзакции с тем же orderId тоже считаются невалидными.
- Если id транзакции повторяется, такая транзакция тоже не валидна, но остальные с тем же orderId должен быть обработаны.
Владислав - человек занятой, поэтому я сделал этот шаблон с CI проверкой тестов за него. И тесты написал. (Правда не факт что они верные 😁 Если вдруг чего не учел – дополняйте).
И так, как решать эту задачку:
- Форкаете и клонируете этот репозиторий
- Устанавливаете зависимости
npm iorpnpm i - Редактируете код решения в файле
src/tx-validate.ts - Проверяете что ваш код вообще собирается
npm run build(или в режиме watchnpm run dev) - Запускаете тесты
npm test(или в режиме watchnpm run test:watch) - Как только все тесты проходят, оформляете pull request в этот репозиторий в ветку
main - Github Actions запустит тесты и проверит ваше решение
- Тесты будут дополняться по мере поступления решений 😈
- Помимо самих тестов будут прогоняться eslint
- После PR решения, предлагаю пройтись во всем остальным PR и похвалить/покритиковать/повзламывать чужие решения
- Предлагайте свои варианты тестов, если считаете что текущие не покрывают все случаи
- Если у вас остались вопросы, или есть предложения пишите мне в телеграм @isuvorov
P.S. Не публичная оферта. Прохождение задачки не гарантирует трудоустройство.