O que você precisa fazer é criar uma função / programa que use um decimal como entrada e produz o resultado de pegar repetidamente o inverso da parte fracionária do número, até que o número se torne um número inteiro.
Mais especificamente, o processo é o seguinte:
Seja x a entrada
Se x é um número inteiro, produza-o.
Caso contrário: . Volte para 2.
é o componente fracionário de e é igual a . é o piso de x, que é o maior número inteiro menor que .
Casos de teste:
0 = 0
0.1 = 1/10 -> 10
0.2 = 1/5 -> 5
0.3 = 3/10 -> 10/3 -> 1/3 -> 3
0.4 = 2/5 -> 5/2 -> 1/2 -> 2
0.5 = 1/2 -> 2
0.6 = 3/5 -> 5/3 -> 2/3 -> 3/2 -> 1/2 -> 2
0.7 = 7/10 -> 10/7 -> 3/7 -> 7/3 -> 1/3 -> 3
0.8 = 4/5 -> 5/4 -> 1/4 -> 4
0.9 = 9/10 -> 10/9 -> 1/9 -> 9
1 = 1
3.14 = 157/50 -> 7/50 -> 50/7 -> 1/7 -> 7
6.28 = 157/25 -> 7/25 -> 25/7 -> 4/7 -> 7/4 -> 3/4 -> 4/3 -> 1/3 -> 3
Resumo de 0 a 1 em incrementos de 0,1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Isso é código-golfe , e o menor número de bytes vence.
Esclarecimentos:
- "Pontos de bônus" para nenhum erro de arredondamento
- Deve funcionar para qualquer número racional não negativo (ignorando o erro de arredondamento)
- Você pode, mas não precisa executar as etapas executadas
- Você pode considerar a entrada como decimal, fração ou par de números, que pode estar em uma sequência.
Desculpe por todos os problemas, esta é a minha primeira pergunta neste site.
code-golf
math
arithmetic
recursion
rational-numbers
Solomon Ucko
fonte
fonte
Respostas:
J, 18 bytes
Em J, o idioma
u ^: v ^:_
significa "Continue aplicando o verbou
enquanto a condiçãov
retornar verdadeira.No nosso caso, a condição final é definida pelo gancho
~:<.
, o que significa "o piso do número<.
não é igual~:
ao número em si" - portanto, pararemos quando o verbo principalu
retornar um int.u
nesse caso, existe outro gancho-<.
- o número menos seu piso - cujo valor de retorno é alimentado no@
verbo recíproco%
.Experimente online!
fonte
_2{(%@-<.) ::]^:a:
.%@|~&1^:(~:<.)^:_
Python 3 , 101 bytes
Experimente online!
Formato: a sequência deve conter um ponto decimal.
fonte
.replace(".","")
->.replace(*"._")
save 1 byteMathematica, 36 bytes
Demo
fonte
Rationalize
?Rationalize
, o Mathematica acha que não há precisão suficiente para gerar todos os termos da fração continuada. Por exemplo,ContinuedFraction[0.1]
é justo{0}
.Perl 6 , 42 bytes
Experimente online!
O
nude
método regressa ao nu merator e de numerador de um número racional como uma lista de dois elementos. É mais curto obter o denominador dessa maneira do que chamar odenominator
método diretamente.fonte
Haskell , 47 bytes
Isso supera a resposta do Assistente de Trigo, porque
GHC.Real
permite padronizar a correspondência nos racionais usando:%
, além de ter um nome mais curtoExperimente online!
f
recebe umRational
número como entrada, embora o ghc permita que eles sejam escritos em formato decimal, com certa precisão.fonte
Haskell ,
4034 bytesEditar:
(Não pude resistir a postar isso depois de ver as respostas Haskell com importações detalhadas - agora vejo que outras respostas em idiomas também estão essencialmente usando esse método.)
!
pega dois argumentos inteiros (numerador e denominador da fração; eles não precisam estar nos menores termos, mas o denominador deve ser positivo) e retorna um número inteiro. Ligar como314!100
.Experimente online!
n/d
(assumindod
positivo) émod n d/d
, portanto, a menos quemod n d==0
,!
retorne com uma representação ded/mod n d
.fonte
Python 3 + sympy , 67 bytes
Experimente online!
Sympy é um pacote simbólico de matemática para Python. Por ser simbólico e não binário, não há imprecisões de ponto flutuante.
fonte
PHP , 69 bytes
Experimente online!
PHP , 146 bytes
Experimente online!
fonte
Geléia , 8 bytes
Experimente online!
Imprecisões de ponto flutuante.
fonte
M
para corrigir imprecisões de ponto flutuante: P . É Jelly, mas com precisão arbitrária em matemática. Porém, não corrige o loop 0,7.JavaScript ES6, 25 bytes
Ligue
f(a,b)
paraa/b
fonte
gcd(a,b)=1
pode remover/b
Haskell ,
6261 bytesExperimente online!
Usa a
Data.Ratio
biblioteca de Haskell para racionalidades de precisão arbitrárias. Se apenas os nomes incorporados não fossem tão longos.fonte
Data.Ratio
. Eu nunca ouvi falar dissoGHC.Real
. Sinta-se livre para postar isso como sua própria resposta.APL (Dyalog Classic) , 18 bytes
Experimente online!
APL NARS, 18 caracteres
-1 byte graças ao teste de Uriel
fonte
⍵-⌊⍵
→1|⍵
para um byteSmalltalk, 33 bytes
fonte
Stax , 8 bytes
Execute e depure
"Pontos de bônus" sem erros de precisão. Nenhuma aritmética de ponto flutuante usada. Isso (finalmente) faz uso do tipo racional embutido da stax.
fonte
JavaScript, 70 bytes
Se pudermos alterar o tipo de entrada para uma string, ele poderá salvar 5 bytes.
fonte