Aquí hay una forma de resolverlo:
- Encuentra una lista de palabras en francés. Una búsqueda de “lista de palabras del diccionario francés txt” nos da este sitio – WinEdt.org – Diccionarios, que aparentemente contienen archivos de datos del corrector ortográfico.
- Escriba un programa que use un trie para guiar su búsqueda: cuando ve que el intento actual no es un prefijo de ninguna palabra, puede abortar de manera segura tratando de extenderlo hacia la derecha.
- ¡Lucro!
Introduce letras: bagymnaseston
Encontrado: gimnasio
Encontrado: gimnasia
Encontrado: gimnasias
Encontrado: nase
Encontrado: nases
Encontrado: ses
Encontrado: est
Encontrado: ton
Introduce letras: ntrendroitss
Encontrado: rend
Encontrado: endroit
Encontrado: endroits
Encontrado: droit
Encontrado: droits
Encontrado: roi
Introduce letras: bbanlieuerrn
Encontrado: prohibición
Encontrado: banlieue
Encontrado: mentira
Encontrado: lieu
Encontrado: lieue
Encontrado: eue
Este diccionario parece contener todas las variantes de las palabras, al menos creo que algunos de los resultados anteriores son solo plurales. Por supuesto, podría usar su propio diccionario: es solo un archivo de texto que contiene una palabra por línea.
Aquí está el programa que, cuando se coloca en la misma carpeta que “fr.dic” (el archivo de diccionario sin comprimir) y se ejecuta con Python 3, produce los resultados anteriores:
- Cómo resolver esta pregunta de arreglo
- Un profesor piensa en dos números consecutivos entre 1 y 10. ‘A’ conoce el primer número y ‘B’ conoce el segundo número. A dice: No sé tu número. B dice: Tampoco sé tu número. A dice: ahora lo sé. ¿Cuáles son las cuatro soluciones para esto?
- Alan está leyendo un libro con páginas numeradas del 1 al 630. El día 1 leyó el primer tercio del libro; y en el día 2 la suma de los números de página leídos fue 4.410. ¿Cuántas páginas le quedan a Alan para completar el libro?
- ¿Cuántas gotas de lluvia de 1 centímetro se necesitan para cubrir el 90% de una línea de 1 metro?
- ¿Cuáles son algunos de los interesantes rompecabezas de Sherlock Holmes?
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
class TrieNode:
def __init__(self):
self.word_end = False
self.children = {} def find(self, key):
node = self
for char in key:
if char not in node.children:
return None
else:
node = node.children[char]
return node.word_end def insert(self, key):
node = self
i = 0
n = len(key) while i < n:
if key[i] in node.children:
node = node.children[key[i]]
i += 1
else:
break while i < n:
new_node = TrieNode()
node.children[key[i]] = new_node
node = new_node
i += 1 node.word_end = True french_trie = TrieNode() import codecs
with codecs.open("fr.dic", "r", "utf_16_le") as f:
for line in f:
word = line.strip().lower()
if len(word) > 2:
french_trie.insert(word) def find_french_words(row):
start = 0
end = 2
last = len(row) - 1 while start <= last - 2:
to_check = row[start:end + 1]
res = french_trie.find(to_check)
end += 1
if res is None or end > last:
start += 1
end = min(start + 2, last)
if res:
print("Found: {}".format(to_check)) if __name__ == "__main__":
while True:
find_french_words(input("Enter letters: "))
Presione Ctrl + C para salir. Hacer que tome toda la tabla y generar todas las filas, columnas y diagonales y luego pasarlas a
se deja como ejercicio para el lector 😀 find_french_words()