Sua tarefa é, dada x
, saída 2*x
. Fácil né !? Mas há um problema: x
será dado como uma fração contínua (possivelmente infinita) e a saída deve ser uma fração contínua. A entrada é garantida como um número algébrico real, cujo grau é no máximo 2.
Entrada : a fração continuada de x
. Isso é dividido em 3 partes: a parte inteira, o prefixo e a parte repetida. A parte inteira consiste em um único inteiro. O prefixo e a parte de repetição são (possivelmente vazios) matrizes de números inteiros positivos que descrevem o prefixo e a parte de repetição da fração continuada. Por exemplo, a entrada (3, [1], [2, 4])
representa a fração continuada [3; 1, 2, 4, 2, 4, ...]
.
Se a parte repetida estiver vazia, isso indica um número racional. Por exemplo, (3, [1, 2], [])
representa [3; 1, 2] = 11/3
. Você deve aceitar as duas formas de um número racional (ou seja (3, [1, 1, 1], [])
, que [3; 1, 1, 1] = 11/3
também deve ser uma entrada válida).
Saída : gera a fração contínua de duas vezes a entrada, no mesmo formato da entrada. Se a saída for racional, você poderá gerar uma das formas da fração continuada. Contanto que a resposta seja equivalente à resposta correta, tudo bem; nenhuma "compressão" é necessária; portanto, a parte infinita pode ser "desenrolada" um pouco (por exemplo, [1; 4, 2, 3, 2, 3...]
pode ser escrita (1, [4], [2, 3])
ou (1, [4, 2, 3], [2, 3])
). Todas as respostas devem ser exatas.
Casos de teste : a coluna exata do formulário é fornecida por conveniência.
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])
E, finalmente, um caso de teste um pouco maior para assegurar a precisão: (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])
.
O menor código vence!
Dica : Você pode executar aritmética de maneira bastante direta nas frações contínuas, conforme descrito aqui . Dobrar uma fração continuada é apenas um caso especial desse algoritmo (embora a parte mais complicada seja encontrar quando a fração continuada se repete).
Sqrt[2]
.
[3; 1, 1, 1]
estaria (3, [1, 1, 1], [])
no formato de entrada que estamos usando - portanto, a pergunta provavelmente deve mencioná-la nesse formato (no terceiro parágrafo), apenas para garantir clareza.
(-2, [1, 5, 2], [6, 2])
uma saída aceitável para entrada (-1, [2], [2, 1])
? Que tal (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?