Лабораторная №1 — задание 1.2D #
Используйте шаблон проекта
Задание выполняется в репозитории, созданном из шаблона: Шаблон проекта на C# / .NET
Учитывайте Требования к коду на C#
Нужно добавить в ExampleLib/ новый метод согласно выбранному варианту задания.
Требования #
Требования:
- Нужно добавить функцию в класс
TextUtilлибо в новый класс; - Нужно покрыть реализацию модульными тестами;
- Функции должны использовать посимвольную обработку строк;
- Следует стремиться к тому, чтобы входная строка обрабатывалась за один проход;
- Нельзя использовать готовые библиотечные функции, решающие аналогичную задачу.
Допущения:
- Можно использовать тип
charлибоRuneдля представления символа — другими словами, поддерживать Unicode-символы за пределами BMP не требуется - Можно использовать или не использовать конечные автоматы
Варианты #
- Напишите функцию
int ParseRoman(string text)для разбора чисел в римской системе счисления- Примеры:
ParseRoman("VII") → 7,ParseRoman("MMXXV") → 2025 - Поддерживайте следующие римские цифры: I=1, V=5, X=10, L=50, C=100, D=500, M=1000
- Поддерживайте перевод чисел от 0 до 3000
- Функция должна бросать исключение, если строка не является правильно записанным римским числом на отрезке от 0 до 3000
- Примеры:
- Напишите функцию
string FormatRoman(int value)для форматирования чисел в римской системе счисления- Примеры:
FormatRoman(7) → "VII",FormatRoman(2025) → "MMXXV" - Поддерживайте следующие римские цифры: I=1, V=5, X=10, L=50, C=100, D=500, M=1000
- Поддерживайте форматирование чисел от 0 до 3000
- Функция должна бросать исключение, если число не входит в диапазон от 0 до 3000
- Примеры:
- Напишите функцию
string FormatEasternArabic(int value)для форматирования чисел с помощью традиционных арабских цифр- Пример:
FormatEasternArabic(2025) → "٢٠٢٥" - Пример:
FormatEasternArabic(12500) → "١٢٥٠٠" - Поддерживайте весь диапазон целых чисел от наименьшего отрицательного
int.MinValue(-2147483648) до наибольшего положительногоint.MaxValue(2147483647) - Учтите, что в C# для всех платформ тип
int— это 32-битное целое со знаком
- Пример:
- Напишите функцию
int ParseEasternArabic(string text)для чтения чисел, записанных с помощью традиционных арабских цифр- Пример:
ParseEasternArabic("٢٠٢٥") → 2025 - Пример:
ParseEasternArabic("١٢٥٠٠") → 12500 - Функция должна бросать исключение, если число не входит в диапазон от
int.MinValue(-2147483648) доint.MaxValue(2147483647) - Учтите, что в C# для всех платформ тип
int— это 32-битное целое со знаком
- Пример:
- Напишите функцию
RgbColor ParseCssRbgColor(string text)для разбора CSS-строк цветов, заданных в модели RGB- Структура
RgbColorдолжна иметь три свойства типаbyte, соответствующие компонентам цвета:Red,GreenиBlue - Функция должна разбирать цвета, заданные в HEX-формате с помощью символа «решётка» и 3 или 6 цифр в шестнадцатеричной системе счисления
- Примеры допустимых цветов:
#00a400,#FF00AA,#fff - Функция должна бросать исключение, если переданная строка не является допустимым цветом в HEX-формате
- Структура
- Напишите функцию
string FormatLowerCamelCase(string identifier)для форматирования идентификатора в нотации lowerCamelCase- Допустимый идентификатор содержит только буквы английского алфавита (
a-z,A-Z), цифры0-9и символы подчёркивания_, но начинается всегда с буквы - Функция должна бросать исключение, если переданная строка не является допустимым идентификатором
- В результирующей строке первое слово начинается с буквы в нижнем регистре, а каждое последующее — с буквы в верхнем регистре, при этом символы подчёркивания не сохраняются
- Воспринимайте подчёркивания как разделители слов:
FormatLowerCamelCase("sneak_case") → "sneakCase" - Сохраняйте исходную нотацию Camel Case:
FormatLowerCamelCase("Can_process_rgbColor") → "canProcessRbgColor" - Сохраняйте аббревиатуры
- Считайте словом только последовательность букв
- Допустимый идентификатор содержит только буквы английского алфавита (
- Напишите функцию
string ParseUrlEncoded(string text)для разбора текста, закодированного методом URL encoding (percent-encoding)- Функция должна декодировать закодированные символы. Пример:
ParseUrlEncoded("%D0%93%D0%B4%D0%B5%3F") → "Где?" - Функция должна принимать символы, которые ошибочно не были закодированы. Пример:
ParseUrlEncoded("Где?") → "Где?" - Функция должна ожидать, что после символа
%(«процент») следуют две шестнадцатеричных цифры, и бросать исключение, когда это ожидание нарушено
- Функция должна декодировать закодированные символы. Пример:
Уточнения #
Традиционные арабские цифры #
В вашем редакторе кода вставка арабских цифр может приводить к изменению направления записи с LTR (left-to-right) на RTL (right-to-left). Адаптируйтесь к этому либо просто поменяйте вариант задания.
В восточных арабских странах для записи чисел могут использоваться традиционные цифры, начертание которых отличается от привычных для европейских. С точки зрения Unicode они являются отдельными символами.
Таблица традиционных арабских цифр:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| ٠ | ١ | ٢ | ٣ | ٤ | ٥ | ٦ | ٧ | ٨ | ٩ |