Aide programme
Fermé
Sh3perd
Messages postés
74
Date d'inscription
lundi 6 juin 2016
Statut
Membre
Dernière intervention
4 mars 2021
-
Modifié le 2 mars 2021 à 19:32
jee pee Messages postés 40443 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 13 novembre 2024 - 5 mars 2021 à 20:09
jee pee Messages postés 40443 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 13 novembre 2024 - 5 mars 2021 à 20:09
A voir également:
- Aide programme
- Programme demarrage windows 10 - Guide
- Désinstaller programme windows 10 - Guide
- Programme démarrage windows 10 - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
4 réponses
yg_be
Messages postés
23320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 novembre 2024
Ambassadeur
1 549
2 mars 2021 à 20:07
2 mars 2021 à 20:07
bonjour,
beaucoup de lignes de code pour ne pas faire grand chose!
en réalité il te manque presque tout, je ne vois pas grand chose d'utile dans ton code.
je suggère que tu fasses ceci:
réfléchir à ce que le programme doit faire, et nous expliquer cela.
beaucoup de lignes de code pour ne pas faire grand chose!
en réalité il te manque presque tout, je ne vois pas grand chose d'utile dans ton code.
je suggère que tu fasses ceci:
réfléchir à ce que le programme doit faire, et nous expliquer cela.
jee pee
Messages postés
40443
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
13 novembre 2024
9 418
Modifié le 3 mars 2021 à 20:46
Modifié le 3 mars 2021 à 20:46
Bonjour,
Tu en es où de ta stratégie pour solutionner le problème ?
En lisant la question je me suis laissé tenté à essayer d'y répondre. Ne connaissant pas ce jeu, je n'ai trouvé que des versions online plus opérationnelles puisqu'utilisant Adobe Flash Player disparu il y a un mois. Il y avait au moins les règles.
J'ai imaginé, avant de me lancer dans le code, plusieurs solutions, traiter les lignes une par une, traiter en démarrant par les 4 coins, ... mais le soucis c'est comment traiter une suite de cases en escargot, ici le o :
J'ai une solution qui me plait bien, mais sur un grand tableau le temps d'exécution est asymptotique sur l'infini. Il faut que je debug pour trouver pourquoi.
J'ai une remarque de fond sur le code que tu as posté, remplir le tableau et l'afficher cela reste indispensable, autant commencer par ça. Mais tu n'utilises pas la puissance du code informatique pour le faire, tu dupliques les lignes à l'infini pour traiter les tableaux suivant leur taille, et tu traites les couleurs une par une à la main suivant la réponse de l'utilisateur.
Remplir et afficher le tableau devrait prendre 10/15 lignes, il t'en faut une centaine.
Une boucle sur la taille du tableau pour le remplir, une boucle sur la taille du tableau pour l'afficher. Traiter une variable avec la réponse de l'utilisateur pour la nouvelle couleur à comparer avec la couleur en grille[0][0].
Un code informatique est terminé quand on ne peut plus enlever de lignes, pas quand on ne peut plus en ajouter ;-)
A te lire.
Tu en es où de ta stratégie pour solutionner le problème ?
En lisant la question je me suis laissé tenté à essayer d'y répondre. Ne connaissant pas ce jeu, je n'ai trouvé que des versions online plus opérationnelles puisqu'utilisant Adobe Flash Player disparu il y a un mois. Il y avait au moins les règles.
J'ai imaginé, avant de me lancer dans le code, plusieurs solutions, traiter les lignes une par une, traiter en démarrant par les 4 coins, ... mais le soucis c'est comment traiter une suite de cases en escargot, ici le o :
o r v j j j b j j j j b b r j r r
o v j r b j v b v v b b v v b j j
o b o o o o o o o o o o o o o o o
o v o v v j r b j r b v r b r r o
o j o r o o o o o o o o o o o b o
o j o v o r v v b r v b j j o v o
o r o v o v o o o o o o o v o b o
o r o j o j o j v v r b o b o v o
o r o r o j o b o o o r o r o r o
o b o r o j o j r j o b o r o b o
o b o v o b o o o o o v o j o v o
o j o b o r b r j b r j o r o j o
o b o b o o o o o o o o o b o b o
o r o j v b v v v j b v j r o j o
o r o o o o o o o o o o o o o v o
o r j b j j j j b b b j j v b j o
o o o o o o o o o o o o o o o o o
J'ai une solution qui me plait bien, mais sur un grand tableau le temps d'exécution est asymptotique sur l'infini. Il faut que je debug pour trouver pourquoi.
J'ai une remarque de fond sur le code que tu as posté, remplir le tableau et l'afficher cela reste indispensable, autant commencer par ça. Mais tu n'utilises pas la puissance du code informatique pour le faire, tu dupliques les lignes à l'infini pour traiter les tableaux suivant leur taille, et tu traites les couleurs une par une à la main suivant la réponse de l'utilisateur.
Remplir et afficher le tableau devrait prendre 10/15 lignes, il t'en faut une centaine.
Une boucle sur la taille du tableau pour le remplir, une boucle sur la taille du tableau pour l'afficher. Traiter une variable avec la réponse de l'utilisateur pour la nouvelle couleur à comparer avec la couleur en grille[0][0].
Un code informatique est terminé quand on ne peut plus enlever de lignes, pas quand on ne peut plus en ajouter ;-)
A te lire.
Sh3perd
Messages postés
74
Date d'inscription
lundi 6 juin 2016
Statut
Membre
Dernière intervention
4 mars 2021
4 mars 2021 à 16:54
4 mars 2021 à 16:54
Oui j'y pense, mais j'ai du mal, je suis justement en train d'étudier la question pour l'instant sans succès...
Sh3perd
Messages postés
74
Date d'inscription
lundi 6 juin 2016
Statut
Membre
Dernière intervention
4 mars 2021
4 mars 2021 à 17:14
4 mars 2021 à 17:14
J'ai récupéré une fonction qui me permet de parer à mon problème, mais je ne parviens pas totalement à l'implémenter, j'ai généré une grille plus informatiquement parlant mais moins esthétique (car print au lieu d'un return) , pouvez vous m'aider ? le code :
import random import sys def grille(x): x=int(x) grillejeu=[] grille2=[] if x==2: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>2: del grille2[-1] if x==6: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>6: del grille2[-1] if x==10: while len(grille2)!=10: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>10: del grille2[-1] if x==14: while len(grille2)!=14: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>14: del grille2[-1] if x==18: while len(grille2)!=18: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>18: del grille2[-1] if x==22: while len(grille2)!=22: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>22: del grille2[-1] if x==26: while len(grille2)!=26: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>26: del grille2[-1] for i in range(x): grillejeu.append([]) for n in range(len(grillejeu)): for p in grille2: random.shuffle(grille2) grillejeu[n].append(p) listevrai=[] for k in range(len(grillejeu)): listevrai.append(grillejeu[k]) print(listevrai) jeu(grillejeu) for k in range(len(grillejeu)): print(grillejeu[k]) print('test') def jeu(grillejeu): grille=['r','j','b','v','o'] print('jeu') p=input("Choisissez une couleur : ") while p not in grille: p=input("Veuillez choisir entre r, j, b, v ou o : ") if p=='v': possibilite(grillejeu,p) floodfill(grille,0,0) # if grillejeu[0][1]==grillejeu[0][0]: # grillejeu[0][1]='v' # # if grillejeu[1][0]==grillejeu[0][0]: # grillejeu[1][0]='v' # if grillejeu[1][1]==grillejeu[0][0]: # grillejeu[1][1]='v' # grillejeu[0][0]='v' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='r': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='r' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='r' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='r' grillejeu[0][0]='r' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='b': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='b' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='b' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='b' grillejeu[0][0]='b' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='j': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='j' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='j' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='j' grillejeu[0][0]='j' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='o': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='o' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='o' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='o' grillejeu[0][0]='o' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) def interface(x): return x def possibilite(grillejeu,p): liste_r=[] liste.append(1) for index in grillejeu[0]: liste_r.append(index) try: if liste_r[0]==liste_r[1]==liste_r[2]==liste_r[3]==liste_r[4]==liste_r[5]==liste_r[6]==liste_r[7]==liste_r[8]==liste_r[9]==liste_r[10]==liste_r[11]==liste_r[12]==liste_r[13]==liste_r[14]==liste_r[15]==liste_r[16]==liste_r[17]==liste_r[18]==liste_r[19]==liste_r[20]==liste_r[21]: print('\n*****FIN DU JEU*****\n') print('Vous avez terminé le jeu en',sum(liste)/2,'coups') sys.exit() except IndexError: print('\n*****FIN DU JEU*****\n') x=sum(liste)/2 x=int(x) print('Vous avez terminé le jeu en',x,'coups') sys.exit() def floodfill(grille, x, y): #"hidden" stop clause - not reinvoking for "c" or "b", only for "a". if grille[x][y] == 'r': grille[x][y] = 'v' #recursively invoke flood fill on all surrounding cells: if x > 0: floodfill(grille,x-1,y) if x < len(grille[y]) - 1: floodfill(grille,x+1,y) if y > 0: floodfill(grille,x,y-1) if y < len(grille) - 1: floodfill(grille,x,y+1) if __name__=='__main__': liste=[] print('\n\t **************************************************') print('\t **************************************************') print('\n\t->\t************ FLOOD IT! ************* <-\n') print('\t **************************************************') print('\t **************************************************') print('\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n') print('\n\t De quelle dimension souhaitez vous votre grille ? ') q=''' 2x2 : 2 6x6 : 6 10x10 : 10 14x14 : 14 18x18 : 18 22x22 : 22 26x26 : 26 ''' print(q) x=interface(input('-------> ')) grille(x) print('') grille(x)
Sh3perd
Messages postés
74
Date d'inscription
lundi 6 juin 2016
Statut
Membre
Dernière intervention
4 mars 2021
4 mars 2021 à 17:14
4 mars 2021 à 17:14
jai l'erreur : TypeError: 'str' object does not support item assignment
pourtant quand je test la fonction dans un programme vierge, cela fonctionne..
pourtant quand je test la fonction dans un programme vierge, cela fonctionne..
yg_be
Messages postés
23320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 novembre 2024
1 549
>
Sh3perd
Messages postés
74
Date d'inscription
lundi 6 juin 2016
Statut
Membre
Dernière intervention
4 mars 2021
4 mars 2021 à 17:27
4 mars 2021 à 17:27
excellente idée d'utiliser ainsi une fonction récursive!
peux-tu, cependant, préciser "python" quand tu utilises les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
peux-tu, cependant, préciser "python" quand tu utilises les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
yg_be
Messages postés
23320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 novembre 2024
1 549
>
Sh3perd
Messages postés
74
Date d'inscription
lundi 6 juin 2016
Statut
Membre
Dernière intervention
4 mars 2021
4 mars 2021 à 17:28
4 mars 2021 à 17:28
à quelle ligne de code as-tu l'erreur?
jee pee
Messages postés
40443
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
13 novembre 2024
9 418
Modifié le 4 mars 2021 à 18:46
Modifié le 4 mars 2021 à 18:46
le floodfill() c'est une bonne idée, mais attention, il faudrait mémoriser les positions déjà traitées car si tu passes de (0,0) à (0,1), tu vas revenir avec y-1 à (0,0)
Après il faudrait que globalement tu changes ton programme pour ne pas traiter "à la main" les couleurs une par une.
Si dans p tu as la prochaine couleur, tu devrais récupérer par exemple dans a l'ancienne couleur de position (0,0) et après tu ne traites que 2 variables p et a, sans te soucier de leur contenu.
Après il faudrait que globalement tu changes ton programme pour ne pas traiter "à la main" les couleurs une par une.
Si dans p tu as la prochaine couleur, tu devrais récupérer par exemple dans a l'ancienne couleur de position (0,0) et après tu ne traites que 2 variables p et a, sans te soucier de leur contenu.
yg_be
Messages postés
23320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 novembre 2024
1 549
4 mars 2021 à 20:36
4 mars 2021 à 20:36
je pense qu'il n'est pas nécessaire de mémoriser les positions traitées, elles ne risquent pas de s'étendre, puisqu'on en change la couleur.
on peut également utiliser une liste de cases à traiter, plutôt qu'une récurrence.
on peut également utiliser une liste de cases à traiter, plutôt qu'une récurrence.
jee pee
Messages postés
40443
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
13 novembre 2024
9 418
>
yg_be
Messages postés
23320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 mars 2021 à 00:09
5 mars 2021 à 00:09
dans ce que j'ai imaginé, j'ai les positions traitées, afin de ne pas revenir en arrière, car en (0,1) il ne sert à rien de revenir à (0,0) et ses subséquents, et je traite effectivement, les positions futures à traiter, pour avancer pas à pas (mon escargot)
j'ai trouvé un site online du jeu : https://unixpapa.com/floodit/?sz=6&nc=4
il faut que je révise mon programme car à partir d'une position, je traitais les 8 cases autour, avec les positions en diagonale, alors qu'il semble que l'on ne traite que les 4 cases touchantes sur les cotés.
le site est un bon exemple de ce que l'on pourrait développer en solution graphique, une fois la solution trouvée en mode caractère
j'ai trouvé un site online du jeu : https://unixpapa.com/floodit/?sz=6&nc=4
il faut que je révise mon programme car à partir d'une position, je traitais les 8 cases autour, avec les positions en diagonale, alors qu'il semble que l'on ne traite que les 4 cases touchantes sur les cotés.
le site est un bon exemple de ce que l'on pourrait développer en solution graphique, une fois la solution trouvée en mode caractère
yg_be
Messages postés
23320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 novembre 2024
1 549
>
jee pee
Messages postés
40443
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
13 novembre 2024
5 mars 2021 à 11:51
5 mars 2021 à 11:51
floodfill est bien écrit et avorte immédiatement tout retour en arrière.
jee pee
Messages postés
40443
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
13 novembre 2024
9 418
5 mars 2021 à 20:09
5 mars 2021 à 20:09
Alors, où en es-tu dans ton code ?
J'ai repris ta fonction floodfill dans le mien, cela marche impec, et c'est simple.
J'ai repris ta fonction floodfill dans le mien, cela marche impec, et c'est simple.
2 mars 2021 à 20:24
Mais je ne sais pas sinon je n'aurai pas posé de questions ici...
L'objectif est lorsqu'une couleur est rentrée, exemple : v (vert) toute les couleurs adjacentes à la première couleur en haut à gauche , changent pour vert dans la mesure où elles sont identiques à la case d'en haut à gauche . Exemple si la grille est telle :
v v v j b r
v v r o b b
v b r o j j
Si j'entre 'r' pour rouge, alors tout les v adjacents changent pour r. Mais je n'y parvient pas c'est pour ça que mon dernier recours est ici.
En espérant d'avoir été plus clair.
Merci.
2 mars 2021 à 22:01
c'est bien la spécialité que tu as choisie?
montre nous la situation avant/après.
réfléchis à comment tu ferais, à la main, pour changer les couleurs.
comment vas-tu apprendre et progresser, en faisant chaque fois appel à d'autres?