"""DuckieDai Quadratic Inequality Solver for TI-84 Plus CE Python."""

from math import sqrt


def duckiedai_intro(program_name, wait=True):
    title = program_name[:16]
    empty = 16 - len(title)
    left = empty // 2
    right = empty - left

    print("+----------------------+")
    print("|   " + " " * left + title + " " * right + "   |")
    print("|                      |")
    print("|       __             |")
    print("|   ___(o )>  quack!   |")
    print("|   \\ <_. )           |")
    print("|    `---'             |")
    print("|     by DuckieDai     |")
    print("| hiddenwordscanner.com|")
    print("+----------------------+")
    print("Loading...")

    if wait:
        input("Press enter to start ")
        print("\n" * 8)


def gcd(a,b):
    a=abs(a)
    b=abs(b)
    while b:
        a,b=b,a%b
    return a

def rat(n,d):
    if d<0:
        n=-n
        d=-d
    g=gcd(n,d)
    n//=g
    d//=g
    if d==1:
        return str(n)
    return str(n)+"/"+str(d)

def radroot(a,b,d,sgn):
    # simplify sqrt(d)
    k=1
    i=int(sqrt(d))
    while i>1:
        if d%(i*i)==0:
            k=i
            break
        i-=1

    r=d//(k*k)

    A=-b
    B=sgn*k
    C=2*a

    g=gcd(gcd(A,B),C)

    if g!=0:
        A//=g
        B//=g
        C//=g

    if C<0:
        A=-A
        B=-B
        C=-C

    if abs(B)==1:
        term="sqrt("+str(r)+")"
    else:
        term=str(abs(B))+"*sqrt("+str(r)+")"

    if A==0:
        if B<0:
            top="-"+term
        else:
            top=term
    else:
        if B<0:
            top=str(A)+"-"+term
        else:
            top=str(A)+"+"+term

    if C==1:
        return top

    return "("+top+")/"+str(C)


duckiedai_intro("Quad Inequality")

a=int(input("a: "))
b=int(input("b: "))
c=int(input("c: "))

print("1 >0")
print("2 >=0")
print("3 <0")
print("4 <=0")
op=input("Choice: ")

d=b*b-4*a*c

if d>0:

    q=int(sqrt(d))

    if q*q==d:
        n1=-b-q
        n2=-b+q
        den=2*a

        v1=n1/den
        v2=n2/den

        s1=rat(n1,den)
        s2=rat(n2,den)

    else:
        v1=(-b-sqrt(d))/(2*a)
        v2=(-b+sqrt(d))/(2*a)

        s1=radroot(a,b,d,-1)
        s2=radroot(a,b,d,1)

    if v1>v2:
        v1,v2=v2,v1
        s1,s2=s2,s1

    print("Roots:")
    print(s1)
    print(s2)
    print("Solution:")

    if a>0:
        if op=="1":
            print("(-inf,"+s1+")")
            print("U ("+s2+",inf)")
        elif op=="2":
            print("(-inf,"+s1+"]")
            print("U ["+s2+",inf)")
        elif op=="3":
            print("("+s1+","+s2+")")
        else:
            print("["+s1+","+s2+"]")

    else:
        if op=="1":
            print("("+s1+","+s2+")")
        elif op=="2":
            print("["+s1+","+s2+"]")
        elif op=="3":
            print("(-inf,"+s1+")")
            print("U ("+s2+",inf)")
        else:
            print("(-inf,"+s1+"]")
            print("U ["+s2+",inf)")

elif d==0:

    s=rat(-b,2*a)

    print("Root:",s)
    print("Solution:")

    if a>0:
        if op=="1":
            print("(-inf,"+s+")")
            print("U ("+s+",inf)")
        elif op=="2":
            print("ALL REAL")
        elif op=="3":
            print("EMPTY SET")
        else:
            print("{"+s+"}")
    else:
        if op=="1":
            print("EMPTY SET")
        elif op=="2":
            print("{"+s+"}")
        elif op=="3":
            print("(-inf,"+s+")")
            print("U ("+s+",inf)")
        else:
            print("ALL REAL")

else:

    print("No real roots")
    print("Solution:")

    if a>0:
        if op=="1" or op=="2":
            print("ALL REAL")
        else:
            print("EMPTY SET")
    else:
        if op=="3" or op=="4":
            print("ALL REAL")
        else:
            print("EMPTY SET")
