WPF-приложение для выполнения трёх задач тестового задания:
- Компрессия/декомпрессия строк
- Потокобезопасный счётчик с разделением чтения/записи
- Стандартизация лог-файлов из двух форматов в единый
Реализованы два алгоритма:
| Операция | Описание | Пример |
|---|---|---|
| Сжатие | Замена последовательных повторяющихся символов на символ + количество |
aaabbcccdde → a3b2c3d2e |
| Декомпрессия | Восстановление строки по сжатому формату | a3b2c3d2e → aaabbcccdde |
Особенности:
- Если буква встречается 1 раз — количество не указывается
- Поддерживаются многозначные числа (например,
a12b3)
Статический класс с переменной count и методами GetCount() / AddToCount(int value).
Требования по синхронизации:
- Читатели работают параллельно, не блокируя друг друга
- Писатели пишут последовательно, никогда одновременно
- Читатели ждут окончания записи
Реализация: ReaderWriterLockSlim
Функциональность приложения:
- Ручное изменение счётчика (+1, +10, сброс)
- Симуляция работы множества клиентов (70% читателей / 30% писателей)
- Детальное логирование всех операций
- Настройка количества клиентов и скорости операций
Формат 1:
10.03.2025 15:14:49.523 INFORMATION Версия программы: '3.4.0.48729'
Формат 2:
2025-03-10 15:14:51.5882| INFO|11|MobileComputer.GetDeviceId| Код устройства: '@MINDEO-M40-D-410244015546'
YYYY-MM-DD HH:MM:SS.fff LEVEL METHOD MESSAGE
Разделитель между полями — табуляция.
Преобразования уровней логирования:
INFORMATION→INFOWARNING→WARNERROR→ERRORDEBUG→DEBUG
Невалидные строки логирования сохраняются в файл problems.txt с указанием номера строки.
ProjectForJob/
├── Task1.xaml/.cs # Компрессия/декомпрессия
├── Task2.xaml/.cs # Потокобезопасный счётчик
├── Task3.xaml/.cs # Стандартизация логов
├── App.xaml/.cs # Точка входа
├── App.config # Конфигурация (.NET 4.8)
└── Properties/ # Ресурсы и настройки
- Открыть
ProjectForJob.slnв Visual Studio - Выбрать конфигурацию
Debug/Release - Нажать
F5илиCtrl+Shift+B→ запуститьProjectForJob.exe
| Вход | Операция | Выход |
|---|---|---|
aaabbcccdde |
Сжатие | a3b2c3d2e |
a3b2c3d2e |
Декомпрессия | aaabbcccdde |
Вход (формат 1):
10.03.2025 15:14:49.523 INFORMATION Версия программы: '3.4.0.48729'
Выход:
2025-03-10 15:14:49.523 INFO DEFAULT Версия программы: '3.4.0.48729'
Вход (формат 2):
2025-03-10 15:14:51.5882| INFO|11|MobileComputer.GetDeviceId| Код устройства: '@MINDEO-M40-D-410244015546'
Выход:
2025-03-10 15:14:51.5882 INFO MobileComputer.GetDeviceId Код устройства: '@MINDEO-M40-D-410244015546'