Было много вопросов, связанных с калькуляторами; однако, похоже, что это не связано с реализацией графического калькулятора.
Соревнование
Вы должны написать полную программу, которая принимает несколько формул в качестве входных данных из STDIN и отображает их в STDOUT. Ввод примет форму f1(x)=x^2-x-1
. После этого будет f
число 0-9 (включительно), за которым (x)=
следует формула для построения графика. Ваша программа должна быть способна принимать данные, графики, больше данных, графики и т. Д.
Это код гольф.
Ваш график должен иметь диапазон оси X от -5 до 5 с разрешением не менее одной точки на каждые 1/2 единицы. Требования по оси Y одинаковы. Это может показаться небольшим диапазоном по сравнению с современными калькуляторами, но, скорее всего, его увеличение будет тривиальным. На графике должна быть нарисована ось с отметками в виде +
целых чисел.
Формула должна быть оценена с нормальным порядком работы. В этих формулах не будет никаких вертикальных асимптот / неопределенных областей. Переменная всегда будет х. Если две формулы вводятся с одним и тем же номером уравнения, самую старую следует удалить и заменить новой формулой. Пустые формулы должны оцениваться до нуля. Поскольку вполне вероятно, что формула не всегда дает хороший кратный 1/2, вы должны округлить до ближайшего 1/2.
Когда формула построена, ее строка должна быть сформирована из номера формулы. Когда линия пересекает ось, ось должна быть нарисована сверху. Когда две линии пересекаются друг с другом, не имеет значения, что показано.
Пример ввода
f1(x)=x+1
Выход
+ 1
| 1
+ 1
| 1
+ 1
| 1
+ 1
|1
+
1|
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
вход
f2(x)=(x^2)^0.25
Выход
+ 1
| 1
+ 1
| 1
+ 1
| 1
2222 + 1 2222
222 |1 222
22 + 22
2|2
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
вход
f1(x)=-x
(обратите внимание, что ваша программа может отклонить этот ввод и только за исключением 0-x или x * -1, но это должно быть задокументировано)
Выход
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
чтобыy/2
и избавиться от двух персонажей? Я не знаю Руби, поэтому я могу быть не прав.