В этом репозитории содержатся программы-решения тестовых заданий для разных собеседований.
Задача fraction
Даны два числа: a и b. Найдите значение числа a/b, записанного в k-ичной системе счисления. Если a/b — периодическая дробь, то период следует заключить в скобки.
Пример входных данных:
1 2 8
1 12 10
Пример выходных данных:
0.4
0.08(3)
Поддерживаются все системы счисления с двоичной по шестнадцатеричную включительно.
Функция '_convert_integer_to_string' переводит целое число в строку с представлением этого числа в нужной системе счисления.
Функция '_convert_float_part_to_string' переводит дробную часть числа, заданного числителем и знаменателем в строку с дробью, записанной в нужной системе счисления.
Задача polynom
Дано выражение, содержащее скобки, операции сложения, вычитания, умножения, возведения в константную степень и одну переменную, например: (x - 5)(2x^3 + x(x^2 - 9)).
Представьте это выражение в развёрнутом виде, например: 3x^4 - 15x^3 - 9x^2 + 45x
Используется рекурсия.
Функция '_parse_one_summand' вычленяет из строки, начиная с текущей позиции, одно слагаемое вида <ЗНАК><ЧИСЛО><Х><СТЕПЕНЬ>. Возвращает словарь {степень Х:множитель Х} и позицию в строке за этим слагаемым.
Функция '_parse_factor' идет по строке и складывает все найденные слагаемые в свой словарь вида {степень Х:множитель Х}. Натыкаясь на умножение или возведение в степерь текущего слагаемого, функция вызывает сама себя еще раз чтобы вызванная функция сформировала полностью словарь с многочленом, на который нужно умножить/возвести в степень текущее слагаемое.
Функции '_add', '_multiply' и '_power' складывают, умножают и возводят в степень соответственно один операнд-многочлен на другой операнд-многочлен. Функция '_power' умеет умножать лишь на константную степень.
Недостаток текущей реализации: функция '_power' не оптимальна и делает N умножений, а можно бы делать это с помощью log2(N) умножений.