Casi el polo opuesto si este desafío, y sospecho que será un poco más fácil.
Su tarea es tomar dos enteros en el formato a/b
(Formando un número racional) y luego generar el número en decimal exactamente.
Por ejemplo, si tuviera que ingresar 1/3
, generaría:
0.33333333333333333
Y seguiría imprimiendo 3s hasta el final de los tiempos, con un 0 inicial opcional (también puede imprimir un carácter por línea si y solo si su idioma no permite imprimir en la misma línea).
El comportamiento para x/0
será indefinido. Para un número que parece que no se repite (como, digamos 5/4
), en realidad se repite. Cualquiera de las siguientes dos formas sería aceptable para 5/4
:
1.25000000000000000
1.24999999999999999
(Lo mismo con números enteros, 1.9999999
o 2.000000
)
La fracción puede no estar en su forma más simple, y a
, o b
puede ser negativo (Nota -a/b = -(a/b)
, -a/-b = a/b
, a/-b = -a/b
, y -.6249999
no es válido, pero -0.6249999
es aceptable, pero todavía se puede utilizar.
fuente
bc
o es trampa?a
y / ob
ser negativo?a
ob
ambos pueden ser negativos)Respuestas:
CJam,
3837 bytesCómo funciona
fuente
C, 108
79Editar modificado para trabajar con números negativos.
Entrada de stdin. Estilo antiguo de K&R.
fuente
Ruby,
83691029189 bytesImplementación simple de la división de enteros manual basada en la división de enteros de la computadora.
Gracias a @blutorange por la ayuda en el golf.
Editar: se corrigió la solución para incluir números negativos.
fuente
->s{a,b=s.split(?/).map &:to_i;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
me encanta esto de ruby.?/
denotar caracteres, ni sabía sobre$><<
imprimir o laloop
palabra clave. ¡¡Muchas gracias!!$>
es la abreviatura de$stdout
y<<
es un operador. Puede guardar un byte más en la segunda línea cambiándolo ac*d<0&&$><<?-
; unos pocos bytes combinando la tercera / cuarta línea a$><<a/b<<?.
, y uno más eliminando el espacio después<<
de la última línea. Y aquí hay una idea para->s{a,b=s.scan(/\d+/).map &:to_i;1==s.count(?-)&&$><<?-;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
$><<a/b
no funcionó correctamente, por eso puse el espacio allí. El resto parece bueno, muchas gracias!Rational(2,3) == 2/3r
) desde ruby 2.1 (que aprendí hace unos 10 minutos) que se puede usar para acortar la segunda línea:eval(s+?r)<0&&$><<?-
Java,
177176170El algoritmo es sencillo; La parte difícil fue hacer que la impresión funcionara. Al final, hice que la computadora durmiera por un segundo entre cada paso para poder imprimir.
Versión ampliada y ejecutable
fuente
R,
103137109103Un poco más feliz con esto ahora. El uso de escaneo con un separador ahorra muchos bytes. Puede que aún tenga margen de mejora. Sustituido
<-
por=
. No siempre he tenido la mejor de las suertes con esto, pero esta vez funcionó.Pruebas de funcionamiento
fuente
Python 3,
107115 bytesMuy claro:
-1/3
->-0.
)* (Aunque el cálculo para
a
se movió dentro del bucle para guardar algunos bytes).Editar: Corregido error con fracciones negativas> -1.
fuente
Python 2.7, 209 bytes
editar:
Ahora genera todos los caracteres en la misma línea, como se le solicitó.edit2:
Ahora lee la fracción del argumento de la línea de comandos, según lo solicitado :)fuente
map
lugar de la comprensión de la lista ahorra bastante; 2) no necesitan los paréntesis alrededorm*a
en cualquiera de sus ubicaciones, como*
,%
y/
son todos la misma prioridad y asociativo por la izquierda; 3) la lógica de 0 o punto en la línea 3 se puede simplificar"0."[m==1]
, ya que de todos modos solo la está imprimiendo; 4) probablemente guardará caracteres para simplemente establecero=stdout.write
y convertir argumentos numéricos en cadenas con comillas invertidas según sea necesario.1/-3
da en-1.666666666
lugar de-0.333333333
.