Advertisement
Sax

WordZap 1.2

Sax
May 20th, 2012
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.06 KB | None | 0 0
  1. import random
  2.  
  3. #-------------------------------------------------------------------------
  4. #TODO
  5. #-------------------------------------------------------------------------
  6.  
  7. #-------------------------------------------------------------------------
  8. # Funciones
  9. #-------------------------------------------------------------------------
  10. def restart():
  11.     """ Reinicializa todo de nuevo """
  12.     global chosen
  13.     global ordered
  14.  
  15.     chosen = getSample()
  16.     ordered = sorted(chosen)
  17.  
  18.     return ordered
  19.  
  20.  
  21. def getSample():
  22.     """ Regresa una muestra de 9 letras entre el alfabeto disponible """
  23.     chosen = random.sample(letters,9)
  24.     return chosen
  25.  
  26. def fill(letter,its):
  27.     """ Llena its veces la letra que corresponda al alfabeto """
  28.     for i in range(its):
  29.         letters.append(letter)
  30.  
  31. def compare(x,y):
  32.     """ Compara x vs y para ordenarlos en getValues """
  33.     key_of_x=x[1]
  34.     key_of_y=y[1]
  35.     if key_of_x > key_of_y:
  36.         return -1
  37.     elif key_of_x < key_of_y:
  38.         return 1
  39.     else:
  40.         return 0
  41.  
  42. def getValues(ordered):
  43.     """ Regresa una lista ordenada de los valores de las letras escogidas """
  44.     for i in ordered:
  45.         if i in dictionary:
  46.             values.append(dictionary.get(i))
  47.  
  48.     zipo2 = zip(ordered,values)
  49.     order_by_value = sorted(zipo2,cmp=compare)
  50.     return order_by_value
  51.  
  52. def busqueda(search_terms, resultados):
  53.     """ Busca en el archivo palabras con las letras indicadas dentro de un arreglo """
  54.     archivo.seek(0) #Principio del archivo
  55.     resultados = []
  56.     for word in archivo:
  57.         for i in search_terms:
  58.             word = word.rstrip()                    #Eliminar saltos de linea
  59.             if word.find(i) != -1:
  60.                 resultados.append(word)
  61.     return resultados
  62.  
  63. def toRAM(resultados):
  64.     """ Agrega las palabras de los resultados al diccionario 'palabras' """
  65.     palabras.clear()
  66.     for word in resultados:
  67.         if word not in palabras:
  68.             palabras[word] = [resultados.count(word), len(word)]
  69.     return palabras
  70.  
  71. def doubleCheck(palabras, chosen):
  72.     """ Revisa los resultados y devuelve las palabras finales """
  73.     flagged = []
  74.  
  75.     for word in palabras:
  76.         if palabras.get(word)[0] < palabras.get(word)[1]:
  77.             flagged.append(word) #Si tiene menos coincidencias que caracteres
  78.  
  79.     for word in flagged: #Borra palabras marcadas
  80.         del palabras[word]
  81.  
  82.     used_chars = []
  83.     finales = []
  84.     palabrillas = palabras.keys()
  85.    
  86.    
  87.     for word in palabrillas:
  88.  
  89.         available = list(chosen)
  90.         used_chars[:] = []
  91.         actual_word = list(word)
  92.        
  93.         for current_char in actual_word:
  94.             if current_char in available:                
  95.                 used_chars.append(current_char)                
  96.                 available.remove(current_char)
  97.                
  98.         sorted(actual_word)
  99.         sorted(used_chars)
  100.         available[:]= []
  101.        
  102.         if actual_word == used_chars:
  103.             finales.append(word)
  104.            
  105.        
  106.  
  107.     return finales
  108.  
  109. def learning():
  110.     """ Entra al modo de aprendizaje en modo manual """
  111.     archivo.seek(0,2) #Final del archivo
  112.     pico = 'y'
  113.     while pico == 'y':
  114.         archivo.write(raw_input("Word? --> ") + "\n")
  115.         pico =raw_input("\nOtra? y)Yes Otherwise) no --> ")
  116.         archivo.flush()
  117.  
  118. def learn(wordlist):
  119.     """ Copia las palabras al archivo """
  120.     archivo.seek(0,2) #Final del archivo
  121.     for word in wordlist:
  122.         archivo.write(word + "\n")
  123.         archivo.flush()
  124.  
  125. def validate(word):
  126.     """ Valida word dentro de la db completa, regresa 1 si la encuentra, 0 si no """
  127.  
  128.     fulldb = open("dbval", "r")
  129.     fulldb.seek(0)
  130.     wordys = []
  131.    
  132.     for palabra in fulldb:
  133.         palabra = palabra.rstrip()  #Eliminar saltos de linea y espacios
  134.         wordys.append(palabra)
  135.  
  136.     if word in wordys:
  137.         check = 1
  138.     else:
  139.         check = 0
  140.  
  141.     return check
  142.  
  143.    
  144.  
  145. def play():
  146.     """ Comienza el juego"""
  147.     wordlist = []
  148.     global resultados
  149.     global chosen
  150.  
  151.     chars_used = []
  152.  
  153.     restart()
  154.     resultados = busqueda(ordered, resultados)
  155.     palabras = toRAM(resultados)
  156.     print "Las palabras de la AI son:\n" + str(doubleCheck(palabras, ordered))
  157.     print "Las letras que tocaron ahora son:\n" + str(chosen)
  158.     print "Typea tus palabras: "
  159.     for word in range(10):
  160.         word = raw_input("--> ")
  161.         if (word == 'nvm'):
  162.             break
  163.  
  164.         elif validate(word) == 0:
  165.             print "La palabra " + word + " no existe"
  166.  
  167.         elif word not in resultados:
  168.             wordy = list(word)
  169.             for char in wordy:
  170.                 if char not in chosen:
  171.                     print "No puedes formar la palabra " + word + " con estos caracteres"
  172.             wordlist.append(word)
  173.  
  174.         else:
  175.             print "La palabra " + word + " ya esta en el diccionario"
  176.  
  177.     for word in wordlist:
  178.         if word not in resultados:
  179.             archivo.write(word+"\n")
  180.             archivo.flush()
  181.         else:
  182.             print "La palabra " + word + " ya esta en el diccionario"
  183. #-------------------------------------------------------------------------
  184. # Main & Globals
  185. #-------------------------------------------------------------------------
  186.  
  187. # Inicia todo ~~~~~~~
  188. lulz = "abcdefghijklmnopqrstuvwxyz"
  189. letters = list(lulz)
  190. its = [15,6,5,7,15,4,6,9,15,2,5,5,8,13,11,2,0,10,11,5,10,2,6,4,2,2]
  191. zipo = zip(letters,its)
  192. dictionary = dict(zipo)
  193. for (x,y) in zipo:
  194.     fill(x,y)   #
  195.  
  196. values = [] #Valores de las letras escogidas
  197. resultados = [] #Resultados de busqueda
  198. chosen = getSample() #Las 9 letras escogidas
  199. ordered = sorted(chosen) #Las 9 letras escogidas, pero en orden alfabetico
  200. values = getValues(ordered) #Los valores ordenados de las letras escogidas
  201. archivo = open('dblol', 'r+') #Abre la db en modo lectura/escritura
  202. palabras = {} #Diccionario en RAM de los resultados encontrados en la db
  203. palabras = toRAM(resultados)
  204.  
  205. again = '1'
  206. while again == '1':
  207.     play()
  208.     again = raw_input("Otra vez? 1) Si Otherwise No --> ")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement