File size: 1,847 Bytes
cc646d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from sympy import *
from sympy.abc import a, b, x
from output_util import to_latex, sign2cmp
from sgntools import lin_func_sgn
from solution import *

_data = {
    1: {"constant_term": 3 * a - 8 * b, "e_term": -a + 3 * b},
    2: {"constant_term": -38 * a + 174 * b, "e_term": 14 * a - 64 * b},
    3: {"constant_term": 1158 * a - 7584 * b, "e_term": -426 * a + 2790 * b},
    4: {"constant_term": -65304 * a + 557400 * b, "e_term": 24024 * a - 205056 * b},
    5: {
        "constant_term": 5900520 * a - 62118720 * b,
        "e_term": -2170680 * a + 22852200 * b,
    },
    6: {
        "constant_term": -780827760 * a + 9778048560 * b,
        "e_term": 287250480 * a - 3597143040 * b,
    },
}


class EIntegrate(GetIntegrateFromData):
    # sympy 算力不够,以下由 MMA 算出
    data = _data

    def get_integrate_args(self, n):
        return x**n * (1 - x) ** n * (a + b * x) * exp(x), (x, 0, 1)


class ESolution(Solution):
    def __init__(self, p, q):
        self.p = p
        self.q = q

        if self.q == 0:
            raise BadInput()

        self.get_integrate = EIntegrate()
        self.symbols = (a, b)

        self.integrate_result_classes_eq = {
            "e_term": q,
            CONSTANT_TERM_KEY: -p,
        }
        # check
        self.check_sgn = lin_func_sgn

    @staticmethod
    def get_tries_args():
        return EIntegrate.data.keys()

    def get_latex_ans(self):
        try_arg, symbol_val, sgn = self.try_times()
        print(f"{(try_arg, symbol_val, sgn)=}")

        if try_arg is None:
            return None

        p = to_latex(self.p)
        q = to_latex(self.q, is_coeff=True)
        I = self.get_integrate.get_latex(try_arg, symbol_val)
        return rf"{q}e-{p} = {I} {sign2cmp[sgn]} 0"


register("e", ESolution)


if __name__ == "__main__":
    print(ESolution(25, 9))