Skip to content

Repository files navigation

Тестовое задание C#

Описание проекта

WPF-приложение для выполнения трёх задач тестового задания:

  1. Компрессия/декомпрессия строк
  2. Потокобезопасный счётчик с разделением чтения/записи
  3. Стандартизация лог-файлов из двух форматов в единый

Задача 1: Компрессия строк

Реализованы два алгоритма:

Операция Описание Пример
Сжатие Замена последовательных повторяющихся символов на символ + количество aaabbcccddea3b2c3d2e
Декомпрессия Восстановление строки по сжатому формату a3b2c3d2eaaabbcccdde

Особенности:

  • Если буква встречается 1 раз — количество не указывается
  • Поддерживаются многозначные числа (например, a12b3)

Задача 2: Потокобезопасный счётчик

Статический класс с переменной count и методами GetCount() / AddToCount(int value).

Требования по синхронизации:

  • Читатели работают параллельно, не блокируя друг друга
  • Писатели пишут последовательно, никогда одновременно
  • Читатели ждут окончания записи

Реализация: ReaderWriterLockSlim

Функциональность приложения:

  • Ручное изменение счётчика (+1, +10, сброс)
  • Симуляция работы множества клиентов (70% читателей / 30% писателей)
  • Детальное логирование всех операций
  • Настройка количества клиентов и скорости операций

Задача 3: Стандартизация логов

Входные форматы

Формат 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

Разделитель между полями — табуляция.

Преобразования уровней логирования:

  • INFORMATIONINFO
  • WARNINGWARN
  • ERRORERROR
  • DEBUGDEBUG

Обработка ошибок

Невалидные строки логирования сохраняются в файл problems.txt с указанием номера строки.

Структура проекта

ProjectForJob/
├── Task1.xaml/.cs          # Компрессия/декомпрессия
├── Task2.xaml/.cs          # Потокобезопасный счётчик
├── Task3.xaml/.cs          # Стандартизация логов
├── App.xaml/.cs            # Точка входа
├── App.config              # Конфигурация (.NET 4.8)
└── Properties/             # Ресурсы и настройки

Запуск

  1. Открыть ProjectForJob.sln в Visual Studio
  2. Выбрать конфигурацию Debug / Release
  3. Нажать F5 или Ctrl+Shift+B → запустить ProjectForJob.exe

Примеры работы

Задача 1

Вход Операция Выход
aaabbcccdde Сжатие a3b2c3d2e
a3b2c3d2e Декомпрессия aaabbcccdde

Задача 3

Вход (формат 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'

About

Тестовое задание

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages