"""DuckieDai Exponential Transform Solver for TI-84 Plus CE Python."""

def duckiedai_intro(program_name):
    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...")
    input("Press enter ")
    print("\n" * 7)


def pause():
    input("\nPress enter ")
    print("\n" * 7)


def num(prompt):
    while True:
        try:
            return float(input(prompt))
        except:
            print("Enter a number.")


def fmt(n):
    if abs(n) < 0.000001:
        n = 0

    if n == int(n):
        return str(int(n))

    return str(round(n, 4))


def run_solver():
    print("STANDARD FORM")
    print("")
    print("y = a*b^(x-h)+k")
    print("")
    print("a = multiplier")
    print("b = base")
    print("h = left/right")
    print("k = up/down")
    pause()

    while True:
        a = num("a? ")

        if a == 0:
            print("a cannot be 0.")
            continue

        b = num("b? ")

        if b <= 0 or b == 1:
            print("b must be > 0")
            print("and not equal 1.")
            continue

        h = num("h? ")
        k = num("k? ")
        break

    print("\n" * 7)
    print("BEHAVIOR")
    print("")

    if b > 1:
        print("Base: GROWTH")
    else:
        print("Base: DECAY")

    if a < 0:
        print("Reflect over")
        print("x-axis")
    else:
        print("No x-axis flip")

    aa = abs(a)

    if aa > 1:
        print("Vertical stretch")
        print("by " + fmt(aa))
    elif aa < 1:
        print("Vertical shrink")
        print("by " + fmt(aa))
    else:
        print("No stretch")

    pause()

    print("SHIFTS")
    print("")

    if h > 0:
        print("Right " + fmt(h))
    elif h < 0:
        print("Left " + fmt(abs(h)))
    else:
        print("No left/right")

    if k > 0:
        print("Up " + fmt(k))
    elif k < 0:
        print("Down " + fmt(abs(k)))
    else:
        print("No up/down")

    print("")
    print("ASYMPTOTE")
    print("y = " + fmt(k))

    pause()

    print("DOMAIN")
    print("(-inf, inf)")
    print("")
    print("RANGE")

    if a > 0:
        print("(" + fmt(k) + ", inf)")
    else:
        print("(-inf, " + fmt(k) + ")")

    print("")
    yint = a * (b ** (-h)) + k
    print("Y-INTERCEPT")
    print("(0, " + fmt(yint) + ")")

    pause()

    print("GRAPH POINTS")
    print("")

    x1 = h - 1
    y1 = a * (b ** -1) + k

    x2 = h
    y2 = a + k

    x3 = h + 1
    y3 = a * b + k

    print("(" + fmt(x1) + ", " + fmt(y1) + ")")
    print("(" + fmt(x2) + ", " + fmt(y2) + ")")
    print("(" + fmt(x3) + ", " + fmt(y3) + ")")

    print("")
    print("HA: y = " + fmt(k))


duckiedai_intro("Exp Transform")

while True:
    run_solver()

    print("")
    again = input("Again? y/n: ")

    if again.lower() != "y":
        break

    print("\n" * 7)

print("\nDuckieDai says:")
print("done!")
