Open sebhoa opened 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.
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 .
@ 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
@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 ....
@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 ;-)
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.
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 .
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
@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.
@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é
@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 :)
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.
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
@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
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 :-)
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.
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 :-)
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 ?