Dado un decimal en forma de <float>, <precision>
, dibuja la representación gráfica de la parte decimal (es decir, fracción) del flotador. Ejemplos:
Entrada:
6.75, 4
salida:6||| 7 ----
6.75
(primer número de la entrada) es el número a explicar,4
(el segundo número de la entrada) es el número de guiones debajo de las tuberías.6
es el piso 6.75,7
es el techo6.75
. El número de tuberías es eldecimal part of first input number * second input number
.Entrada:
10.5, 6
salida:10||| 11 ------
Entrada:
20.16, 12
salida20|| 21 ------------
.16
en realidad toma 1.92 tuberías, pero como no puedo dibujar 1.92 tuberías, lo limito a 2.Entrada:
1.1, 12
salida:1| 2 ------------
.1
es de 1.2 tubos en este caso, por lo que tiene un piso de 1 tuboAdemás, un caso de borde. Entrada:
5, 4
(es decir, el número es un entero), salida:5 6 ----
- El número a explicar es la flotación positiva, limitada solo por sus habilidades lingüísticas.
- El número de precisión es un entero par, mayor que 2 (es decir, la precisión mínima requerida es 4). También puede ser arbitrariamente grande.
- > = n.5 tuberías se redondean hacia arriba, a n + 1 (es decir, 1.5 se redondea a 2 y 2.5 se redondea a 3). <n.5 tuberías se redondean a n (es decir, 1.4 se redondea a 1 y 2.4 se redondea a 2).
- Si fuera más conveniente para su idioma, puede tomar la entrada como una matriz, por ejemplo
[6.75, 4]
. Si toma la entrada en el orden inverso, es decir[4, 6.75]
, especifíquela en su respuesta.
5.0 4
: ¿se dibuja a partir5
de6
o desde4
que5
, o bien es aceptable? Entrada1.25 2
: ¿tiene 0 o 1|
s, y por qué (es decir, cuál es la regla de redondeo)? ¿El primer número en la entrada tiene que ser positivo? ¿Cuál es su máxima precisión y magnitud? ¿El segundo número en la entrada tiene que ser positivo? Si es negativo, ¿retrocedemos?Respuestas:
CJam, 32 bytes
Toma la precisión primero y el segundo decimal, separados por un espacio.
Ejecute todos los casos de prueba.
Explicación
fuente
Mathematica, 119 bytes
Lo intenté ... Prueba:
fuente
Japt,
4746 bytesSolo un montón de sumar y repetir.
Pruébalo en línea
fuente
(U-Uf)
es lo mismo queU%1
guardar dos bytes.Java,
253206181 bytesAhorré 47 bytes gracias a @Kenney al alinear las condiciones y las variables utilizadas una vez, y al ordenar las variables redundantes.
Ahorré 25 bytes nuevamente gracias a @Kenney al alinear 2 bucles con operadores ternarios.
Manipulación de cuerda pura:
Versión de bucles en línea (181 bytes):
Versión de 4 bucles (206 bytes):
Versión sin golf:
Ejemplo de trabajo aquí en ideone.com . El programa completo acepta la entrada STDIN como
<float>,<precision>
.NOTA: las
Math.round(float)
rondas de Java se usanRoundingMode.HALF_UP
por defecto, que es el comportamiento requerido del OP.El resultado de los casos de prueba proporcionados coincidió con lo que proporcionó el OP.
fuente
a
(nunca usado), que en la configuración 233. Se podría ahorrar otros 23 para llegar a los 210 bytes: la sustitución deq.length()
lab
guarda 13:int g=(int)f, b=(""+g).length(), c=b, i=0;
. Incrementar el iterador en la condición de lafor
guarda 6, y inliningd
(usado una vez) ataja 4:int c = b; for(;i++<b;)h+=" "; for(;i++<=b+p;)h+="-"; for(i=c;i<c+Math.round((f-g)*p);i++)q+="|"; for(;i++<p+b;)q+=" ";
.\n
b
se convirtió en obsoleta aswell ;-) Todavía puede ahorro 1 byte en el segundo para:for(;i++<=c+p;)
. Usted podría guardar el archivo con los finales de línea de UNIX en Windows, pero por desgracia Java no permite líneas múltiples ..for(;i<c+p;)h+=i++<c?" ":"-";for(i=c;i<p+c;)q+=i++<c+Math.round((f-g)*p)?"|":" ";
Javascript ES6,
105104 bytesGuardado 1 byte gracias a, um, ¿cómo se escribe ՊՓԼՃՐՊՃՈԲՍԼ de todos modos?
fuente
(f,p)=>(i=f|0)+("|"[r="repeat"](j=(f-i)*p+.5|0)+" "[r](p-j))+(i+1)+("\n"+i).replace(/\d/g," ")+"-"[r](p)
\n
con una nueva línea real. Y asegúrese de envolverlo en cadenas de plantilla.Haskell, 113 bytes
Ejemplo de uso:
properFraction
divide el decimal en su parte entera y fracción. La salida es una lista de las partes (número inicial, barras, espacios, ...) que se concatenan en una sola cadena (vía>>=id
).fuente
main
contenedor para un programa completo).MATL , 49 bytes
Utiliza la versión 6.0.0 del lenguaje / compilador. Se ejecuta en Matlab u Octave.
Toma los números en el mismo orden que en el desafío.
Ejemplos
Explicación
fuente
Perl, 90 bytes
Espera entrada como argumentos de línea de comandos. Guardar en un archivo (digamos
90.pl
) y ejecutar comoperl 90.pl 6.75 4
Con comentarios
fuente
Stackgoat ,
3127 bytesSimilar a la mayoría de las otras respuestas. Veré si puedo jugar más al golf. La entrada puede estar separada por comas, espacio o casi cualquier cosa.
No compite porque Stackgoat se hizo después de este desafío
Explicación
fuente
Lua, 157 bytes
Largo, pero no puedo encontrar una solución más corta
Sin golf
Puede probar lua en línea , los siguientes casos de prueba podrían ser útiles :)
fuente
C,
233231 bytesSin golf:
fuente
Python 3,
116108bytesenlace trinket.io
Gracias a Seeq por guardar algunos caracteres.
Primera versión:
Versión sin golf:
fuente
;
. Solo lo usah
una vez, por lo que también debe incluirlo en línea. Debería salvar algunos caracteres.h
es más complicado. Para que la concatenación y lalen
función en las dos últimas filas funcionen,l
debe ser una cadena, porh
lo que debería reemplazarse porstr(int(l)+1)
. La configuraciónh
antes de la conversiónl
guarda algunos caracteres.