Escreva um programa ou função que leva em inteiros positivos a
, b
e c
, e impressões ou retorna a/b
para c
casas decimais, utilizando as operações + - * /% [somar, subtrair, multiplicar, dividir, modular] sobre os inteiros positivos: você pode usar tudo o que seu idioma permite, mas não em números de ponto flutuante. O intervalo de a, b, c seria o intervalo permitido para números inteiros não assinados no seu idioma. O resultado do número será truncado para o último dígito a ser impresso (portanto, não round
).
Isso significa que, se o seu idioma não tiver um tipo inteiro (apenas flutuante), você poderá participar usando esses números flutuantes apenas como números inteiros positivos. A pista deste exercício seria escrever a função que encontra os dígitos em uma divisão de ponto flutuante, usando apenas a operação + - * /% em números inteiros [não assinados].
Exemplos
print(1,2,1)
imprimiria0.5
print(1,2,2)
imprimiria0.50
print(13,7,27)
imprimiria1.857142857142857142857142857
print(2,3,1)
imprimiria0.6
print(4,5,7)
imprimiria0.8000000
print(4,5,1)
imprimiria0.8
print(9999,23,1)
imprimiria434.7
print(12345613,2321,89)
seria impresso se o seu idioma não tiver assinatura de 32 bits5319.09220163722533390779836277466609220163722533390779836277466609220163722533390779836277466
O código mais curto em bytes vence. Sinto muito se isso não parece claro ... Também não conheço idiomas, não lembro bem as palavras ... É melhor ter um link para Ideone.com ou algum outro lugar para tentar facilmente a resposta, especialmente para teste alguma entrada diferente da proposta.
(1,2,0)
. Veja meta.codegolf.stackexchange.com/a/5608/194(1,2,0)
?(1,2,0)
deve ser irrelevante, pois0
não é um número inteiro positivo. E eu prefiro que se c restos assim desde que eu prefiro não ter que pensar em acrescentar uma.
ou nãoRespostas:
05AB1E ,
17 13 11 1914 bytesEntrada no formulário
b, a, c
.Economizou 5 bytes graças ao Grimy .
Experimente online!
fonte
b,a,c
?‰`I°*¹÷I°+¦'.sJ
‰`¹+I°*¹÷¦'.sJ
Haskell, 87 bytes
Exemplo de uso:
(13#7)27
->"1.857142857142857142857142857"
.23 bytes para lidar com o
c==0
caso e usar um zero à esquerda em vez de coisas do tipo.5
.Como funciona: multiplique
a
com10^c
, divida porb
, transforme-se em uma sequência, divida onde.
deve ser inserido, junte as duas partes com um.
intermediário e corrija as arestas.fonte
Perl 6 ,
58 57 5548 bytesO que é bastante irritante é que poderia ser reduzido para apenas
{($^a.FatRat/$^b).base(10,$^c)}
se fosse permitido arredondar para o valor mais próximo.Explicação:
fonte
(...).FatRat / 10**$x
uma divisão de um Rational? Você só pode dividir números inteiros.does Real
oudoes Numeric
seria permitido? E se eu aumentar (patch de macaco) a classe existente para remover essas funções, isso seria permitido?+-*/%
somente com tipos inteiros simples. "inteiro simples" em termos de funcionalidade (antes de tudo: divisão inteira) e não de representação interna. Você acha que é permitido usar uma biblioteca de ponto flutuante de software, que (apesar do nome) também usa apenas números inteiros para representação interna?Perl, 55 bytes
Inclui +3 para
-p
Dê aeb em uma linha em STDIN, c na próxima
division.pl
:o
$_/$&
é um pouco discutível. Na verdade, eu quero uma divisão inteira lá, mas o perl não tem isso sem carregar módulos especiais. Portanto, é temporariamente um não inteiro que eu imediatamente trunco (usando|0
) para terminar com o inteiro que uma divisão inteira daria. Ele pode ser reescrito($_-$_%$&)/$&
para não ter um valor não inteiro temporariamente (ainda assim seria internamente um valor flutuante)fonte
$-
para torná-lo apenas int? (Eu acho que existem limites rígidos sobre o mix / max dele, e eu tenho certeza que você já tenha considerado, mas que ele vale a pena conferir!)use integer
$-
, é bom saber. Obrigado!JavaScript (ES6),
5550 bytes(a/b|0)
executa a divisão de flutuação, mas lança imediatamente para um número inteiro. Informe-me se isso não for permitido.fonte
PHP, 187 bytes
trabalha com strings para o numerador, que podem ser valores int maiores que
PHP_INT_MAX
Não tenho outra chance, então 13/7 é reduzido para 1,8571428571429 e chego a isso, não o caso de teste com 27 casas decimais
Dessa forma, 36 bytes não são permitidos
fonte
Pitão -
2119181614 bytesEstará olhando sobre o formato de entrada, que pode economizar bastante.
Conjunto de Teste . (PS 27 não termina online, então eu fiz 10 em seu lugar).
fonte
0
não é um inteiro positivo (embora a op mantém exemplos acrescentando comc=0
)JavaScript (ES6),
646259 bytesSaved 2 bytes thanks to ETHproductions.
The included division always results in an integer.
fonte
m
altogether still work?f=(a,b,n,s)=>n+1?f((q=(a-a%b)/b,a%b*10),b,n-1,s?s+q:q+'.'):s
is 60 bytes.Java 7, 105 bytes
Ungolfed & código de teste:
Experimente aqui.
Resultado:
fonte
divide
e não/
.int
tipo para armazenar valor numérico (isso não é legal? BigInteger é umint[]
dígito. Por exemplo, {1,2,5} na base 10 é 125. I não tenho certeza em que base estão os dígitos do BigInteger, mas acho que são mais deRuby, 67 bytes
se eu fizer uma função para executar os casos de teste acima
fonte
->a,b,c{...}
onde você substitui as elipses pelo seu código. (A atribuição real da variável é desnecessário por consenso.)Raquete 203 bytes
Ungolfed:
Uso:
Resultado:
Outro método (resposta não válida aqui):
fonte
real->decimal-string
espera umreal
valor como seu primeiro argumento, assim/
como a divisão de ponto flutuante, o que não é permitido nesta tarefa. Também:real->decimal-string
arredonda ((f 1 6 7)
->0.1666667
) em vez de truncar.q, 196 bytes
Para executar: defina a, b, c primeiro.
fonte
Ferrugem, 114 bytes
código de teste:
fonte
PHP, 89 bytes
intdiv () é introduzido no php 7, portanto é necessário. O php 7.1 me permitiria mudar a lista () para [] e, assim, economizaria 4 bytes.
use como:
fonte
$o.=intdiv($a=10*($a%$b),$b);
por$o.=($a=10*($a%$b))/$b^0;
economizará 4 bytes.C #, 126 bytes
Programa completo com casos de teste:
Divisão inteira é implementada. Podem ser usados números de qualquer tamanho, devido ao
BigInteger
tipo de dados (a importaçãoSystem.Numerics
é necessária). O parâmetro de contagem de dígitosc
é restrito a 2 ^ 31-1, no entanto, deve fornecer dígitos mais que suficientes.fonte
Groovy (
787742 bytes)Explicação
Eval.me(a+'.0g');
- Converta da entrada inteira para a entrada BigDecimal. Na notação BigDecimal groovy, há uma notação dupla com um G ou g anexado. Eu também poderia ter usado o construtor,new BigDecimal(it)
mas isso salvou um byte..divide(b, n, 1)
- Divida por b com precisão n, modo de arredondamento pela metade.Experimente aqui: https://groovyconsole.appspot.com/script/5177545091710976
fonte
Lote, 122 bytes
fonte
Mathematica, 50 bytes
Função Sem nome dos três argumentos (que são encomendadas
c
,a
,b
para salvar a algum lugar byte), que retorna um string. Ele multiplicaa/b
por10^c
, leva a maior função inteiro, em seguida, convertidos para uma string e insere um ponto decimal para o local apropriado. Pena que os nomes das funções não sejam mais curtos.fonte
Python 3, 62 bytes
Experimente aqui
* Nota : repl.it usa uma versão mais antiga do Python 3 , que requer que todos os índices de campo sejam especificados, o que significa que o
"{:.{1}f}"
fará"{0:.{1}f}"
, com 63 bytes em repl.itComo usar
Digite todos os três valores com espaços intermediários. isto é, uma entrada de
1 2 1
daria um resultado de0.5
Explicação
input().split()
: Obtém a entrada do usuário e a divide em uma lista com um separador de (espaço)a,b,c = map(int,XX)
: Mapeia as variáveis para os valores especificados pelo usuário com um tipo int"{:.{1}f}".format(a/b,c)
: Formata uma sequência para exibir o resultado da divisão e substitui{1}
porc
para definir a casa decimal da sequência exibidaprint(XX)
: imprime a sequência fornecidafonte
Python 3 , 58 bytes
Experimente online!
Isso é preciso para o número especificado de casas decimais, desde que
a * 10 ** c
não seja muito grande.Eu tentei o Python 2 para encurtar o
str(...)
para,`...`
mas o Python 2 insere umL
no final, se for muito grande, portanto, verificar isso levaria muito mais bytes do que vale a pena.fonte
Stax , 13 bytes
Execute e depure
Os argumentos são aceitos em
c a b
ordem.fonte
C, 67 bytes
Experimente online!
Alguma versão anterior eu acho que tinha um erro na memória de leitura fora do atribuído ao programa ... Graças a ceilingcat e para todos ...
fonte