def ej15():
    print('Ingrese los valores de la lista M:')
    M = func.carganormal()
    print('\nIngrese los valores de la lista N:')
    N = func.carganormal()
    ordM = func.deteccion_de_orden(M)
    ordN = func.deteccion_de_orden(N)
    if ordM == 1 and ordN == 1:
        print('depinga mano, ambas listas ya estan ordenadas :D')
    elif ordM != 1 and ordN != 1:
        print(
            'Ambas listas estan desordenadas brother :( pero tranqui, yo las ordeno'
        )
        func.ordenadorburbujeo(M)
        func.ordenadorburbujeo(N)
    else:
        print(
            'Alguna de las listas esta desordenada, pero no te voy a decir cual es, solo la ordenare'
        )
        if ordM != 1:
            func.ordenadorburbujeo(M)
        else:
            func.ordenadorburbujeo(N)
    print('Lista M', M)
    print('Lista N', N)
    MN = func.intercalador(M, N)
    print('Lista MN', MN)
def ej6():
    print('Busqueda binaria\n')
    print(
        'Ingresa los numeros a cargar en la lista, ingresa -1 para finalizar la carga\n'
    )
    v = func.carganormal()
    if v == []:
        print('No se cargo ningun elemento a la lista :s')
    elif len(v) == 1:
        print('La lista', v,
              'tiene un solo elemento, no se puede ordenar (que esperabas?)')
    else:
        print('\nLista', v)
        print('Al utilizar busqueda binaria primero debemos ordenar la lista')
        print(
            'Desea usar ordenamiento secuencial (1) u ordenamiento por burbujeo (2)?: ',
            end='')
        op = Basiclib.ingresodenum(1, 2)
        if op == 1:
            func.ordenadorsecuencial(v)
        else:
            func.ordenadorburbujeo(v)
        print('\nLista ordenada', v)
        n = int(input('>Ingrese un numero para buscarlo en la lista: '))
        enc = func.busquedabinaria(n, v)
        print()
        if enc == -1:
            print(enc, 'El numero solicitado:', n, 'no pertenece a la lista')
        else:
            print('El numero', n, 'se encuentra en la lista en la posicion',
                  enc)
def ej14():
    print('Ingrese los valores de la lista 1: ')
    v1 = func.carganormal()
    print('\nAhora ingrese los valores de la lista 2:')
    v2 = func.carganormal()
    print('Lista 1', v1)
    print('Lista 2', v2)
    print()
    if v1 == []:
        print(
            'No se puede eliminar un elemento de una lista si esta esta vacia :/'
        )
    elif v2 == []:
        print('Lista 1 - lista 2 =', v1,
              'oh wait, no hay nada que quitarle a la lista 1')
    else:
        func.eliminacion_v1menosv2(v1, v2)
        print('Lista 1 - lista 2 =', v1)
def ej5():
    print('Busqueda secuencial\n')
    print(
        'Ingresa los numeros a cargar en la lista, ingresa -1 para finalizar la carga\n'
    )
    v = func.carganormal()
    print('Lista', v)
    n = int(input('>Ingrese un numero para buscarlo en la lista: '))
    enc = func.busquedasecuencial(n, v)
    print()
    if enc == -1:
        print(enc, 'El numero solicitado:', n, 'no pertenece a la lista')
    else:
        print('El numero', n, 'se encuentra en la lista en la posicion', enc)
def ej9():
    print(
        'Ingrese los valores a cargar en la lista, ingrese -1 para terminar la carga'
    )
    v = func.carganormal()
    v2 = func.comp_menorigual(v)
    print()
    print('Lista    ', v)
    if v == []:
        print('La lista esta vacia e.e no hay elementos para comparar')
    elif len(v) == 1:
        print(
            'La lista tiene un solo elemento, por lo tanto no se puede realizar ninguna comparacion :('
        )
    else:
        print('resultado', v2)
def ej12():
    print(
        'Ingrese los valores a cargar en la lista, ingrese -1 para terminar la carga'
    )
    v = func.carganormal()
    print('\nLista:', v)
    # item 1
    print(
        '\n- Cociente entre producto de los elementos en pos. par entre la suma de los elementos en pos. impar:\n'
    )
    sub_par, sub_imp = func.separacion_par_impar(v)
    prod = func.productodelista(sub_par)
    suma = func.sumadelista(sub_imp)
    if suma == 0:
        print(
            'No se puede realizar la operacion ya que la suma de los elementos en posicion impar es = 0'
        )
    else:
        cociente = prod / suma
        print('Producto', prod, '/ suma', suma, '=', cociente)
    # item 2
    print(
        '\n- Suma del primer elemento con el ultimo, el segundo con el penultimo... and so on and so forth\n'
    )
    suma2 = func.suma_extremos(v)
    print('Lista de sumas', suma2)
    #item 3
    print('\n- Comparacion de los elementos laterales de la lista"\n')
    lats = func.comparacion_laterales(v)
    if lats == []:
        print(
            'Ningun elemento de la lista cumple la condicion de tener ambos elementos laterales iguales :(((('
        )
    elif len(lats) == 1:
        if lats[0] == len(v) - 1:
            lateral = v[lats[0] - 1]
        else:
            lateral = v[lats[0] + 1]
        print(
            'El unico elemento de la lista que tiene ambos laterales iguales es el:',
            v[lats[0]])
        print('Y sus laterales son:', lateral)
    else:
        print('Los elementos que tienen sus laterales iguales son')
        func.impresion_laterales(v, lats)
def ej11():
    print(
        'Ingrese los valores a cargar en la lista, ingrese -1 para terminar la carga'
    )
    A = func.carganormal()
    print('Lista:', A)
    if A == []:
        print('No cargaste ningun numero, do you think this is a joke??')
    else:
        tipo_ord = func.deteccion_de_orden(A)
        #tipo_0 determina el tipo de ordenamiento de la lista 0= desordenada, 1= ascendente, 2= descendente, 3= todos los elementos iguales
        print()
        if tipo_ord == 0:
            print(
                'La lista esta desordenada, para continuar primero debemos ordenarla'
            )
            print(
                'Desea ordenar la lista de forma ascendente (1) o descendente (0)?: ',
                end='')
            ascend = Basiclib.opcion()
            if ascend:
                func.ordenadorburbujeo(A)
                tipo_ord = 1
            else:
                func.ordenadorburbujeodes(A)
                tipo_ord = 2
            print('\nLista ordenada:', A)
        elif tipo_ord == 1 or tipo_ord == 2:
            print('La lista ya esta ordenada! bien ahi')
        else:
            print(
                'Todos los elementos de la lista son iguales, easy peasy insertar el numero'
            )
    N = int(input('Ingrese el numero a insertar en la lista: '))
    func.insercion_ordenada(N, A, tipo_ord)
    print('\nLista final:', A)
    print('\nDesea agregar otro numero a la lista?: ', end='')
    op = Basiclib.opcion()
    while op:
        N = int(input('Ingrese el numero a insertar en la lista: '))
        func.insercion_ordenada(N, A, tipo_ord)
        print('Nueva lista', A)
        print('\nDesea agregar otro numero a la lista?: ', end='')
        op = Basiclib.opcion()
def ej13():
    print(
        'Ingrese los valores a cargar en la lista, ingrese -1 para terminar la carga'
    )
    v = func.carganormal()
    print('\nLista:', v)
    if v == []:
        print('La lista esta vacia :c')
    elif len(v) == 1:
        print(
            'La lista tiene un solo elemento (o sea esta ordenada (?) maybe?)')
    else:
        tipo = func.deteccion_de_orden(v)
        if tipo == 0:
            print('La lista esta desordenada')
        elif tipo == 1:
            print('La lista esta ordenada de forma ascendente')
        elif tipo == 2:
            print('La lista esta ordenada de forma descendente')
        else:
            print('Todos los elementos de la lista son iguales')