Niveau 1
Scooby-Naire, le chien de Joseph Marchand, est très intelligent. Il arrive à communiquer avec son maître en tapant ses messages sur le clavier. Malheureusement, ses grosses pattes ne lui permettent pas d'être précis et il appuie sur les touches alentour.
En revanche, le vocabulaire de Scooby-Naire étant assez limité, Joseph Marchand peut facilement tester les messages les plus courants. Pour l'y aider, vous devez écrire un programme qui renvoie 1
si la chaîne passée en paramètre peut-être contenue dans le message, 0
sinon.
1
si la chaîne à tester est contenue dans le message de Scooby-Naire, 0
sinon.Exemple d'entrée
68 Moi je le dis clairement: K est carrement trop fort, c'est mon idole 15 K est mon idole
Exemple de sortie
1
Exemple d'entrée
34 TATA YOYO IL MA TAPE ON VA LE TUER 10 TTY MA TUE
Exemple de sortie
1
Exemple d'entrée
15 JOSEPH MARCHAND 3 JEU
Exemple de sortie
0
""" auteur : Franck CHAMBON Régional 2011 - Problème 3 - Décryptage https://prologin.org/train/2011/semifinal/decryptage """ # 0. Cœur du problème def est_extrait(texte:str, partie: str) -> bool: """Renvoie True ou False selon que `partie` est un extrait de `texte` >>> est_extrait("Un morceau complet", "U orc cplt") True >>> est_extrait("Un morceau complet", "Z") False >>> est_extrait("Un morceau complet", "nU") False >>> est_extrait("J'ai dit ho", "diiit") False """ l_texte = len(texte) l_partie = len(partie) i_texte = 0 i_partie = 0 while i_partie < l_partie: # on cherche le caractère partie[i_partie] dans texte while (i_texte < l_texte) and (texte[i_texte] != partie[i_partie]): i_texte += 1 if i_texte == l_texte: return False else: # on a : texte[i_texte] == partie[i_partie]: i_partie += 1 i_texte += 1 return True import doctest doctest.testmod() # 1. Lecture taille_message_chien = int(input()) message_chien = input() taille_message_test = int(input()) message_test = input() # 2. Écriture print("1" if est_extrait(message_chien, message_test) else "0")
⚠️ Nouveau, une version récursive élégante.
""" auteur : Franck CHAMBON Régional 2011 - Problème 3 - Décryptage https://prologin.org/train/2011/semifinal/decryptage """ # 0. Cœur du problème def est_extrait(texte:str, partie: str) -> bool: """Renvoie True ou False selon que `partie` est un extrait de `texte` >>> est_extrait("Un morceau complet", "U orc cplt") True >>> est_extrait("Un morceau complet", "Z") False >>> est_extrait("Un morceau complet", "nU") False >>> est_extrait("J'ai dit ho", "diiit") False """ if partie == "": return True if texte == "": return False if partie[0] == texte[0]: return est_extrait(texte[1:], partie[1:]) else: return est_extrait(texte[1:], partie) import doctest doctest.testmod() # 1. Lecture taille_message_chien = int(input()) message_chien = input() taille_message_test = int(input()) message_test = input() # 2. Écriture print("1" if est_extrait(message_chien, message_test) else "0")
Explications :
partie
est vide, on a fini, et c'est bon.texte
est vide, partie
est non vide, et donc c'est pas bon.partie
dans la suite de texte
.