Votre tâche est, donnée x
, sortie 2*x
. Facile à droite!? Mais il y a un hic: x
sera donné comme une fraction continue (éventuellement infinie) , et la sortie doit être une fraction continue. L'entrée est garantie comme un vrai nombre algébrique dont le degré est au plus 2.
Entrée : la fraction continue de x
. Il est divisé en 3 parties: la partie entière, le préfixe et la partie répétitive. La partie entière est constituée d'un seul entier. Le préfixe et la partie répétitive sont des tableaux (éventuellement vides) d'entiers positifs qui décrivent le préfixe et la partie répétitive de la fraction continue. Par exemple, l'entrée (3, [1], [2, 4])
représente la fraction continue [3; 1, 2, 4, 2, 4, ...]
.
Si la partie répétitive est vide, cela indique un nombre rationnel. Par exemple, (3, [1, 2], [])
représente [3; 1, 2] = 11/3
. Vous devez accepter les deux formes d'un nombre rationnel (c'est (3, [1, 1, 1], [])
-à- dire qui [3; 1, 1, 1] = 11/3
doit également être une entrée valide).
Sortie : Sortie la fraction continue de deux fois l'entrée, dans le même format que l'entrée. Si la sortie est rationnelle, vous pouvez sortir l'une ou l'autre forme de la fraction continue. Tant que la réponse est équivalente à la bonne réponse, c'est très bien; aucune "compression" n'est nécessaire, donc la partie infinie peut être "déroulée" un peu (par exemple [1; 4, 2, 3, 2, 3...]
peut être écrite (1, [4], [2, 3])
ou (1, [4, 2, 3], [2, 3])
). Toutes les réponses doivent être exactes.
Cas de test : La colonne de formulaire exacte est donnée pour plus de commodité.
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])
Et enfin un test un peu plus grande pour assurer une précision: (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])
.
Le code le plus court gagne!
Astuce : Vous pouvez effectuer l'arithmétique d'une manière plutôt simple sur des fractions continues comme décrit ici . Le doublement d'une fraction continue n'est qu'un cas particulier de cet algorithme (bien que la partie la plus délicate puisse être de trouver quand la fraction continue se répète).
Sqrt[2]
.
[3; 1, 1, 1]
serait (3, [1, 1, 1], [])
dans le format d'entrée que nous utilisons - donc la question devrait probablement le mentionner dans ce format (dans le troisième paragraphe), juste pour assurer la clarté.
(-2, [1, 5, 2], [6, 2])
une sortie acceptable pour l'entrée (-1, [2], [2, 1])
? Et alors (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?