Todos los desafíos
Intermedio 0 resueltos 0% de aceptación

Aritmética Exacta de Fracciones

Realiza operaciones con fracciones y devuelve una fracción reducida.

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

Ejemplo 1
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.

Ejemplo 2
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.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.