Było wiele pytań dotyczących kalkulatorów; jednak nie wydaje się, aby jakiekolwiek obejmowały wdrożenie kalkulatora graficznego.
Wyzwanie
Masz napisać kompletny program, który pobiera wiele formuł jako dane wejściowe z STDIN i zapisuje je w STDOUT. Dane wejściowe przyjmą formę f1(x)=x^2-x-1
. Pojawią f
się cyfry 0–9 (włącznie), a (x)=
następnie formuła do wykresu. Twój program powinien być w stanie pobierać dane wejściowe, wykresy, dane wejściowe, wykresy itp.
To jest kod golfowy.
Twój wykres powinien mieć zakres osi X od -5 do 5, z rozdzielczością co najmniej jednego punktu co 1/2 jednostki. Wymagania względem osi Y są takie same. Może się to wydawać małym zasięgiem w porównaniu do współczesnych kalkulatorów, ale najprawdopodobniej zwiększenie tego będzie trywialne. Na wykresie powinna być narysowana oś z zaznaczonymi znacznikami w postaci +
liczb całkowitych.
Formułę należy oceniać w normalnej kolejności działania. W tych formułach nie będzie żadnych pionowych asymptot / niezdefiniowanych regionów. Zmienna zawsze będzie miała wartość x. Jeśli dwie formuły zostaną wprowadzone z tym samym numerem równania, najstarszy należy usunąć i zastąpić nową formułą. Puste formuły powinny być wyzerowane. Ponieważ jest prawdopodobne, że formuła nie zawsze da ładną wielokrotność 1/2, należy zaokrąglić do najbliższej 1/2.
Kiedy formuła jest wykreślana, jej linia powinna być utworzona z liczby formuły. Gdy linia przecina oś, oś należy narysować na górze. Kiedy dwie linie przecinają się, nie ma znaczenia, który jest pokazany.
Przykładowe dane wejściowe
f1(x)=x+1
Wynik
+ 1
| 1
+ 1
| 1
+ 1
| 1
+ 1
|1
+
1|
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
Wejście
f2(x)=(x^2)^0.25
Wynik
+ 1
| 1
+ 1
| 1
+ 1
| 1
2222 + 1 2222
222 |1 222
22 + 22
2|2
+-+-+-+-+-+-+-+-+-+-+
1 |
1 +
1 |
1 +
1 |
1 +
1 |
1 +
|
+
Wejście
f1(x)=-x
(uwaga, program może odrzucić to wejście i tylko z wyjątkiem 0-x lub x * -1, ale należy to udokumentować)
Wynik
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
sięy/2
i pozbyć dwóch postaci? Nie znam Ruby, więc może nie mam racji.y/2
dokonuje podziału na liczby całkowite.loop{}
zamiast()while 1
?Python 2: 320 znaków
Prawdopodobnie może być krótszy, ale jestem trochę nowicjuszem :)
Tworzenie
N
zmiennej marnuje 9 znaków, ale podoba mi się to bardziej.źródło