コード例 #1
0
def test_one_number():
    """
    Verify that one number can form target
    """
    o = OperationGuess()
    for i in range(100):
        assert o.solve((i, ), i) == str(i)
コード例 #2
0
def test_failing():
    o = OperationGuess()
    product = 1
    numbers = (3, 3, 2, 10, 5)
    for number in numbers:
        product *= number
    assert o.solve(numbers, product + 1) == "Impossible"
コード例 #3
0
def test_increase():
    """
    Given 50, 25, 2, i
    (50/25)/2 + i == i + 1
    """
    o = OperationGuess()
    for i in range(100):
        assert o.solve((50, 25, 2, i), i + 1) != 'Impossible'
コード例 #4
0
def test_edge_two():
    """
    Check that we can detect
    ((99 + 11) / 11 + 1) * 888
    """
    o = OperationGuess()
    numbers = (99, 11, 11, 1, 888)
    val = o.solve(numbers, 9768)
    assert val != "Impossible"
コード例 #5
0
def test_edge():
    """
    Check that we can detect
    (999 - 44 - 79 * 501) * 203
    """
    o = OperationGuess()
    numbers = (999, 44, 79, 501, 203)
    val = o.solve(numbers, -7840672)
    assert val != "Impossible"
コード例 #6
0
def test_evaluation(t: tuple, n: int):
    """
    Test that an expression results in <n>
    is either found correctly using <t>,
    or is impossible
    """
    o = OperationGuess()
    expr = o.solve(t, n)
    assert expr == "Impossible" or eval(expr) == n
コード例 #7
0
def test_inclusion(t: tuple, n: int):
    """
    Verify that any expression generated by
    o.solve is impossible, or includes all
    the numbers in the tuple <t>
    """
    o = OperationGuess()
    expr = o.solve(t, n)
    if expr != "Impossible":
        for item in t:
            assert str(item) in expr
コード例 #8
0
def test_exceed():
    """Verify that the program cannot
    exceed the maximum generated value """
    numbers = tuple()
    product = 1
    for _ in range(5):
        rn = random.randint(2, 10)
        product *= rn
        numbers = numbers + (rn, )

    o = OperationGuess()
    assert o.solve(numbers, product + 1) == "Impossible"
コード例 #9
0
def test_sum_difference():
    """
    Let j be a random number
    We want to verify that
    [j, j+1, j+2, 4, 6, 7]
    Can always be evaluated to:
    (j + j + 1 + j + 2) - (4 - 6 + 7)
    """
    o = OperationGuess()
    for j in range(1, 10):
        numbers = (4, 6, 7, j, j + 1, j + 2)
        target = (j + j + 1 + j + 2) - (4 - 6 + 7)
        assert o.solve(numbers, target) != "Impossible"
コード例 #10
0
import time
from solver import OperationGuess
import random

# AVERAGE CASE
o = OperationGuess()
for i in range(10, 100, 10):
    o.reset_memory()
    lst = [random.randint(0, 10) for _ in range(i)]
    t = tuple(lst)
    print("lst size = {} target = 50".format(len(lst)))
    s = time.time()
    o.solve(t, 50)
    e = time.time()
    print("Memory Time: {}".format(e - s))


# WORST CASE
# o = OperationGuess()
# for i in range(3, 100):
#     o.reset_memory()
#     lst = []
#     MAX = 1
#     for _ in range(i):
#         rn = random.randint(2, 10)
#         lst.append(rn)
#         MAX *= rn
#
#     t = tuple(lst)
#     print("lst size = {} target = {}".format(len(lst), MAX))
#     s = time.time()
コード例 #11
0
"""
This module represents the completed solution of the original prompt
suggested by the prompt list.
"""

from solver import OperationGuess as StrategicSolver

print("""Given a sequence of numbers, and a target value, the program
will return an arithmetic expression in target. """)
curr_number = ""
numbers = ()
while curr_number != "q":
    curr_number = input("Enter an integer (q to exit): ")
    if curr_number == 'q':
        break
    try:
        curr_number = int(curr_number)
        numbers = numbers + (curr_number, )
    except ValueError:
        print("Invalid value, please try again")

target = int(input("Enter target value: "))

s = StrategicSolver()
expr = s.solve(numbers, target)
print("Numbers Entered: {}".format(str(numbers)))
print("Target Entered: {}".format(str(target)))
print("Solution: {}".format(expr))
コード例 #12
0
def test_failing2():
    o = OperationGuess()
    numbers = (5, 5, 0)
    assert o.solve(numbers, 1000) == "Impossible"
コード例 #13
0
def test_nested():
    o = OperationGuess()
    val = o.solve((55, 2, 3, 1, 18), 360)
    assert val != "Impossible"
コード例 #14
0
def test_division():
    o = OperationGuess()
    val = o.solve((1000, 25, 2, 2), 21)
    assert val != "Impossible"