Houve muitas perguntas envolvendo calculadoras; no entanto, não parece haver nenhum envolvimento na implementação de uma calculadora gráfica.
O desafio
Você deve escrever um programa completo que use várias fórmulas como entrada de STDIN e as represente graficamente em STDOUT. A entrada assumirá o formato f1(x)=x^2-x-1
. Haverá um f
seguido por um número de 0 a 9 (inclusive), seguido por (x)=
, seguido pela fórmula para representar graficamente. Seu programa deve poder receber entradas, gráficos, receber mais entradas, gráficos etc.
Isso é código de golfe.
Seu gráfico deve ter o intervalo do eixo X de -5 a 5, com uma resolução de pelo menos um ponto a cada 1/2 unidade. Os requisitos do eixo Y são os mesmos. Isso pode parecer um intervalo pequeno comparado às calculadoras modernas, mas provavelmente será trivial em aumentar isso. O gráfico deve ter o eixo desenhado neles, com marcas de escala na forma de +
números inteiros.
A fórmula deve ser avaliada com a ordem normal de operação. Não haverá assíntotas verticais / regiões indefinidas nessas fórmulas. A variável será sempre x. Se duas fórmulas forem inseridas com o mesmo número de equação, a mais antiga deve ser apagada e substituída pela nova fórmula. Fórmulas em branco devem ser avaliadas como zero. Como é provável que a fórmula nem sempre dê um bom múltiplo de 1/2, você deve arredondar para o 1/2 mais próximo.
Quando uma fórmula é representada graficamente, sua linha deve ser formada a partir do número da fórmula. Quando uma linha cruza um eixo, o eixo deve ser desenhado por cima. Quando duas linhas se cruzam, não importa qual é mostrado.
Exemplo de entrada
f1(x)=x+1
Resultado
+ 1
| 1
+ 1
| 1
+ 1
| 1
+ 1
|1
+
1|
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
Entrada
f2(x)=(x^2)^0.25
Resultado
+ 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
(observe que é aceitável que seu programa rejeite essa entrada e apenas exceto 0-x ou x * -1, mas isso deve ser documentado)
Resultado
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
paray/2
e se livrar de dois caracteres? Não conheço Ruby, então posso não estar certo.