Zastosuj całkę nieoznaczoną do danego ciągu. Jedyne reguły, których będziesz używać, są zdefiniowane jako takie:
∫cx ^ (n) dx = (c / (n + 1)) x ^ (n + 1) + C, n ≠ -1 c, C i n są stałymi.
Dane techniczne:
- Musisz być w stanie zintegrować wielomiany z dowolną z możliwych funkcji:
- Współczynnik, być może ułamek formatu
(numerator/denominator)
. - Rozpoznanie, że e i π są stałymi, a przy ich użyciu mogą być w stanie tworzyć ułamki lub wyrażenia je zawierające (mogą być przechowywane w ułamkach takich jak
(e/denominator)
lub(numerator/e)
, lub w wykładnikachx^(e+1)
)- Oprócz tych dwóch specjalnych stałych wszystkie współczynniki będą liczbami wymiernymi, rzeczywistymi.
- Wykładnik, być może ułamek, w formacie
x^(exponent)
- Wyrażenia z
e
lubπ
w nich, poza sobą, nie będą w wykładnikach. (nie będziesz musiał integrować takich rzeczyx^(e+1)
, ale możesz się zintegrowaćx^(e)
)
- Wyrażenia z
- Może używać zmiennych innych niż x 1-char (tj.
f
)- Dotyczy to tylko zakresów ASCII 65–90 i 97–122.
- Nie musisz używać reguły łańcuchowej ani integracji
x^(-1)
.
- Współczynnik, być może ułamek formatu
- Dane wyjściowe muszą mieć wypełnienie (separacja między terminami, tj
x^2 + x + C
. - Jeśli nie wiadomo, jak zintegrować się z powyższymi funkcjami, program powinien wydrukować
"Cannot integrate "+input
. - To musi być pełny program.
Bonusy:
- -10%, jeśli wydrukujesz „ładne” wykładniki sformatowane dla markdown (zamiast
x^2
,x<sup>2</sup>
). - -10%, jeśli wydrukujesz równanie (tj.
∫xdx = (1/2)x^2 + C
)
Przykłady:
Wkład:
x
Wydajność:
(1/2)x^(2) + C
Wkład:
-f^(-2)
Wydajność:
f^(-1) + C
Wkład:
(1/7)x^(1/7) + 5
Wydajność:
(1/56)x^(8/7) + 5x + C
Wkład:
πx^e
Wydajność:
(π/(e+1))x^(e+1) + C
Wkład:
(f+1)^(-1)
Wydajność:
Cannot integrate (f+1)^(-1)
e
iπ
jedynymi wartościami współczynników będą liczby wymierne? Czyli nie jest konieczne obsługiwanie wielomianów wielowymiarowych? 2. Kiedy mówisz „ zmienne inne niż x 1-char ”, czy ograniczasz się,a-zA-Z
czy zamierzasz uwzględnić inne zakresy Unicode?ln(x) + C
dane wejściowex^(-1)
?x^(e+1)
nie będzie to integrand, ale może być wynikiem integracji. 2) Nie będzie wielu zmiennych literowych. 3) Tak. 4) Tak, ale powinno być(1/56)x^(1/7+1) + C
(popełniłem błąd w przykładach).Odpowiedzi:
Mathematica 478 * 0,9 = 430,2
To tworzy prawdziwą funkcję φ, która przyjmuje jeden ciąg jako dane wejściowe. (Czy to się liczy jako kompletny program dla Mathematica?)
Wersja bez golfa to:
Zauważ, że greckie litery są niezbędne, aby móc używać wszystkich pozostałych liter na wejściu.
źródło
MATLAB, 646 x 0,9 = 581,4 bajtów
Jest to obecnie praca w toku z wykorzystaniem MATLAB-ów wbudowanych w funkcje symbolicznej integracji. Obecnie wymagania zostały zaktualizowane, więc format jest teraz zgodny z wymaganiami. To także kwalifikuje się do drugiego bonusu -10%.
Jeśli ktoś chce zgłosić i zasugerować sposoby korekty danych wyjściowych lub użyć tego kodu jako podstawy do kolejnej odpowiedzi, nie krępuj się :). Jeśli znajdę czas, będę się z nim bawił i sprawdzę, czy uda mi się sformatować wyjście.
Aktualizacja: Ok, więc po trochę więcej pracy, oto jak obecnie wygląda kod. Nadal jest w toku, ale teraz jest coraz bliżej dopasowania wymaganej wydajności.
Oto kilka przykładów tego, co obecnie produkuje. Jak widać, nie jest to w porządku, ale coraz bliżej.
Wejścia:
Wyjścia:
źródło
x^(8/7)/8
choć poprawne matematycznie nie jest w takiej formie, w jakiej chcesz -(1/8)x^(8/7)
.