Мои решения алгоритмических задач с CodeWars, LeetCode и собеседований. Проект настроен для эффективного решения задач с поддержкой TypeScript, автотестов и бенчмарков.
task-solution/
├── src/
│ ├── tasks/
│ │ ├── 2021/ # Задачи 2021 года
│ │ ├── 2023/ # Задачи 2023 года
│ │ └── 2025/ # Задачи 2025 года
│ ├── utils/
│ │ ├── tests.ts # Универсальные хелперы для тестирования
│ │ ├── logger.ts # Утилиты логирования (deprecated)
│ │ └── arrayToBinaryTree.ts # Конвертация массивов в бинарные деревья
│ ├── index.ts # Точка входа для быстрых экспериментов
│ └── index.spec.ts # Тесты для быстрых экспериментов
├── .gitignore
├── .prettierrc.json
├── eslint.config.js
├── package.json
├── README.md
├── tsconfig.json
└── vitest.config.ts
# Клонировать репозиторий
git clone https://github.com/MarkMelior/task-solution.git
cd task-solution
# Установить зависимости
yarn install# Быстрые эксперименты
yarn start # Запустить index.ts один раз
yarn dev # Запустить с автоперезагрузкой (watch mode)
# Тестирование
yarn test # Запустить тесты из index.spec.ts
yarn test:all # Запустить все тесты (кроме index.spec.ts)
# Качество кода
yarn lint # Проверить код линтером
yarn lint:fix # Автоматически исправить ошибки
yarn format # Отформатировать код
# Сборка
yarn build # Скомпилировать TypeScript → JavaScriptДля быстрой отладки и проверки идей используйте index.ts:
// src/index.ts
function fibonacci(n: number): number {
if (n <= 1) return n;
let a = 0, b = 1;
for (let i = 2; i <= n; i++) {
[a, b] = [b, a + b];
}
return b;
}
console.log('Fib(10):', fibonacci(10)); // 55yarn dev # Автоматически перезапускается при измененияхДля серьезной работы создавайте .spec.ts файлы с полноценными тестами:
// src/tasks/2025/Interview/2.ts
export const checkSimple = (str: string) => {
const cleaned = str.split(' ').join('').toLowerCase();
return cleaned.split('').reverse().join('') === cleaned;
};
export const checkFast = (str: string) => {
const s = str.toLowerCase();
let left = 0, right = s.length - 1;
while (left < right) {
if (s[left] === ' ') { left++; continue; }
if (s[right] === ' ') { right--; continue; }
if (s[left] !== s[right]) return false;
left++; right--;
}
return true;
};// src/tasks/2025/Interview/tests/2.spec.ts
import { tFn } from '@utils/tests';
import { checkSimple, checkFast } from '../2';
tFn(
[checkSimple, checkFast],
[
{
expected: true,
input: 'А Роза упала на лапу Азора',
},
{
expected: false,
input: 'Hello World',
},
],
{ showPerformance: true }
);Результат:
📈 checkSimple: 37.03x (size: 1000x)
📈 checkFast: 0.53x (size: 1000x) <-- в 70 раз быстрее!
✓ checkSimple (2)
✓ "А Роза упала на лапу Азора" → true
✓ "Hello World" → false
✓ checkFast (2)
✓ "А Роза упала на лапу Азора" → true
✓ "Hello World" → false
Тестирует несколько реализаций одной задачи без дублирования кода:
import { tFn } from '@utils/tests';
tFn(
'Task Name',
[solution1, solution2],
[
{input: input1, expected: expected1},
{input: input2, expected: expected2},
],
{ showPerformance: true } // Отображает результаты производительности!
);Удобные импорты без ../../:
import { tFn } from '@utils/tests';
import { arrayToBinaryTree } from '@utils/arrayToBinaryTree';- Target: ES2022
- Module: ESNext
- moduleResolution: bundler
- Strict mode: включен
- Path mapping:
@utils/*,@tasks/*,@/*
- ESLint 9 (новый flat config)
- TypeScript ESLint
- Prettier интеграция
- Автофикс:
yarn lint:fix
- Быстрый test runner
- Watch mode из коробки
- Совместимость с Jest API
- Поддержка TypeScript без конфигурации
Не стесняйтесь открывать Issues или Pull Requests с улучшениями!
MIT
Made with ❤️ and TypeScript
Happy Coding! 🎉