Quase o oposto polar se esse desafio, e eu suspeito que será um pouco mais fácil.
Sua tarefa é pegar dois números inteiros no formato a/b
(Formando um número racional) e, em seguida, imprimir o número exatamente em decimal.
Por exemplo, se você inserir 1/3
, ele produzirá:
0.33333333333333333
E continuaria imprimindo 3s até o final dos tempos, com um 0. inicial opcional (você também pode imprimir um caractere por linha se e somente se o seu idioma não permitir a impressão na mesma linha.)
O comportamento para x/0
será indefinido. Para um número que parece que não se repete (como, digamos 5/4
), na verdade se repete. Qualquer um dos dois formulários a seguir seria aceitável para 5/4
:
1.25000000000000000
1.24999999999999999
(O mesmo com números inteiros 1.9999999
ou 2.000000
)
A fração pode não estar em sua forma mais simples, e a
ou b
pode ser negativo (Nota -a/b = -(a/b)
, -a/-b = a/b
, a/-b = -a/b
, e -.6249999
é inválido, mas -0.6249999
é aceitável, mas você ainda pode usar.
fonte
bc
ou isso é trapaça?a
e / ou podeb
ser negativa?a
oub
(ou ambos) podem ser negativos)Respostas:
CJam,
3837 bytesComo funciona
fonte
C, 108
79Editar Modificado para trabalhar com números negativos.
Entrada de stdin. Antigo estilo K&R.
fonte
Ruby,
83691029189 bytesImplementação simples da divisão inteira manual com base na divisão inteira do computador.
Obrigado a @blutorange pela ajuda no golfe.
Editar: Corrigida a solução para incluir números negativos.
fonte
->s{a,b=s.split(?/).map &:to_i;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
eu simplesmente amo isso no ruby.?/
de indicar caracteres nem sabia$><<
imprimir ou aloop
palavra - chave. Muito obrigado!!$>
é a abreviação de$stdout
e<<
é um operador. Você pode salvar mais um byte na segunda linha, alterando-o parac*d<0&&$><<?-
; alguns bytes combinando a 3ª / 4ª linha em$><<a/b<<?.
e mais um removendo o espaço depois<<
da última linha. E aqui está uma idéia para trazê-lo para baixo para 91 bytes:->s{a,b=s.scan(/\d+/).map &:to_i;1==s.count(?-)&&$><<?-;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
(rubi 2.2.0)$><<a/b
não funcionou corretamente, é por isso que coloquei o espaço lá. O resto parece bom, muito obrigado!Rational(2,3) == 2/3r
) desde o ruby 2.1 (que aprendi há cerca de 10 minutos) que pode ser usado para reduzir a segunda linha:eval(s+?r)<0&&$><<?-
Java,
177176170O algoritmo é direto; a parte complicada foi fazer a impressão funcionar. No final, o computador parou por um segundo entre cada etapa para que ele pudesse imprimir.
Versão expandida e executável
fonte
R,
103137109103Um pouco mais feliz com isso agora. O uso da digitalização com um separador economiza muitos bytes. Ainda pode haver espaço para melhorias. Substituído
<-
por=
. Nem sempre tivemos muita sorte com isso, mas funcionou desta vez.Execuções de teste
fonte
Python 3,
107115 bytesBem direto:
-1/3
- ->-0.
)* (Embora o cálculo para tenha
a
sido movido dentro do loop para salvar alguns bytes.)Edit: Corrigido o erro com frações negativas> -1.
fonte
Python 2.7, 209 bytes
editar:
Agora gera todos os caracteres na mesma linha, conforme solicitado.edit2:
Agora lê a fração do argumento da linha de comandos, conforme solicitado :)fonte
map
vez da compreensão da lista economiza bastante; 2) não precisa dos parênteses em tornom*a
em qualquer de suas localidades, como*
,%
, e/
são todos a mesma precedência e associativos à esquerda; 3) a lógica de 0 ou ponto na linha 3 pode ser simplificada"0."[m==1]
, pois você a está imprimindo de qualquer maneira; 4) provavelmente salvará caracteres para definiro=stdout.write
e converter argumentos numéricos em string com backticks, conforme necessário.1/-3
dá em-1.666666666
vez de-0.333333333
.