Répartition VBA Quine Loto

Bonjour,

Mes neurones sont en ébullition. Quelqu'un pour me tirer de ce mauvais pas ?

Tout sur le problème dans le fichier joint.

A+

68algo.xlsx (12.67 Ko)

Bonjour maître Galopin,

Intéressant ! j'aime bien ces challenges ...

J'ai juste commencé bestialement à avoir toutes les combinaisons d'une ligne. C'est assez instantané.

Il faut que je réfléchisse maintenant à faire de même pour chaque ligne de la grille en éjectant les combinaisons qui ne sont pas conformes au total attendu pour chaque colonne.

22algo.xlsm (24.43 Ko)

Bonjour Steelson,

Je sens qu'il faut que je me précipite chez mon pharmacien pour refaire ma provision de Doliprane...

Il me semble qu'il faut d'abord les assembler 3 par 3 : Pour chaque groupe de 3 tu dois avoir 1 ou 2 "1" (mais ni 0 ni 3 !)

A+

Ok je vais prendre en compte cette contrainte également. Voici mon plan :

  1. Après mûre réflexion, je vais aménager ce que j'ai fait et cela me donnera tous les "candidats ligne" possible.
  2. Ensuite, pour les 18 lignes, je vais les combiner et en sortir les solutions possibles.

Quoique je me demande s'il ne faut pas d'abord sortir des "candidats-colonnes" de 9, 10, et 11 cases et ensuite les combiner. par 9. Mouais, la nuit portera réflexion ! mais cela risque de me réveiller à 2h du mat' en pleine effervescence.

Ou alors en effet ta piste de travail par "bloc de 9" à rassembler, c'est sans doute plus pertinent.

La règle que tu indiques est valable pour une ligne,( c'est à dire pas plus de 2 "1" consécutifs et pas plus de 2 vides consécutifs) ? mais en colonne je vois qu'on peut avoir des suites de 1 assez longue. Est-ce bien le cas (cf ton exemple).

Il faut se replacer dans le contexte Loto : Prise séparément chaque grille 9 x 3 est valide du moment qu'elle comporte 5 nombres par lignes et au moins un blanc/vide par colonne.

grille

La complexité vient de l'assemblage final : Tu ne peux assembler que des grilles qui permettent l'assemblage final.

C'est à dire pour la colonne 1 : 3 grilles de 2 nombres et 3 autres avec un seul...

pour la colonne 10 : 5 grilles avec 2 nombre et 1 avec un seul...

Chacune des autres colonnes comporte 4 grilles de 2 nombres et 2 avec un seul.

Ok ?

Première étape ... voici les 45 lignes qui répondent aux critères d'avoir 5 cases dont pas plus de 2 consécutives.

Option Base 1
Sub algo()
Dim grille(1 To 3, 1 To 9)
    Sheets("grilles").Select
    Cells.ClearContents
    num = 1
    For i = 1 To 3
        For j = 1 To 9
            grille(i, j) = 0
        Next
    Next
    For i = 1 To 1 '3
        For j1 = 1 To 9 - 4
        For j2 = j1 To 9 - 3
        For j3 = j2 To 9 - 2
        For j4 = j3 To 9 - 1
        For j5 = j4 To 9
            For j = 1 To 9
                grille(i, j) = 0
            Next
            grille(i, j1) = 1
            grille(i, j2) = 1
            grille(i, j3) = 1
            grille(i, j4) = 1
            grille(i, j5) = 1
            somLigne = 0
            For j = 1 To 9
                somLigne = somLigne + grille(i, j)
            Next
            If somLigne = 5 Then
                flag = True
                For j = 1 To 7
                    som = grille(i, j) + grille(i, j + 1) + grille(i, j + 2)
                    If som = 0 Then flag = False
                    If som = 3 Then flag = False
                Next
                If flag Then
                    ' ok la ligne fonctionne, on peut passer à la suivante jusque 18
                    Cells(num, 1).Resize(1, 9) = grille
                    num = num + 1
                End If
            End If
        Next
        Next
        Next
        Next
        Next
    Next

End Sub

C'est assez bestial à ce stade

18algo.xlsm (23.59 Ko)

Je vais maintenant faire les grilles de 9x3 ...

comporte 5 nombres par lignes et au moins un blanc/vide par colonne

est que dans une colonne il peut y avoir 3 vides ?

NON !

Dans chaque grille (9 x 3) il doit y avoir 1 ou 2 nombres par colonne

Par rapport à ta réponse de 18:23

"Première étape ... voici les 45 lignes qui répondent aux critères d'avoir 5 cases dont pas plus de 2 consécutives."

Il n'est écrit nulle part 2 consécutives !

1 ou 2 (contigües ou non) par colonnes dans chaque grille de 3.

5 (contigües ou non) par lignes dans chaque lignes.

J'ai trouvé des exemple de lignes valides dans des cartons de 18 lignes ou il y avait des groupes de 3 horizontaux. (3+1+1) ou (3+2)

Je n'ai pas encore trouvé de lignes valides avec des groupes de 4 ni 5 (ce qui ne veut pas dire que ce n'est pas possible.

Il semble que...

On ne puisse pas adopter comme stratégie de travailler d'abord les lignes et ensuite les colonnes ni l'inverse :

En effet a chaque fois qu'on rajoute un nombre sur le carton, il faut vérifier que les conditions sont valides

- Horizontalement qu'on ne dépasse pas le maximum autorisé mais aussi qu'il reste suffisamment de colonnes libre pour poser le reste à poser

e.x. si dans une ligne tu as 0010010 cette ligne ne pourra pas être valide car il ne reste plus que 2 colonnes vide pour 3 "1" à poser.

- idem Verticalement : pour les groupes de 3 colonnes puis pour la colonne entière en tenant compte du quota de "paires" a constituer verticalement.

Exemple d'un carton comportant 6 grilles valides :

cartons

Ces 6 grilles comportent les 90 numéros possibles.

la 4ème comporte une ligne de 3 contigües...

A+

Je dois sans doute faire fausse route, ou tout au moins en avoir plus que nécessaire ... voici 8490 cartes de 9x3 répondant aux critères suivants

  • sur une ligne, la somme est égale à 5
  • sur une ligne, pas plus de 2 contiguës (mais je comprends que c'est une mauvaise interprétation, je vais refaire l'essai sans cette contrainte)
  • sur une colonne, 1 ou 2 cases

ce que je comprends alors, c'est qu'il faut que je marie 6 cartes (différentes ?) parmi ces 8490 en regardant le respect des critères colonnes (somme de 9, 10 et 11)

14algo.xlsm (26.95 Ko)

edit : en enlevant la contrainte que je m'étais peut-être imposée à tort, je trouve 91125 cartes !

Faut que je joue au loto pour comprendre ...

Dans chaque grille (9 x 3) il doit y avoir 1 ou 2 nombres par colonne

ou 3 ? c'est un peu le souk au niveau des règles !! http://villemin.gerard.free.fr/aJeux1/Combin/LotoTrad.htm#carton

voir ici http://villemin.gerard.free.fr/aJeux1/Combin/LotoTra0.htm#CLoto le nombre de config différentes : 733 320 !

et un programme http://villemin.gerard.free.fr/aJeux1/Combin/LotoTra1.htm#prog

ici c'est un peu plus raisonnable en effet, https://fr.wikipedia.org/wiki/Quine_(jeu)#Le_carton

je crois que je vais aller dormir, je suis ko

Tes 8490 lignes correspondent parfaitement aux règles sauf qu'elles exclues les contigües horizontales de 4 ou 5 nombres. Mais inutiles de chercher à les intégrer :

Si on rassemble par groupe de 6 tes 8490 grilles on devrait pouvoir obtenir 1415 cartons valides. En effet chaque grille matrice recevra ensuite une combinaison de 15 nombres qui seront toujours très différents : Une fois le tirage des N° cibles affectés cela devraient permettre de réaliser une bonne série de plusieurs milliers de cartons différents.

Ce que je comprends alors, c'est qu'il faut que je marie 6 cartes (différentes ?) parmi ces 8490 en regardant le respect des critères colonnes (somme de 9, 10 et 11)

Tu as parfaitement compris !

Pour les règles à géométrie variables, inutile de chercher, il n'y a pas de règles officielles c'est l'usage qui prévaut : Certains l'aime comme ci, d'autres comme ça. Et je ne te cause même pas des départements d'outre-mer qui en sont également très friands !

Les règles que je te donne sont un peu particulière et constituent une demande d'un certain nombre d'organisateurs qui souhaitent pouvoir proposer à leurs participants des grilles comportant leur N° fétiche. Comme dans chaque cartons tous les N° sont présents, il n'y a jamais de mécontents.

L'avantage de cette règle est qu'elle n'exclue aucun N° au moment du tirage : Alors que les grilles quelconques peuvent comporter des séries complètement aléatoires avec des nombres absents, des lignes avec 7 ou 8 nombres et d'autres avec autant de blancs... Je suis bien placé pour le savoir depuis 20 ans, j'en ai tiré plusieurs dizaines de milliers sur plusieurs millions de lignes Excel !

Bref ce qui m'intéresse aujourd'hui ce sont celles qui correspondent à cette contrainte qui semble très appréciée. Au point que même les fabricants en ont quelques unes dans leurs propositions commerciales.

Bref si tu arrives à assembler ça 6 par 6 tu feras un heureux ! C'est pour une association qui œuvre pour soigner une maladie rare.

A+

Bref si tu arrives à assembler ça 6 par 6 tu feras un heureux ! C'est pour une association qui œuvre pour soigner une maladie rare.

je suis requinqué ... c'est parti !

Le temps de traitement risque de devenir scatologique !

Pour faire tes assemblages tu as sans doute intérêt à les stocker dans un Array de 9 x 25470 (8490 x 3 sans espaces entre les cartons)

Il y a 2 hypothèses :

1 - On élimine les cartons qui sont déjà assemblés : On aura alors au maximum 1415 cartons valides ( Ce qui me suffira largement compte tenu qu'ensuite on leur affectera des nombres différents, ça me fera certainement plusieurs milliers de cartons différents.

EDIT: Selon mes calculs cette hypothèse ne pourrait générer qu'un maximum de 877 cartons (et peut-être beaucoup moins)

2 - Si l'hypothèse 1 se révèle insuffisante (parce que tes 8490 grilles ne permettent pas assez d'assemblages...) il sera alors toujours possible de tenter un brassage complet en réemployant 1 ou plusieurs grilles et en tentant d'autres assemblage. La "totale" quoi...

Rappel : Dans un carton de 6 grilles la colonne 9 ne comporte qu'une grille avec un seul numéro : Il est inutile de tenter des assemblage ou plusieurs grilles n'ont qu'un N° dans cette colonne 9. (il n'y a que 4104 grilles ne comportant qu'un "1" colonne 9)

On peut suivre le même raisonnement pour les colonnes 2 à 8 : Un cartons de 6 grilles ne peut comporter que 2 grilles avec un seul N° dans ces colonnes.

La colonne 1 n'en comporte que 3...

A+

Le temps de traitement risque de devenir scatologique !

mouais, c'est ce que je me disais ! j'ai fait un essai, au bout d'une heure je n'avais aucun résultat

Dans un carton de 6 grilles la colonne 9 ne comporte qu'une grille avec un seul numéro : Il est inutile de tenter des assemblage ou plusieurs grilles n'ont qu'un N° dans cette colonne 9.

On peut suivre le même raisonnement pour les colonnes 2 à 8 : Un cartons de 6 grilles ne peut comporter que 2 grilles avec un seul N° dans ces colonnes.

La colonne 1 n'en comporte que 3...

tu as raison, il faut d'abord procéder par analyse et effectuer les assemblages en fonction de populations réduites

est-ce qu'une même grille (sans les n° bien sûr) peut être utilisée plusieurs fois ?

suite ...

  • j'ai créé 84 familles homogènes (même nombre de cases remplies par grille sur chaque colonne)
  • ces familles sont appelées par exemple fam222222111 avec le chiffre désignant le nombre de cases remplies pour chaque colonne de la grille
  • je pense assembler ces familles en suivant ton analyse pour faire des cartons de 6 grilles homogènes en nombre de cases renseignées par colonne,
  • ensuite il faudra pour chaque famille choisir parmi ses membres (exemple la famille fam222222111 a 18 possibilités de grille)
    26algo-loto.zip (967.04 Ko)

Relire ma réponse précédente ou j'apporte quelques précisions.

En attendant je vais éplucher ton dernier fichier.

EDIT : On y remarque une répartition très inégale des familles : Moins de 20 dans quelques cas et notamment colonne 9...

C'est assez inattendu ! Je ne sais pas ce que cela signifie, mais en première analyse je remarque que la colonne A avec 1 est assez déterminante pour ces familles réduites...

Cette histoire de famille est brillante !

En somme il ne reste plus qu'à trouver quelles combinaisons de 6 familles donne le total voulu.

91010101010101011

C'est ça ?

Affirmatif !

Essaie aussi de ton côté, mes neurones se sont mis en orbite géostationnaire et ne produisent plus rien de bon pour le moment !

Rechercher des sujets similaires à "repartition vba quine loto"