Lister les parties à 3 éléments de {1;2;3;4;5}

2»

Réponses

  • gebrane
    Modifié (April 2023)
    Tu as parfaitement raison. J'ai compté la même combinaison plusieurs fois.
    Entrez la valeur de n : 5
    Entrez la valeur de k : 3
    Entrez l'element 1 de la partie : 2
    Entrez l'element 2 de la partie : 2
    Entrez l'element 3 de la partie : 3
    Les combinaisons possibles sont : 
    [(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 1, 5), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 2, 5), 
    (1, 3, 1), (1, 3, 2), (1, 3, 3), (1, 3, 4), (1, 3, 5), (1, 4, 1), (1, 4, 2), (1, 4, 3), (1, 4, 4), (1, 4, 5),
    (1, 5, 1), (1, 5, 2), (1, 5, 3), (1, 5, 4), (1, 5, 5), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 1, 5), 
    (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 2, 5), (2, 3, 1), (2, 3, 2), (2, 3, 3), (2, 3, 4), (2, 3, 5), 
    (2, 4, 1), (2, 4, 2), (2, 4, 3), (2, 4, 4), (2, 4, 5), (2, 5, 1), (2, 5, 2), (2, 5, 3), (2, 5, 4), (2, 5, 5),
    (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 1, 4), (3, 1, 5), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 2, 4), (3, 2, 5),
    (3, 3, 1), (3, 3, 2), (3, 3, 3), (3, 3, 4), (3, 3, 5), (3, 4, 1), (3, 4, 2), (3, 4, 3), (3, 4, 4), (3, 4, 5),
    (3, 5, 1), (3, 5, 2), (3, 5, 3), (3, 5, 4), (3, 5, 5), (4, 1, 1), (4, 1, 2), (4, 1, 3), (4, 1, 4), (4, 1, 5), 
    (4, 2, 1), (4, 2, 2), (4, 2, 3), (4, 2, 4), (4, 2, 5), (4, 3, 1), (4, 3, 2), (4, 3, 3), (4, 3, 4), (4, 3, 5),
    (4, 4, 1), (4, 4, 2), (4, 4, 3), (4, 4, 4), (4, 4, 5), (4, 5, 1), (4, 5, 2), (4, 5, 3), (4, 5, 4), (4, 5, 5),
    (5, 1, 1), (5, 1, 2), (5, 1, 3), (5, 1, 4), (5, 1, 5), (5, 2, 1), (5, 2, 2), (5, 2, 3), (5, 2, 4), (5, 2, 5),
    (5, 3, 1), (5, 3, 2), (5, 3, 3), (5, 3, 4), (5, 3, 5), (5, 4, 1), (5, 4, 2), (5, 4, 3), (5, 4, 4), (5, 4, 5),
    (5, 5, 1), (5, 5, 2), (5, 5, 3), (5, 5, 4), (5, 5, 5)]
    
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


  • 
    L=list(itertools.combinations_with_replacement(range(1,6),3))
    L[16]
    
    (2, 2, 3)

  • J'ai fait les petites modifications pour les combinaisons avec répétitions. Pas de problème, ça marche bien. Maintenant, dodo. À demain
  • gebrane
    Modifié (April 2023)
    Tu as raison voici le code corrigé grace à ton dernier message
    from itertools import combinations_with_replacement
    
    n = int(input("Entrez la valeur de n : "))
    k = int(input("Entrez la valeur de k : "))
    elements = list(range(1, n+1))
    partie = [int(input(f"Entrez l'element {i+1} de la partie : ")) for i in range(k)]
    comb = sorted(combinations_with_replacement(elements, k))
    index = comb.index(tuple(partie)) + 1 if tuple(partie) in comb else None
    print("Le numéro de la partie est :", index) if index else print("La partie doit contenir exactement k éléments")
    
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


  • gebrane
    Modifié (April 2023)
    un exemple
    Entrez la valeur de n : 5
    Entrez la valeur de k : 3
    Entrez l'element 1 de la partie : 2
    Entrez l'element 2 de la partie : 2
    Entrez l'element 3 de la partie : 3
    Le numéro de la partie est : 17
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


  • Je ne sais pas si tu as réussi la question avec ta consigne.
    Avant de prendre mon romain policier et oublier les maths, je vais appliquer ce que j'ai appris pour donner le rang d'une chaine de caractère dans l'alphabet selon l'ordre lexicographique;  je veux savoir le rang par un code de gebrane et gabuzomeu   :D
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


  • GaBuZoMeu
    Modifié (April 2023)
    Bien dormi ?
    Pour varier les plaisirs, un programme python qui calcule le rang d'une combinaison avec répétition où la récursion est remplacée par une boucle : 
    def rangrep(liste,p) :
        n = p ; k = len(liste) ; rang = 1
        L=sorted(liste)
        while k>0 : 
            tete = L.pop(0)
            rang += math.comb(n-1+k,k)-math.comb(n+k-tete,k)
            k -= 1 ; n -= tete-1
            L = [i-tete+1 for i in L]
        return rang
    On peut regarder ce que ça donne pour un gros exemple.
    import random as rd
    L = [rd.randrange(1,101) for _ in range(50)]
    print(L)
    [2, 3, 4, 6, 7, 9, 10, 11, 11, 14, 17, 17, 23, 23, 40, 40, 41, 44, 45, 47, 47, 47, 49, 50, 52, 57, 57, 58, 61, 63, 63, 64, 64, 67, 68, 70, 71, 72, 74, 74, 81, 81, 84, 86, 88, 90, 93, 94, 94, 96]
    %time rangrep(L,100)
    CPU times: user 636 µs, sys: 0 ns, total: 636 µs
    Wall time: 641 µs
    5823442742252119945851041994121764927170
  • gebrane
    Modifié (April 2023)
    Bonjour, 
    Hier,  j'avais remplacé dans ton premier code   math.comb(n,k)-math.comb(n+1-tete,k) par math.comb(n-1+k,k)-math.comb(n+k-tete,k)
    et j'avais obtenu le rang 12 pour indice ([2,2,3],5), il fallait trouver 17
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


  • Tu avais oublié de remplacer
     queue = [i-tete for i in liste]
    par
     queue = [i-tete+1 for i in liste]
    :D
  • gebrane
    Modifié (April 2023)
    Dois-je dire oh la la ou oh la vache :s
    Je suis paumé
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


  • GaBuZoMeu
    Modifié (April 2023)
    Dans une combinaison avec répétition, il peut y avoir des répétitions.
  • gebrane
    Modifié (April 2023)
    Merci infiniment.
    Tes questions sont toujours intéressantes, impressionnantes  mais  savonneuses.
    À une prochaine rencontre.
    Lorsque notre cher Nico, le professeur, intervient dans une question d'analyse, c'est une véritable joie pour les lecteurs..


Connectez-vous ou Inscrivez-vous pour répondre.