Su tarea es, dada x
, salida 2*x
. Fácil, ¿verdad? Pero hay una trampa: x
se dará como una fracción continua (posiblemente infinita) , y la salida debe ser una fracción continua. Se garantiza que la entrada sea un número algebraico real cuyo grado sea como máximo 2.
Entrada : La fracción continua de x
. Esto se divide en 3 partes: la parte entera, el prefijo y la parte repetitiva. La parte entera consiste en un solo entero. El prefijo y la parte repetitiva son matrices (posiblemente vacías) de enteros positivos que describen el prefijo y la parte repetitiva de la fracción continua. Por ejemplo, la entrada (3, [1], [2, 4])
representa la fracción continua [3; 1, 2, 4, 2, 4, ...]
.
Si la parte que se repite está vacía, eso indica un número racional. Por ejemplo, (3, [1, 2], [])
representa [3; 1, 2] = 11/3
. Debe aceptar ambas formas de un número racional (es decir (3, [1, 1, 1], [])
, que [3; 1, 1, 1] = 11/3
también debe ser una entrada válida).
Salida : genera la fracción continua del doble de la entrada, en el mismo formato que la entrada. Si el resultado es racional, puede generar cualquiera de las formas de la fracción continua. Mientras la respuesta sea equivalente a la respuesta correcta, está bien; no es necesaria la "compresión", por lo que la parte infinita podría estar "desenrollada" un poco (por ejemplo, [1; 4, 2, 3, 2, 3...]
puede estar escrita (1, [4], [2, 3])
o (1, [4, 2, 3], [2, 3])
). Todas las respuestas deben ser exactas.
Casos de prueba : la columna de formulario exacto se proporciona por conveniencia.
Input Exact Form Output
(0, [] []) 0 (0, [] []) or (-1, [1], [])
(-5, [1, 1], []) -4.5 (-9, [], []) or (-10, [1], [])
(3, [1, 2], []) 11/3 (7, [3], []) or (7, [2, 1], [])
(1, [], [2]) sqrt(2) (2, [], [1, 4])
(-1, [2], [2, 1]) -1/sqrt(3) (-2, [1, 5], [2, 6])
Y finalmente un caso de prueba un poco más grande para asegurar la precisión: (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])
.
¡El código más corto gana!
Sugerencia : puede realizar operaciones aritméticas de una manera bastante directa en fracciones continuas como se describe aquí . Duplicar una fracción continua es solo un caso especial de este algoritmo (aunque la parte difícil puede ser encontrar cuándo se repite la fracción continua).
Sqrt[2]
.
[3; 1, 1, 1]
estaría (3, [1, 1, 1], [])
en el formato de entrada que estamos usando, por lo que la pregunta probablemente debería mencionarlo en ese formato (en el tercer párrafo), solo para garantizar la claridad.
(-2, [1, 5, 2], [6, 2])
sería una salida aceptable para la entrada (-1, [2], [2, 1])
? ¿Qué tal (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?