Exercice 3 · Bac Numérique et Sciences Informatiques Asie 2023 (jour 2)

Thème : Coût des algorithmes, tris et recherche · Tiré du sujet Jour 2 (2023)

Énoncé

Cet exercice porte sur les algorithmes.

On considère le jeu suivant:

Le joueur commence sur la première case du plateau. À chaque tour, il peut soit aller sur la case juste à droite, soit la sauter. À chaque fois qu'il passe sur une case, il gagne le nombre de points affichés sur celle-ci. L'objectif est d'atteindre la case arrivée en maximisant le nombre de points. Par exemple, pour le jeu précédent, le maximum possible est 4 en prenant le chemin grisé:

Dans cet exercice, un plateau est modélisé par une liste de longueur et de valeurs variables.

Par exemple, la liste du plateau précédent est: [4, -3, -1, 3, -2, -3].

1. a.

Donner sans le justifier le plus haut score possible, si le plateau est défini par la liste [-2, 4, -1, -2, 1, 4].

1. b.

Si le plateau ne contient que des valeurs positives, quelle est la meilleure stratégie ?

2. a.

Écrire une fonction parcours1(e) qui prend en paramètre une liste e représentant le plateau et renvoie le score réalisé si le joueur choisit comme stratégie de passer par toutes les cases.

Pour la question suivante, on suppose que le nombre de cases est impair.

2. b.

Écrire une fonction parcours2(e) qui prend en paramètre une liste e représentant le plateau et renvoie le score réalisé si le joueur choisit comme stratégie de ne faire que des sauts.

3.

On modélise les choix du joueur par une chaîne de caractères qui contient les caractères "D" (le joueur se déplace sur la case juste à droite) ou "XS" (le joueur saute une case toujours sur la droite).

Écrire une fonction score(plateau, deplacements) qui reçoit en paramètre un plateau sous forme de liste et un choix de déplacements donné sous forme d'une chaîne de caractères et retourne le score réalisé par ce choix. Dès que l'arrivée est atteinte, le score est renvoyé. On considère que la chaîne de caractères permet d'atteindre la case arrivée.

Par exemple: score([4, -3, -1, 3, -2, -3], "DDXSDDD") renvoie -1 résultat du calcul 4-3+3-2-3 = -1.

On suppose que la fonction genere(n) reçoit en paramètre un entier naturel nn non nul et renvoie une chaîne de caractères de longueur nn ne contenant que les caractères "D" et "XS" de manière aléatoire et permettant d'atteindre la case arrivée. Par exemple genere(8) peut renvoyer "DXSXSDXS".

4.

On souhaite écrire une fonction meilleur(plateau) qui génère 1000 déplacements dont la longueur est le nombre de cases du plateau pour s'assurer d'arriver au bout et qui renvoie le meilleur score sur ces 1000 déplacements. Recopier puis compléter la fonction ci-dessous:

def meilleur(plateau):

score_max = parcours1(plateau)

for i in range(..........):

d = genere(..........)

s = score(plateau, d)

if..........:

score_max = s

return score_max

5.

Écrire la fonction genere(n) de la question 3. On pourra à cet effet utiliser la fonction randint du module random qui reçoit deux entiers aa et bb et renvoie un entier de l'intervalle [a,b][a, b] avec aa et bb inclus.

Énoncé: Exercice 3 · Bac Numérique et Sciences Informatiques Asie 2023 (jour 2)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. a. Donner sans le justifier le plus haut score possible, si le plateau est défini par la liste [-2, 4, -1, -2, 1, 4].

Réponse : 8

1. b. Si le plateau ne contient que des valeurs positives, quelle est la meilleure stratégie ?

Réponse : Passer par toutes les cases (ne faire que des déplacements "D").

2. a. Écrire une fonction parcours1(e) qui prend en paramètre une liste e représentant le plateau et renvoie le score réalisé si le joueur choisit comme stratégie de passer par toutes les cases.

Réponse : ```python def parcours1(e): return sum(e) ``` ```python def parcours1(e): score = 0 for x in e: score += x return score ```

2. b. Écrire une fonction parcours2(e) qui prend en paramètre une liste e représentant le plateau et renvoie le score réalisé si le joueur choisit comme stratégie de ne faire que des sauts.

Réponse : ```python def parcours2(e): score = 0 for i in range(1, len(e), 2): score += e[i] return score ``` ```python def parcours2(e): return sum(e[1::2]) ```

Les réponses des 3 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.

‹ Exercice 2 - Coût d'exécution · Asie 2026 (jour 1) · Exercice 1 · Asie 2022 (jour 1) ›

Plus d’exercices de Coût des algorithmes, tris et recherche