-2
votes

Scrabble: Supposons que vous essayez de compléter un puzzle croisé

Dans un puzzle croisé, certaines lettres sont données et nous devons déterminer quel mot complet pouvons-nous en faire. Par exemple, des lettres "CWD" données dans le même ordre, nous pouvons faire le mot "mots croisés" ou "foule" avec elle. Mais si "DW" est donné dans cet ordre, nous ne pouvons pas faire de "mots croisés", car d et w sont dans l'ordre inverse ici.

Nous devons trouver une méthode efficace et écrire un code pour ce processus. Le code prendra deux chaînes comme entrée dans deux lignes. La première chaîne contiendra des lettres sur le bouton croisé ("CWD") et la deuxième chaîne contiendra un mot que nous voulons vérifier. (C'est-à-dire que nous voulons vérifier si le mot peut être fait de lettres données dans le même ordre) . La sortie doit dire "oui" si le mot peut être formé, sinon il devrait dire "non"

J'ai écrit un code: xxx

mais Je ne reçois pas la sortie correcte.

où,

lettres = CCWD # des réserves déjà dans le bouton croisé

GUEST = Crossword #word pour vérifier l'ajustement < / p>


1 commentaires

Vous devrez nous dire ce que lettres et devinez sont.


6 Réponses :


1
votes

Dans votre premier exemple, vous souhaitez trouver un mot contenant C , suivi de n'importe quoi (ou rien), suivi de w , suivi de n'importe quoi (ou rien ), suivi de d .

l'expression régulière pour "n'importe quoi (ou rien)" est . *

Alors, vous voulez Pour rechercher cette expression régulière: xxx


3 commentaires

Je pense qu'elle recherche une solution générique, mais cela est particulièrement particulier à une affaire.


@yabhishek Ce code est trivialement adaptable à une solution générale. Quelle est votre objection?


Mon point est que, si le motif est donné, il peut être généralisé en insérant . * s entre ses caractères comme motif = '. *'. Joindre (Liste) .



1
votes

Si vous recherchez une solution générique, essayez-la - supposons que vous ayez une liste, appelons-le lst code>, de mots de dictionnaire et que vous recevez un motif, disons pat Et vous voulez savoir lequel des mots de la liste correspondent au modèle. Cela peut être fait en construisant une expression régulière tout en séparant chacun des caractères de motif par . * Code> pour permettre l'insertion 0 code> ou plusieurs caractères entre eux. Le programme suivant réalise que

pattern = "xyz"                     # can be replaced to have the desired pattern
lst =["crossword", "crowd"]         # this can be replaced to contain the words of your choice
pattern = '.*'.join(list(pattern))  # modifies the pattern to include .* between each of the characters of the pattern
obj = re.compile(pattern)          # create compiled regex object to use it again and again
for word in lst:
    if obj.search(word):
        print "Yes"
    else:
        print "No"


0 commentaires

3
votes

Comme mentionné, ajouter des caractères spéciaux B / W Lettres dans l'entrée et la recherche de ce modèle


x=re.findall(".*".join(list(letters)),guess)

if (x):
    print("yes")
else:
    print("no")


0 commentaires

0
votes
lets=input()

guess=input()

i = 0

for x in guess:
    if x == lets[i]: 
          i += 1
          if i >= len(lets): break

if (i == len(lets)):
    print("Yes")
else:
    print("No")

1 commentaires

Utilisation de Regex Import Re let = Entrée () deviness = entrée () Scrabble = re.findall (". *". Joindre (Liste (List)), devinez-le ("Oui") Sinon: Imprimer ( "non")



0
votes

Ce code fonctionnera pour votre question.

### import Library for using re.compile() method
import re

### letters already in the crossword
letters=input() 

### word to check for fit
guess=input() 

### modify letters to include .* between each character 
x=re.findall(".*".join(list(letters)),guess) 

if (x):
    print("yes")
else:
    print("no")
        


0 commentaires

0
votes

Pour le problème tel que défini, vous pouvez utiliser une expression régulière, mais vous devez couvrir des cas où un préfixe ou un suffixe est ajouté (pas seulement des lettres entre): xxx

si vous êtes Non autorisé à utiliser des bibliothèques, vous pouvez le faire avec une fonction récursive: xxx

pour un mot croisé réel, une méthode très efficace serait de créer un index des ensembles de mots pour chaque Lettre de la longueur-positan. Vous pouvez ensuite combiner les ensembles pour les positions de lettre connue de votre mot incomplet:

par exemple: xxx

chargement de l'index peut prendre quelques secondes, mais , après cela, le temps de réponse est instantané.

sortie: xxx

Vous pouvez également utiliser la fonction pour résoudre les problèmes de Scrabble en l'alimentant diverses longueurs et filtrage Sur les lettres disponibles: xxx

une variante de cela pourrait être faite pour Hangman.


0 commentaires