Skip to content

lepesevichnikita/test_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

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

Формулировка

Перевод числа в цифровой записи в строковую. Например 134345 будет "сто тридцать четыре тысячи триста сорок пять". * Учесть склонения - разница в окончаниях (к примеру, две и два).

  • Алгоритм должен работать для сколько угодно большого числа, соответственно, значения степеней - миллион, тысяча, миллиад и т.д. - должны браться из справочника, к примеру, текстового файла.

  • Обязательно создать Data Driven Test (пользователь должен иметь возможность ввести множество наборов 1.число 2.правильный эталонный результат, тест самостоятельно проверяет все наборы и говорит, что неверное), который доказывает, что Ваш алгоритм работает правильно. Использовать JUnit.

  • По возможности, применить ООП.

Реализация

Алгоритм

  • Число состоит из групп цифр, заключенных в порядки (далее - "тройки")

  • Каждый порядок представляет собой показатель степени числа делённый целочисленно на 3

  • Падеж и число (множественное или единственное) каждой тройки зависят от последней цифры в ней, а род - от порядка

  • Цифры в данном проекте представляют собой разряды нулевого порядка, возможно требуется рефакторинг

Примеры

  • 123 - содержит одну тройку, которая имеет порядок равный 0, родительный падеж, единственное число и мужской род

  • 12341 - 2 тройки:

    • 12, порядок равен 1, падеж родительный, множественное число, женский род
    • 341, порядок равен 0, падеж именительный, иденственное число, мужской род

Архитектура

  • Цифры представлены классом Digit. Они хранят последовательность, отражующую их в цифровом представлении, номер разряда в тройке, число и падеж, требуемые для построения словесной формы порядка, а также формы словесного представления для разных родов

  • Порядки представлены классом NamedOrder. Они хранят свой номер, род, и корень словесного представления, а также формы в зависимости от падежа и числа, если для их формирования не определен алгоритм

  • Цифры и порядки хранятся в в файлах digits.yaml и named_orders.yaml

  • Доступ к числам и порядкам предоставляется посредством DefaultDigitsRepository и DefaultNamedOrdersRepository, иницилизациюю которых целесообразно посредством вызова метода create() у экземпляров классов DefaultDigitsRepositoryFacotry и DefaultNamedOrdersRepositoryFactory соответственно

  • Тройки представлены классом Triple. В них хранится не более 3х цифр и порядок. Родом тройки является падеж порядка, а число и падеж представляют собой оные у последней цифры

  • Для построения тройки из последовательности без учёта порядка, содержащей не боллее трёх чисел используется TripleFactory

  • Полное представление числа хранится в классе TripleSequence, он хранит список из троек

  • Формирование последовательностей числа обеспечивает класс TripleSequenceFactory, который после разбиения числа на тройки, присваивает этим тройкам соответствующий порядок

  • Класс DefaultTripleAsStringRepresenter отвечает за представление тройки в словесном представлении, формирование словесного представления тройки происходит путём формирования словесного представления каждой из цифрвы с учётом её номера в тройке и рода порядка, и последующего формирования словесного представления порядка, в зависимости от числа и падежа последней цифры в тройке

  • Класс Suffix хранит окончание, род, число и падеж (которые для удобства объединены в класс Declension), которые в дальнейшем используются для формирования словесного представления порядка в DefaultNamedOrdersAsStringRepresenter

  • Все суффиксы хранятся в файле suffixes.yaml, а доступ к ним предоставляет класс DefaultSuffixesRepository, который лучше инициализировать посредством вызова метода create() у экземпляра класса DefaultSuffixesFactory

  • За формирование словесного представления цифры отвечает класс DefaultDigitsAsStringRepresenter

  • Построение словесной формы всего числа происходит в классе DefaultTripleSequenceAsStringRepresenter, когда последовательно формируются словесные представления каждой из троек

  • Файлы-словари digits.yaml, named_orders.yaml и suffixes.yaml хранятся в папке src/main/sources для основной программы и в src/test/sources для тестов соответственно

Примечание

Старался использовать слабую связанность, поэтому такое большое колличество интерфейсов. Скорее всего, использование инструмента для внедрения зависимостей такого, как, например, Spring решило бы проблему большого числа классов-построителей (реализации класса Builder).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages