Tarefa:
Sua tarefa é, quando são fornecidas três entradas:
- um numerador
n
- um denominador
d
- outro inteiro,
x
Crie um programa / função que encontre o x
th dígito do número após a casa decimal.
Especificações:
- O intervalo de
n
ed
está entre1
e2^31 - 1
, inclusive. - O intervalo de
x
é entre1
e10,000,000
, inclusive.- Você pode optar por usar a indexação baseada em 1 ou a indexação baseada em 0
x
. Indique na sua resposta qual você está usando.
- Você pode optar por usar a indexação baseada em 1 ou a indexação baseada em 0
n
pode ser maior qued
.n
,d
ex
são garantidos números inteiros positivos (para a versão de índice com base em 1x
, se você optar por usar a indexação com base em 0x
,x
pode ser0
).- Você pode receber entradas de qualquer maneira razoável (isto é, de qualquer maneira que não seja uma brecha padrão).
Regras:
- Você deve retornar o
x
dígito exato , não quando arredondado - então o15
dígito1/6
, por exemplo, não é7
, mas6
. - Seu programa deve funcionar para todos com
x
menos de 10 milhões, a menos que seu idioma não suporte decimais a 10 milhões de casas.
Exemplo de E / S:
A entrada de exemplo usa indexação baseada em 0, o que significa que x
passará de 0
para 9,999,999
. Além disso, a "entrada" é escrita como uma string com espaços que separam os números.
1 2 3: 0
5 6 0: 8
5 6 1: 3
1 6 15: 6 (not 7, as it's not rounded)
1 11 2: 0
1 10000 9999999: 0
11 7 1: 7
Respostas:
Python 2 , 25 bytes
Porta da minha resposta Haskell, já que o Python também suporta bignums por padrão. Como lá,
x
é 1 indexado.Experimente online! (pegando emprestado o invólucro de Keerthana Prabhakaran.)
fonte
Mathematica 33 Bytes
Indexação baseada em 1.
por exemplo, 10 milhões de dígitos do Pi à direita do ponto decimal:
demora cerca de 2 segundos na minha máquina antiga.
Você pode experimentá-lo online no WolframAlpha (clique no sinal de igual)
fonte
Haskell , 26 bytes
Funciona para todos os casos de teste. Yay bignums!
(n#d)x
toma seInteger
retorna umInteger
.x
é 1 indexado.Experimente online!
fonte
PHP> = 7.1, 40 bytes
bcdiv
Versão Online
fonte
<br /> <b>Notice</b>: Uninitialized string offset: -1 in <b>[...][...]</b> on line <b>6</b><br />
Geléia , 7 bytes
Experimente online!
Um envio de função (mas também funciona como um programa completo). As funções Jelly podem levar apenas dois argumentos diretamente; portanto, pego o dígito para retornar como argumento da esquerda, o numerador como o argumento da direita e o denominador da entrada padrão (em vez de usar um terceiro argumento).
As pessoas acostumadas ao Jelly podem estar cientes de que um programa completo pode receber mais de dois argumentos, mas isso faz com que você perca o acesso à maneira mais estrita de escrever o número inteiro constante 10, o que é bastante relevante aqui. Como tal, esse tipo de contribuição mista parece mais uma exploração do que um golfe realmente útil; Pessoalmente, não concordo com isso, mas a regra sobre permitir isso atualmente é de +40 / -12, portanto, contanto que esteja dentro das regras, eu também posso explorá-lo (e praticamente preciso ser competitivo).
Um argumento à esquerda de 1 refere-se ao dígito imediatamente após o ponto decimal (o "dígito .1s"), um argumento de 2 ao dígito .01s e assim por diante.
Explicação
A geléia possui aritmética de precisão arbitrária em números inteiros; portanto, ao multiplicar por uma potência de 10, estamos movendo efetivamente o dígito que queremos para a posição das unidades, onde é muito mais fácil extrair.
fonte
sed
-r
, 93131136bytesExperimente online!
( Veja a saída em decimal )
Recebe entradas em unárias e saídas em unárias, e o programa é 1 indexado. Felizmente, este desafio já me preparou para este.
O conceito é semelhante, ambos implementam divisão longa. Aqui, realizo longos
x
tempos de divisão , ondex
está o dígito após a casa decimal que tenho que encontrar. Após cada iteração, descarto as casas decimais anteriores porque elas não são mais necessárias.Enquanto faz a divisão, o programa está no formato
dividend;divisor;x,result
.s/$/,/
adiciona essa vírgula, a vírgula é necessária para separar o resultado de todo o restoDepois segue o loop principal do programa
:d
etiqueta ds/,.+/,/
remova tudo após a vírgula:
etiqueta vazias/(1+)(1*;\1;1*,)1{10}?/\21/
executar divisão, adicionando 1 ao resultado a cada iteração, removendo simultaneamente blocos de 10 1s contínuos no resultadot
ramificar para o rótulo vazio, em outras palavras, fazer um loop até que o dividendo se esgotes/1*/&&&&&&&&&&/
multiplique o dividendo por 10 para se preparar para a próxima iteraçãota
ramificar para rotular um:a
rotular a, esta linha e a linha acima são necessárias para fazer otd
trabalhos/1,/,/
subtrair 1 de xtd
ramificação condicional em d, isso é acionado se houver uma substituição bem-sucedida desde que a última ramificação condicional, poiss/1*/&&&&&&&&&&/
sempre é bem-sucedida,td
sempre será acionada, mas, ao introduzir a ramificação a, corrigimos isso para que apenas dependa da substituição anteriors/.+,//
finalmente, remova tudo, menos o resultadofonte
Ruby ,
3433 bytesExperimente online!
fonte
REXX, 76 bytes
(Não é muito curto, mas pensou que seria uma alteração fazer um no REXX) O Rexx é baseado em 1 por definição.
Explicação:
Mesclar 3 e 4, na verdade, torna mais longo devido à alteração na sintaxe:
Para não-REXXers: seqüências de caracteres e números são totalmente intercambiáveis no REXX. Eles são determinados pela forma como você age sobre eles. Assim, você pode analisar um número usando as funções sting sem conversão. Por exemplo
retorna 55 e não 2728!
fonte
rexx main.rexx 1 2 3
. Você deve mencionar na sua resposta que a entrada é 1 indexada.Lote, 70 bytes
fonte
Linguagem da CPU Intel x86, 50 bytes
tradução em nasm
Para o parâmetro 'c', o intervalo começa em 0; seria 0..0xfffffffd. Se os parâmetros b = 0 ou c estiverem fora do intervalo 0..0xfffffffd, ele retornará -1
fonte
Lua, 42 bytes
fonte
C,
4943 bytesO argumento 'i' é de indexação 0. Código e resultado do teste
fonte
Java 7,
146139137133128122 Bytes-3 bytes graças a Erik, o Outgolfer, esqueci totalmente que as importações não precisavam estar em sua própria linha
-4 bytes graças ao Qwerp-Derp por mover n% d para o construtor
-6 bytes graças a Kevin Cruijssen por remover o toString ()
Espero que seja assim que a contagem de bytes é feita para funções java com importações
Usa a classe BigDecimal do Java para obter uma representação exata da expansão decimal. Observe que não é o código de execução mais rápida de todos os tempos, mas acaba produzindo a saída correta para todos os casos de teste. Código não destruído:
Experimente online!
fonte
BigDecimal(n)
comBigDecimal(n%d)
, e se livrar dan=n%d
?.toString()
e usar+""
(com dois parênteses adicionais).Clojure, 39 bytes
função anônima com argumentos em
n,d,x
quex
usa uma indexação baseada.fonte
F # (.NET Core) , 30 bytes
Experimente online!
(use a indexação baseada em 1)
fonte
Groovy, 30 bytes
x usa 1 indexação baseada.
Explicação:
fonte
Python 2 ,
50,44,40,36 bytesExperimente online!
fonte
1,7,10000000
Ruby, 39 bytes
fonte
JavaScript (ES6), 34 bytes
x é baseado em 0
fonte
f(1,7,10000000)
, por exemplo.Python 2 , 32 bytes
Usa indexação 0
Experimente online!
Editar:
Revertida para a solução original, como visto na resposta de Ørjan Johansen de que funciona, mas não vou mais jogar golfe
fonte
Groovy, 55 bytes
Explicado usando
1,11,2
:fonte
Axioma,
71 6176 bytesn é indexação 0 [0..M]. Código e resultado do teste
fonte
JavaScript (Node.js) , 43 bytes, porta
Experimente online!
JavaScript (Node.js) , 51 bytes
Experimente online!
use Array em vez de recursivo para evitar o fluxo de pilha
fonte