#Continuing Education - Search Algorithms
#Exercises written by Peter Jang

#Exercise 1
def LinearSearch(list, element):
    """
    input: (list, int)
    list: list containing elements to search
    element: integer being searched for
    
    returns: tuple - (list, int)
    If the element does not exist in the list return the searched list and None (list, None)
    list: the list of elements that have been searched
    int: the index at which the element was found

    CHALLENGE: Complete this exercise using recursion
    """
    #TODO
    #Write your code here
    pass

#Exercise 2
def BinarySearch(list, element):
    """
    input: (list, int)
    list: sorted list containing elements to search
    element: integer being searched for

    returns: tuple - (list, int)
    If the element does not exist in the list return the searched list and None (list, None)
    list: the list of elements that have been searched
    int: the index at which the element was found

    CHALLENGE: Complete this exercise using recursion
    """
    #TODO
    #Write your code here
    pass

#Exercise 3
def BreadthFirstSearch(graph, start, goal):
    """
    input: (dictionary, string, string)
    graph: dictionary containing the graph structure
    start: string representing the node to start the search
    goal: string representing the node to find

    returns: tuple - (list(list), list)
    If the goal node does not exist in the graph return the searched list and None (list(list), None)
    list(list): the list of lists that contain the paths the algorithm has searched through
    list: the actual path the algorithm took to find the goal node

    CHALLENGE: Complete this exercise using recursion
    """
    #TODO
    #Write your code here
    pass

#Exercise 4
def DepthFirstSearch(graph, start, goal):
    """
    input: (dictionary, string, string)
    graph: dictionary containing the graph structure
    start: string representing the node to start the search
    goal: string representing the node to find

    returns: list
    If the element does not exist in the graph return None
    list: the actual path the algorithm took to find the goal node

    CHALLENGE: If you used recursion to complete this problem, use a loop of your choice to as a challenge;
               If you used a loop to complete this problem, use recursion as a challenge
    """
    #TODO
    #Write your code here
    pass