Escriba un programa o función que tome enteros positivos a
, b
y c
, e imprima o regrese a/b
a c
lugares decimales, usando las operaciones + - * /% [sumar, restar, multiplicar, dividir, modular] en los enteros positivos: puede usar todo eso su idioma lo permite, pero no en números de coma flotante. El rango de a, b, c sería el rango permitido para enteros sin signo en su idioma. El resultado del número se truncará hasta el último dígito para imprimir (por lo tanto, no round
).
Esto significa que si su idioma no tiene un tipo entero (solo flotante), puede participar utilizando estos números flotantes solo como enteros positivos. La clave de este ejercicio sería escribir la función que encuentra los dígitos en una división de coma flotante, utilizando solo la operación + - * /% en enteros [sin signo].
Ejemplos
print(1,2,1)
imprimiría0.5
print(1,2,2)
imprimiría0.50
print(13,7,27)
imprimiría1.857142857142857142857142857
print(2,3,1)
imprimiría0.6
print(4,5,7)
imprimiría0.8000000
print(4,5,1)
imprimiría0.8
print(9999,23,1)
imprimiría434.7
print(12345613,2321,89)
se imprimiría si su idioma tiene 32 bits sin signo5319.09220163722533390779836277466609220163722533390779836277466609220163722533390779836277466
El código más corto en bytes gana. Lo siento si esto no parece claro ... No sé los idiomas también, no recuerdo bien las palabras ... Es mejor tener un enlace a Ideone.com o algún otro lugar para probar fácilmente la respuesta especialmente para prueba alguna entrada diferente de la propuesta.
(1,2,0)
. Ver meta.codegolf.stackexchange.com/a/5608/194(1,2,0)
?(1,2,0)
debería ser irrelevante ya0
que no es un entero positivo. Y preferiría que c permanezca así, ya que preferiría no tener que pensar en agregar a.
o noRespuestas:
05AB1E ,
17 13 11 1914 bytesEntrada en el formulario
b, a, c
.Guardado 5 bytes gracias a Grimy .
Pruébalo en línea!
fuente
b,a,c
?‰`I°*¹÷I°+¦'.sJ
‰`¹+I°*¹÷¦'.sJ
Haskell, 87 bytes
Ejemplo de uso:
(13#7)27
->"1.857142857142857142857142857"
.23 bytes para manejar el
c==0
caso y usar un cero inicial en lugar de cosas como.5
.Cómo funciona: multiplique
a
con10^c
, divida porb
, convierta en una cadena, divida donde.
debe insertarse, una ambas partes con un punto.
intermedio y arregle los casos de borde.fuente
Perl 6 ,
58 57 5548 bytesLo que es bastante molesto es que podría acortarse a solo
{($^a.FatRat/$^b).base(10,$^c)}
si se le permitiera redondear al valor más cercano.Explicación:
fuente
(...).FatRat / 10**$x
una división de un racional? Solo se te permite dividir enteros.does Real
odoes Numeric
se permitiría? ¿Qué sucede si aumento (parche de mono) la clase existente para eliminar esos roles, ¿estaría permitido?+-*/%
solo con tipos enteros simples. "entero simple" en términos de funcionalidad (en primer lugar: división de enteros) no de representación interna. ¿Crees que está permitido usar una biblioteca de punto flotante de software, que (a pesar del nombre) también usa solo enteros para la representación interna?Perl, 55 bytes
Incluye +3 para
-p
Dé ayb en una línea en STDIN, c en la siguiente
division.pl
:El
$_/$&
es un poco discutible. Realmente quiero una división entera allí, pero Perl no tiene eso sin cargar módulos especiales. Entonces, es temporalmente un no entero que luego trunco inmediatamente (usando|0
), así que termino con el entero que daría una división entera. Podría reescribirse($_-$_%$&)/$&
para no tener siquiera temporalmente un valor no entero (aunque internamente seguiría siendo flotante)fuente
$-
para int? (Creo que hay límites estrictos en la mezcla / máximo, y estoy seguro de que ya lo habrás considerado, ¡pero vale la pena verificarlo!)use integer
$-
, es bueno saberlo. ¡Gracias!JavaScript (ES6),
5550 bytes(a/b|0)
realiza la división flotante pero inmediatamente se convierte en un entero. Avísame si esto no está permitido.fuente
PHP, 187 bytes
funciona con cadenas para el numerador que pueden ser valores int mayores que
PHP_INT_MAX
No tengo otra oportunidad, entonces 13/7 se acorta a 1.8571428571429 y no alcanzo el caso de prueba con 27 decimales
De esta manera, 36 Bytes no están permitidos
fuente
Pyth -
2119181614 bytesExaminará el formato de entrada, que puede ahorrar muchísimo.
Test Suite . (PS 27 no termina en línea, así que hice 10 en su lugar).
fuente
0
que no es un número entero positivo (a pesar de que la operación sigue agregando ejemplos conc=0
)JavaScript (ES6),
646259 bytesAhorró 2 bytes gracias a ETHproductions.
La división incluida siempre da como resultado un número entero.
fuente
m
completo todavía funcionaría?f=(a,b,n,s)=>n+1?f((q=(a-a%b)/b,a%b*10),b,n-1,s?s+q:q+'.'):s
es de 60 bytes.Java 7, 105 bytes
Ungolfed y código de prueba:
Pruébalo aquí.
Salida:
fuente
divide
y no/
.int
tipo para almacenar el valor numérico. (¿No es genial? BigInteger es unaint[]
de dígitos. Como, {1,2,5} en la base 10 es 125. I No estoy seguro de en qué base están realmente los dígitos de BigInteger, pero supongo que son más de 10. "Ruby, 67 bytes
si hago una función para ejecutar los casos de prueba anteriores
fuente
->a,b,c{...}
donde reemplaza las elipses con su código. (La asignación real de la variable no es necesaria por consenso.)Raqueta 203 bytes
Sin golf:
Uso:
Salida:
Otro método (respuesta no válida aquí):
fuente
real->decimal-string
espera unreal
valor como primer argumento, también lo/
es la división de coma flotante, que no está permitida en esta tarea. Además:real->decimal-string
redondea ((f 1 6 7)
->0.1666667
) en lugar de truncar.q, 196 bytes
Para ejecutar: establezca a, b, c primero.
fuente
Óxido, 114 bytes
código de prueba:
fuente
PHP, 89 bytes
intdiv () se introduce en php 7, por lo que requiere eso. php 7.1 me permitiría cambiar la lista () a [] y así ahorraría 4 bytes.
usar como:
fuente
$o.=intdiv($a=10*($a%$b),$b);
con$o.=($a=10*($a%$b))/$b^0;
ahorrará 4 bytes.C #, 126 bytes
Programa completo con casos de prueba:
Se implementa la división de enteros. Se pueden usar números de cualquier tamaño, debido al
BigInteger
tipo de datos (System.Numerics
se requiere la importación ). El parámetro de recuento de dígitosc
está restringido a 2 ^ 31-1, sin embargo, debe proporcionar dígitos más que suficientes.fuente
Groovy (
787742 Bytes)Explicación
Eval.me(a+'.0g');
- Convertir de entrada entera a entrada BigDecimal. En groovy, la notación BigDecimal es doble con una G o g adjunta. También podría haber usado el constructor,new BigDecimal(it)
pero esto salvó un byte..divide(b, n, 1)
- Dividir por b con n precisión, redondeando a la mitad.Pruébelo aquí: https://groovyconsole.appspot.com/script/5177545091710976
fuente
Lote, 122 bytes
fuente
Mathematica, 50 bytes
Función sin nombre de los tres argumentos (que están ordenados
c
,a
,b
para guardar un byte de alguna parte), que devuelve una cadena. Se multiplicaa/b
por10^c
, toma la función entera más grande, luego se convierte en una cadena e inserta un punto decimal en el lugar apropiado. Lástima que los nombres de las funciones no sean más cortos.fuente
Python 3, 62 Bytes
Pruébalo aquí
* Nota : repl.it usa una versión anterior de Python 3 , que requiere que se especifiquen todos los índices de campo, lo
"{:.{1}f}"
que significa que en su"{0:.{1}f}"
lugar será 63 bytes en repl.itCómo utilizar
Ingrese los tres valores con espacios intermedios. es decir, una entrada de
1 2 1
daría un resultado de0.5
Explicación
input().split()
: Obtiene la entrada del usuario y la divide en una lista con un separador de (espacio)a,b,c = map(int,XX)
: Asigna las variables a los valores especificados por el usuario con un tipo int"{:.{1}f}".format(a/b,c)
: Formatea una cadena para mostrar el resultado de la división y la sustituye{1}
porc
para ajustar la posición decimal de la cadena mostradaprint(XX)
: imprime la cadena suministradafuente
Python 3 , 58 bytes
Pruébalo en línea!
Esto es preciso para el número especificado de decimales siempre que
a * 10 ** c
no sea demasiado grande.Intenté Python 2 para acortar el
str(...)
to`...`
pero Python 2 inserta unL
al final si es demasiado grande, por lo que verificar eso tomaría más bytes de lo que vale.fuente
Stax , 13 bytes
Ejecutar y depurarlo
Los argumentos son aceptados en
c a b
orden.fuente
C, 67 bytes
Pruébalo en línea!
Creo que alguna versión anterior tenía un error en la memoria de lectura asignada al programa ... Gracias a ceilingcat y por todo ...
fuente