#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Documentación para el test 1 de la materia de Tópicos Avanzados de Programación.
Maestría GeoInteligencia Computacional a 27 de Enero del 2019.
"""
def ejercicio1(lista):
	'''
		Ejercicio 1: Devuelve el promedio de todos los elemntos de una lista. Recibe como parametro una lista y devuelve un valor único.
	'''
	suma=0
	div=None
	for num in lista:
		suma+=num
	div=(suma/len(lista))
	print(div)

def ejercicio2(lista, numero):
	'''
		Ejercicio 2: Devuelve todos los numeros del campo de los numeros enteros divisibles por un valor que el usuario determina. Recibe como parametro una lista y un divisor y devuelve una lista de valores.
	'''
	listaEnt=[x//numero for x in lista]
	setEnt=set(listaEnt)
	print(setEnt)

def ejercicio3(numero):
	'''
		Ejercicio 3: Devuelve el factorial de un número ingresado por el usuario. Recibe como parámetro un valor único y devuelve otro valor único
	'''
	if numero == 1:
		return numero
	else:
		return numero*ejercicio3(numero-1)

def ejercicio4(minimo, maximo):
	'''
		Ejercicio 4: Devuelve una lista de numeros enteros que tienen la característica de ser palíndromos y nones. Recibe como parámetro un valor único mínimo y otro máximo.
	'''
	for i in range(minimo,maximo):
		print(i)
		aux=i
		rev=0
	while(i>0):
		digito=i%10
		rev=rev*10+digito
		i=i//10
	if(aux==rev):
		listaejem.append(aux)
		print("Es palindromo")
	else:
		print("No es palindromo")    
	print("Lista de palindromos: \n")
	print(listaejem)   
	imparlista=[impar for impar in listaejem if impar%2==1]
	print("Lista de palindromos e impares: \n")
	print(imparlista)

def ejercicio5(intentos=2):
	'''
		Ejercicio 5: Programa que simula el juego del "Ahorcado". Tiene interacción con el usuario (máximo 3) con ingresar la palabra y dos posibles soluciones (perder) o ganar.
	'''
	palabra = ''
	listaPalabra = []
	listaPalabraEspacio = []
	letra = ''
	detente= 1   
	palabra= str(input('Dime una palabra: '))
	palabra=palabra.lower()
	listaPalabra=list(palabra)
	for palabr in listaPalabra:
		listaPalabraEspacio.append('_')   
	while detente==1:
		print(listaPalabraEspacio)
		letra = input('Dame una letra: ')
		fallo = False
	if letra not in listaPalabra:
		fallo = True
		intentos=intentos-1
		print("\nte quedan "+ str(intentos)+" intentos!\n")
            
	else:    
		for key, value in enumerate(listaPalabra):
			if value == letra:
				listaPalabraEspacio[key] = value
	if intentos <= 0:
		detente= 0
		print("Ya perdiste! -_-\n la palabra era: \n"+ str(listaPalabra))
	elif listaPalabra == listaPalabraEspacio:
		detente= 0 
		print("Ya ganaste!  ͡° ͜ʖ ͡° \n la palabra era \n"+str(listaPalabra))

def ejercicio6():
	'''
		Ejercicio 6: Devuelve el conteo de número de palabras de un texto ingresado por el usuario. No recibe ningún parámetro ya que internamente se pide el texto para procesar.
	'''
	dicti={}
	texto=str(input("Escriba su texto: \n"))
	texto=texto.split()
	print(texto)
	for palabra in texto:
		dicti.update({palabra:texto.count(palabra)})
	print(dicti)

def ejercicio8():
	'''
		Ejercicio 8: Devuelve cuadrados mágicos de tamaño definido por el usuario. No recibe ningún parámetro ya que internamente se pide el tamaño de la matriz. Ocupa la biblioteca Numpy. No está habilitado para matrices pares.
	'''
	tam=input("Ingresa el tamaño del cuadrado: \n")
	tam=int(tam)
	magico=np.zeros((tam,tam))
	print(magico)
	print("-----")
	if tam==2:
		print("no hay solucion :v")
        
	if tam%2==1:
		#inicializacion
		n = 1
		i, j = 0, tam//2
		#numero de elementos
		while n <= tam**2:
			print("soy j:"+str(j))
			magico[i, j] = n
            
			#Siguiente movimiento
			n += 1
			movi, movj = (i-1) % tam, (j+1)% tam
           
			if magico[movi, movj]:
				print(magico[movi,movj])
				print("La celda esta ocupada, regresa e inserta abajo")
				i += 1
			else:
				i, j = movi, movj

			               
			print(magico)
			print("-----")
            
	#pares mayores de dos        
	elif ((tam!=2) and (tam%2==0)):
		print("no se hacerlo")       
	print(magico)

