Ha habido muchas preguntas relacionadas con calculadoras; sin embargo, no parece que ninguno implique implementar una calculadora gráfica.
El reto
Debe escribir un programa completo que tome múltiples fórmulas como entrada de STDIN y las grafica en STDOUT. La entrada tomará la forma f1(x)=x^2-x-1
. Habrá f
seguido de un número 0-9 (inclusive), seguido de (x)=
, seguido de la fórmula para representar gráficamente. Su programa debería ser capaz de tomar entradas, gráficos, tomar más entradas, gráficos, etc.
Este es el código de golf.
Su gráfico debe tener el rango del eje X de -5 a 5, con una resolución de al menos un punto cada 1/2 unidad. Los requisitos del eje Y son los mismos. Esto puede parecer un rango pequeño en comparación con las calculadoras modernas, pero lo más probable es que sea trivial para aumentar esto. El gráfico debe tener el eje dibujado sobre ellos, con marcas de verificación en forma de +
números enteros.
La fórmula debe evaluarse con el orden normal de operación. No habrá asíntotas verticales / regiones indefinidas en estas fórmulas. La variable siempre será x. Si se ingresan dos fórmulas con el mismo número de ecuación, la más antigua debe borrarse y reemplazarse con la nueva fórmula. Las fórmulas en blanco deben evaluar a cero. Como es probable que la fórmula no siempre dé un buen múltiplo de 1/2, debe redondear al 1/2 más cercano.
Cuando se representa gráficamente una fórmula, su línea debe formarse a partir del número de la fórmula. Cuando una línea cruza un eje, el eje debe dibujarse en la parte superior. Cuando dos líneas se cruzan, no importa cuál se muestre.
Entrada de ejemplo
f1(x)=x+1
Salida
+ 1
| 1
+ 1
| 1
+ 1
| 1
+ 1
|1
+
1|
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
Entrada
f2(x)=(x^2)^0.25
Salida
+ 1
| 1
+ 1
| 1
+ 1
| 1
2222 + 1 2222
222 |1 222
22 + 22
2|2
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
Entrada
f1(x)=-x
(tenga en cuenta que es aceptable que su programa rechace esta entrada y solo excepto 0-x o x * -1, pero esto debe documentarse)
Salida
1 +
1 |
1 +
1 |
1 +
1 |
2222 1 + 2222
2221 | 222
22 + 22
2|2
+-+-+-+-+-+-+-+-+-+-+
|1
+ 1
| 1
+ 1
| 1
+ 1
| 1
+ 1
| 1
+ 1
y*0.5
ay/2
y deshacerse de dos personajes? No conozco a Ruby, así que puede que no tenga razón.y/2
hace división entera.loop{}
lugar de()while 1
?Python 2: 320 caracteres
Probablemente podría acortarse, pero soy un poco novato en esto :)
Hacer
N
una variable desperdicia 9 caracteres, pero así me gusta más.fuente