Em este desafio há 2 anos, encontramos o período de uma fração de unidade ( 1/n where n is a natural number
).
Agora, sua tarefa é escrever um programa / função para encontrar a repetição de uma fração de unidade.
O repetir é a parte da expansão decimal que se repete infinitamente, como:
- A representação decimal de
1/6
é0.16666...
, então a repetição é6
. - A representação decimal de
1/11
é0.090909...
, então a repetição é09
. - A representação decimal de
1/28
é0.0357142857142857142857...
, então a repetição é571428
.
Especificações
- Entrada em qualquer formato razoável.
- Saída repetida em decimal, string ou lista .
- Para
1/7
(0.142857142857...
), você deve produzir em142857
vez de428571
. - Para
1/13
(0.076923076923076923...
), você deve produzir em076923
vez de76923
. - Sem força bruta, por favor.
Casos de teste
Input Output
1 0
2 0
3 3
7 142857
13 076923
17 0588235294117647
28 571428
70 142857
98 102040816326530612244897959183673469387755
9899 000101020305081321345590463683200323264976260228305889483786241034447924032730578846348115971310233356904737852308313971108192746742095161127386604707546216789574704515607637135064147893726639054449944438832205273259925244974239822204263056874431760783917567431053641781998181634508536215779371653702394181230427315890493989291847661379937367410849580765733912516415799575714718658450348520052530558642287099707041115264168097787655318719062531568845337912920497019901
Pontuação
Isso é código-golfe . A solução mais curta em bytes ganha.
Nenhuma resposta seria aceita, porque o objetivo não é encontrar o idioma capaz de produzir a solução mais curta, mas a solução mais curta em cada idioma.
Entre os melhores
code-golf
math
arithmetic
number-theory
Freira Furada
fonte
fonte
1/13
é0.076923076923...
não0.769230769230...
Respostas:
Java, 150 bytes:
Espaço em branco adicionado:
Programa completo e não-destruído:
fonte
for(;;)
haveria menos bytes do quewhile(2<3)
se não fosse um loop infinito! (e menos bytes do quewhile(1)
também @Maltysen)a
er
nos loops for. Salva bytes!CJam, 26
Experimente online
Explicação:
O programa gera uma série de dividendos envolvidos no cálculo da expansão decimal, até encontrar um dividendo que já viu antes. Depois, pega todos os dividendos que começam com esse e os divide por n para obter os dígitos da repetição.
fonte
Python 3.5,
79747370 bytesEconomizei 3 bytes mantendo o controle dos dividendos, uma ideia que tirei da resposta CJam do @ aditsu .
Testá-lo em repl.it .
fonte
Gelatina ,
1210 bytesEconomizei 2 bytes mantendo o controle dos dividendos, uma ideia que tirei da resposta CJam do @ aditsu .
Experimente online!
Como funciona
fonte
Idioma do GameMaker, 152 bytes
Com base na resposta de Kenny
fonte
Java, 122
Semelhante à minha solução CJam.
fonte
Perl 6 , 37 bytes
Se você não se importa que ele funcione apenas com denominadores que se encaixam em um número inteiro de 64 bits, você pode remover a chamada de método para
.FatRat
.Explicação:
Teste:
fonte
Pitão, 63 bytes
Experimente online!
Tradução direta da resposta em Java .
fonte
PHP, 169 bytes
fonte