flotpython / recreation

Zone récréative pour les étudiants du MOOC Python3
10 stars 7 forks source link

general discussion #2

Open sebhoa opened 6 years ago

sebhoa commented 6 years ago

Bonjour, Désolé mais je ne m'y connais pas en git/github. Si je veux déposer ma version locale du code de Vigenère par exemple dans un dossier sebastienhoarau/ à l'endroit ad-hoc comment dois-je faire ? J'ai une version locale du projet recreation-master. Et j'ai créé en local le répertoire sebastienhoarau avec dedans ma version de l'exo. Ensuite ?

ghost commented 6 years ago

@sebhoa Sorry, mais j'ai du mal à composer car le preview ne fonctionne pas bien avec moi

Mon code est assez simple (1 centaine de lignes) :

je memorise tous les placements de nombre par leur coordonnées (en mémorisant en plus la valeur c'est à peu près pareil) .
qd je bloque je recupére le dernier placement de ma liste en regardant si j'ai encore une valeur disponible à tester (les valeurs possibles pour une case sont retournées triées, donc je prends d'abord les plus petites) , si OK , je continue avec cette valeur , sinon j'efface la case et je regarde le choix précédent , donc la case juste avant dans la liste , avec la meme stratégie et je ne garde donc au final que la suite qui remplit la grille .

Pour mémoire, à chaque tour je regarde quelle case me donnera le minimum de choix à tester , ce qui fait que les valeurs uniques sont priorisées à chaque tour J'ai mis un compteur de valeurs testees : pour le premier sudoku de votre fichier , cela conduit à environ 4800 chiffres mis ds la grille.

sebhoa commented 6 years ago

Ah d'accord il s'agit donc bien d'un backtrack mais en itératif : vous gérez "à la main" la pile des essais. Du coup j'en reviens à votre question : le niveau de récursivité ? vous voulez parler de la limite de la pile de récursion ? Aucun souci puisqu'on peut aller jusqu'à 999... ce qui est nettement plus que le maximum d'empilement qu'un sudoku va générer (au max 81 s'il est entièrement vide).

Le mar. 6 nov. 2018 à 20:37, JiPiBi notifications@github.com a écrit :

@sebhoa https://github.com/sebhoa Sorry, mais j'ai du mal à composer car le preview ne fonctionne pas bien avec moi

Mon code est assez simple (1 centaine de lignes) :

je memorise tous les placements de nombre par leur coordonnées (en mémorisant en plus la valeur c'est à peu près pareil) . qd je bloque je recupére le dernier placement de ma liste en regardant si j'ai encore une valeur disponible à tester (les valeurs possibles pour une case sont retournées triées, donc je prends d'abord les plus petites) , si OK , je continue avec cette valeur , sinon j'efface la case et je regarde le choix précédent , donc la case juste avant dans la liste , avec la meme stratégie et je ne garde donc au final que la suite qui remplit la grille .

Pour mémoire, à chaque tour je regarde quelle case me donnera le minimum de choix à tester , ce qui fait que les valeurs uniques sont priorisées à chaque tour

J'ai mis un compteur de valeurs testees : pour le premier sudoku de votre fichier , cela conduit à environ 4800 chiffres mis ds la grille.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/flotpython/recreation/issues/2#issuecomment-436319752, or mute the thread https://github.com/notifications/unsubscribe-auth/AJl3G_STuSBfREuCrHitfFt3mFm-rlyVks5usbrNgaJpZM4XUq_0 .

ghost commented 6 years ago

@ sebhoa j'ai enfin fini par comprendre comment faire une recursivité qui marche , en avancant de case en case jusqu'à blocage et remontée ensuite de l'info de blocage aux cases amont qui essaient de proposer une nouvelle valeur ou propagent le blocage mon probleme est que par rapport à mon autre approche par la selection des cases à nbre de choix limité et mémorisation je perds en performance. Je pourrais essayer de selectionner en continu les cases suivantes par le nombre de choix possibles dans la récursion , mais je ne vois pas comment tout cela me ferait atteindre des temps de résolution aussi bas que les votres ? j'ai pensé à des dictionnaires de valeurs pour les cases mais le recalcul systematique ne doit pas arranger les choses , donc pour le moment je reste sur ma faim

ghost commented 6 years ago

@sebhoa j'ai logiquement retrouvé mes temps de résolution précédents en appliquant dans la récursion la selection des cases à nbre de choix limité avec un code qui se simplifie ....

sebhoa commented 6 years ago

@JiPiBi

Oui dans une toute première version je faisais quelque chose comme ça :

def backtrack(sudoku):
        if final(sudoku):
            return True
        else:
            calcul_et_tri_cases_vides(sudoku)
            case_vide = premiere_case_vide(sudoku)
            for candidat in les_candidats_possibles(case_vide):
                jouer(candidat, sudoku)
                if backtrack(sudoku):
                    return True
            return False

Donc avec un recalcul des cases vides et tri (croissant) suivant le nombre de candidats possibles. Ca marche mais c'est bien sûr un peu lent. Maintenant je mémorise le changements lorsque je joue le candidat et si blocage (juste avant le False) je remets ce qu'il faut en place. Mais je dois tester autre chose... dès que j'ai le temps ;-)

ghost commented 6 years ago

Bonjour. Oui c'est comme cela que je fais et avant la récursivité j avais testé des solutions où je memorisais la grille complète au moment où il y avait un choix ( plusieurs candidats) donc un back tracking de grilles et de cases avec une valeur en parallèle. Mais l'efficacité était moins bonne...

Cependant je me m'explique pas la différence d efficacité entre votre code et le mien puisque les principes sont les memes. J ai essayé votre code chez moi et je vois même sur mon viel ordi les écarts que vous annonciez: sur un vieux 32 bits, j ai une moyenne de 0.08s sur les 10 eres grilles sans back tracking alors que chez moi mon code sur des grilles équivalentes certes uniquement en back tracking et sans implémentation aussi élaborée que la votre on parle en secondes (mon code fait tout mouillé une cinquantaine de lignes , la récursivité et 3, 4 fonctions de calcul) . J'ai vu aussi que même si on mesure le temps de création de la structure ds votre code , cela ne change pas grand chose aux ordres de grandeur.

Je voudrais déposer mon code à côté du votre ds github pour qu'il soit critiqué mais je n'ai pas de droit de creation de dossier juste de fichiers...

Juste en terme de détail par rapport à votre pseudocode, dans la fin du code je ne récupére que la valeur False sur l appel de la fonction(pas le True qui ne me semble rien apporter) et dans ce cas je relance sur la même case qui va par construction essayer une valeur de candidat plus élevée. De même si la grille est pleine pour terminer le jeu. Je fais un simple return

Envoyé depuis mon smartphone Samsung Galaxy.

-------- Message d'origine -------- De : Sébastien Hoarau notifications@github.com Date : 08/11/2018 04:27 (GMT+01:00) À : flotpython/recreation recreation@noreply.github.com Cc : JiPiBi jpbozo@hotmail.fr, Mention mention@noreply.github.com Objet : Re: [flotpython/recreation] general discussion (#2)

@JiPiBihttps://github.com/JiPiBi

Oui dans une toute première version je faisais quelque chose comme ça :

def backtrack(sudoku): if final(sudoku): return True else: calcul_et_tri_cases_vides(sudoku) case_vide = premiere_case_vide(sudoku) for candidat in les_candidats_possibles(case_vide): jouer(candidat, sudoku) if backtrack(sudoku): return True return False

Donc avec un recalcul des cases vides et tri (croissant) suivant le nombre de candidats possibles. Ca marche mais c'est bien sûr un peu lent. Maintenant je mémorise le changements lorsque je joue le candidat et si blocage (juste avant le False) je remets ce qu'il faut en place. Mais je dois tester autre chose... dès que j'ai le temps ;-)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/flotpython/recreation/issues/2#issuecomment-436860990, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AeRAQnA4z9ZM9cssqenhjjCiUS0pEHs7ks5us6SfgaJpZM4XUq_0.

sebhoa commented 6 years ago

Je regarde dès que j'ai un temps (fête de la science en préparation)... pour le dépôt vous ne pouvez pas 'pusher' dans sudoku/ un dossier JiPiBi ? Là j'avoue que je ne sais pas trop faudrait l'intervention de M. Parmentelat.

-- Sébastien

Le jeu. 8 nov. 2018 à 13:28, JiPiBi notifications@github.com a écrit :

Bonjour. Oui c'est comme cela que je fais et avant la récursivité j avais testé des solutions où je memorisais la grille complète au moment où il y avait un choix ( plusieurs candidats) donc un back tracking de grilles et de cases avec une valeur en parallèle. Mais l'efficacité était moins bonne...

Cependant je me m'explique pas la différence d efficacité entre votre code et le mien puisque les principes sont les memes. J ai essayé votre code chez moi et je vois même sur mon viel ordi les écarts que vous annonciez: sur un vieux 32 bits, j ai une moyenne de 0.08s sur les 10 eres grilles sans back tracking alors que chez moi mon code sur des grilles équivalentes certes uniquement en back tracking et sans implémentation aussi élaborée que la votre on parle en secondes (mon code fait tout mouillé une cinquantaine de lignes , la récursivité et 3, 4 fonctions de calcul) . J'ai vu aussi que même si on mesure le temps de création de la structure ds votre code , cela ne change pas grand chose aux ordres de grandeur.

Je voudrais déposer mon code à côté du votre ds github pour qu'il soit critiqué mais je n'ai pas de droit de creation de dossier juste de fichiers...

Juste en terme de détail par rapport à votre pseudocode, dans la fin du code je ne récupére que la valeur False sur l appel de la fonction(pas le True qui ne me semble rien apporter) et dans ce cas je relance sur la même case qui va par construction essayer une valeur de candidat plus élevée. De même si la grille est pleine pour terminer le jeu. Je fais un simple return

Envoyé depuis mon smartphone Samsung Galaxy.

-------- Message d'origine -------- De : Sébastien Hoarau notifications@github.com Date : 08/11/2018 04:27 (GMT+01:00) À : flotpython/recreation recreation@noreply.github.com Cc : JiPiBi jpbozo@hotmail.fr, Mention mention@noreply.github.com Objet : Re: [flotpython/recreation] general discussion (#2)

@JiPiBihttps://github.com/JiPiBi

Oui dans une toute première version je faisais quelque chose comme ça :

def backtrack(sudoku): if final(sudoku): return True else: calcul_et_tri_cases_vides(sudoku) case_vide = premiere_case_vide(sudoku) for candidat in les_candidats_possibles(case_vide): jouer(candidat, sudoku) if backtrack(sudoku): return True return False

Donc avec un recalcul des cases vides et tri (croissant) suivant le nombre de candidats possibles. Ca marche mais c'est bien sûr un peu lent. Maintenant je mémorise le changements lorsque je joue le candidat et si blocage (juste avant le False) je remets ce qu'il faut en place. Mais je dois tester autre chose... dès que j'ai le temps ;-)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub< https://github.com/flotpython/recreation/issues/2#issuecomment-436860990>, or mute the thread< https://github.com/notifications/unsubscribe-auth/AeRAQnA4z9ZM9cssqenhjjCiUS0pEHs7ks5us6SfgaJpZM4XUq_0>.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/flotpython/recreation/issues/2#issuecomment-436929230, or mute the thread https://github.com/notifications/unsubscribe-auth/AJl3GxQ_I-6F0_SD0nrSOy4WAxEXg_Zqks5us_kjgaJpZM4XUq_0 .

parmentelat commented 6 years ago

On 8 Nov 2018, at 11:31, Sébastien Hoarau notifications@github.com wrote:

Je regarde dès que j'ai un temps (fête de la science en préparation)... pour le dépôt vous ne pouvez pas 'pusher' dans sudoku/ un dossier JiPiBi ? Là j'avoue que je ne sais pas trop faudrait l'intervention de M. Parmentelat.

Bonsoir à tous

je ne suis votre discussion que de très loin, mais vous m’avez l’air de vous être lancés tous les deux dans des sujets très pointus, j’espère que cet échange vous est mutuellement bénéfique

s’agissant du repo: il doit y avoir autre chose, car avec git il n’y a pas de notion de droit d’écriture de répertoire ou de fichiers c’est soit on n’a pas le droit d’écrire du tout - on ne peut que tirer soit on a le droit d’écrire dans le repo, et on peut pousser un commit

et vous avez tous les deux le droit d’écrire..

envoyez-moi le message exact quand ça se produit et vous dirai ce qui ne va pas (pour être encore plus explicite, tant que vous faites git add ou git commit, ça reste en local sur votre ordi, il n’y a que le push qui essaie d’écrire vraiment sur github)

— Thierry

ghost commented 5 years ago

@parmentelat Comme je l'ai dit je suis content d'avoir pu coder une résolution de sudoku en objet et en récursivité et je vais m'arrêter là.. Pour ce qui est des répertoires je ne suis pas un expert je ne vois que la possibilité d'ajouter un fichier , pas un répertoire. La première fois c vous qui l'avez fait pour moi. Je n ai donc pas de message car je n'ai pas trouvé le menu qui va bien JP BAUJOT

Envoyé depuis mon smartphone Samsung Galaxy.

ghost commented 5 years ago

@parmentelat j'ai essayé à nouveau de creer un directory suivant infos vu sur le web, je me suis mis dans recreation/sudoku et j'ai essayé de le préfixer jpbaujot/test.txt, je peux mettre du texte dans edit , mais la zone commit n'est pas accessible . Qd j'essaye d'acceder en commande line en copiant la ligne d'un de vos messages : git clone git@github.com:flotpython/recreation.git l'accès m'est refusé

parmentelat commented 5 years ago

@JiPiBi

Je pensais que vous utilisiez la ligne de commandes de git..

Pas de souci je crée un sudoku/jpbaudot, j'espère que ça va vous décoincer :)

ghost commented 5 years ago

Je préférerais jpbaujot

Pour la ligne de commande j'étais aussi bloqué

Envoyé depuis mon smartphone Samsung Galaxy.

-------- Message d'origine -------- De : parmentelat notifications@github.com Date : 08/11/2018 22:02 (GMT+01:00) À : flotpython/recreation recreation@noreply.github.com Cc : JiPiBi jpbozo@hotmail.fr, Mention mention@noreply.github.com Objet : Re: [flotpython/recreation] general discussion (#2)

@JiPiBihttps://github.com/JiPiBi

Je pensais que vous utilisiez la ligne de commandes de git..

Pas de souci je crée un sudoku/jpbaudot, j'espère que ça va vous décoincer :)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/flotpython/recreation/issues/2#issuecomment-437154652, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AeRAQnG-xvsJLsCFz2jlvtMil_CXwRidks5utJvjgaJpZM4XUq_0.

parmentelat commented 5 years ago

On 9 Nov 2018, at 00:32, JiPiBi notifications@github.com wrote:

Je préférerais jpbaujot

Pour la ligne de commande j'étais aussi bloqué

oui c’est ça pardon:

tparment ~/git/flotpython-recreation/sudoku (master $<>) $ git ls-files README.md jpbaujot/README.md sebastienhoarau/sudoku17.txt

ghost commented 5 years ago

@parmentelat merci pour la creation , mais le pb semble plus profond , qd je veux creer un fichier md par exemple dans ce directory sudoku/jpbaujot ,le commit en bas et en vert pale et je ne peux rien faire , j'ai essayé de corriger votre readme , mais meme phenomene

yaizac commented 5 years ago

Bonjour à tous, moi non plus je ne suis pas familier avec git: pouvez-vous m'envoyer une invitation SVP, pour me donner les droits d'écrire directement dans le projet principal (flotpython/recreation)?

Je souhaiterais connaître vos avis/critiques sur le programme que j'ai créé pour le boulot, je l'ai bien documenté, je l'ai déposé dans un repository (mais sur mon compte) et je ne sais pas encore comment le partager. Mais le plus simple serait que je le copie dans le projet flotpython/recreation. C'est un programme que je considère de niveau intermédiaire, j'aurai la tâche d'en créer un plus compliqué utilisant entre autre une imprimante réseau et des logiciels scientifiques (ou un module scientifique de python).

D'avance merci :-)

parmentelat commented 5 years ago

désolé pour le temps de réaction, c’est fait maintenant, vous avez dû recevoir un mail d’invitation au projetOn 30 Nov 2018, at 16:12, yaizac notifications@github.com wrote:Bonjour à tous, moi non plus je ne suis pas familier avec git: pouvez-vous m'envoyer une invitation SVP, pour me donner les droits d'écrire directement dans le projet principal (flotpython/recreation)?Je souhaiterais connaître vos avis/critiques sur le programme que j'ai créé pour le boulot, je l'ai bien documenté, je l'ai déposé dans un repository (mais sur mon compte) et je ne sais pas encore comment le partager. Mais le plus simple serait que je le copie dans le projet flotpython/recreation.C'est un programme que je considère de niveau intermédiaire, j'aurai la tâche d'en créer un plus compliqué utilisant entre autre une imprimante réseau et des logiciels scientifiques (ou un module scientifique de python).D'avance merci :-)—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

yaizac commented 5 years ago

Merci Thierry, pas de soucis pour le temps de réaction car je viens seulement de vérifier les réponses... je vais essayer de vous mettre mon dossier cet après-midi :-)