Problema
Ver original (inglés)Representa una fracción como [numerador, denominador]. Aplica la operación entre la primera y la segunda: sumar, restar, multiplicar o dividir. Para valor absoluto, usa solo la primera. Para potencia, eleva la primera al exponente entero e ignora la segunda. Devuelve el resultado en su mínima expresión con denominador positivo. Normaliza el cero como [0, 1]. Todas las divisiones y potencias negativas en las entradas válidas están definidas.
Implementa rational_arithmetic(operation, first, second, exponent).
Entrada
operation: El nombre de la operación.
first: Dos enteros que representan la primera fracción.
second: Dos enteros que representan la segunda fracción; usa [0, 1] cuando no se utilice.
exponent: El exponente para la potencia; usa 0 para las demás operaciones.
Salida
Devuelve [numerador, denominador] en forma reducida y con denominador positivo.
Restricciones
operation es add, subtract, multiply, divide, absolute o power. Ambos componentes de la fracción tienen magnitud como máximo 100; los denominadores son distintos de cero. −6 ≤ exponent ≤ 6. Para divide, el numerador de second es distinto de cero. Para una potencia negativa, el numerador de first es distinto de cero. La potencia 0 devuelve [1, 1], incluyendo 0⁰ según la convención de este ejercicio. Los valores caben en un entero con signo de 64 bits.
Ejemplos
Entrada:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"
Salida esperada:
expected = [5, 12]
Entrada:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";
Salida esperada:
std::vector<long long> expected = {5, 12};
Entrada:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";
Salida esperada:
long[] expected = new long[] {5, 12};
Explicación
1/6 + 1/4 = 2/12 + 3/12 = 5/12, ya está reducido.
Entrada:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"
Salida esperada:
expected = [9, 4]
Entrada:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";
Salida esperada:
std::vector<long long> expected = {9, 4};
Entrada:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";
Salida esperada:
long[] expected = new long[] {9, 4};
Explicación
Un exponente negativo invierte la fracción: (2/3)⁻² = (3/2)² = 9/4.
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.