Une suite.... mais quelle suite...

Une B2-suite est une suite d'entiers strictement croissante telle qu'il n'existe pas deux couples de termes (un couple peut être formé du même terme utilisé deux fois) qui donnent la même somme.

Dans la suite, nous nous intéressons à des B2-Suites particulières construites de manière incrémentale à partir de 4 premiers termes arbitraires. Pour construire ces suites on choisira systématiquement d'ajouter le terme le plus petit possible qui satisfait les propriétés des B2-Suites.

Par exemple si le début de la suite est 1,3,6,7, le terme suivant sera nécessairement 14. En effet :

  • ça ne peut pas être 8 (car 8+1=9 et 6+3 vaut déjà 9)
  • ça ne peut pas être 9 (car 9+1=10 et 3+7 vaut déjà 10)
  • ça ne peut pas être 10 (car 10+3=13 et 7+6 vaut déjà 13)
  • ça ne peut pas être 11 (car 11+1=12 et 6+6 vaut déjà 12)
  • ça ne peut pas être 12 (car 12+1=13 et 7+6 vaut déjà 13)
  • ça ne peut pas être 13 (car 13+1=14 et 7+7 vaut déjà 14)
  • ça peut être 14

On choisira donc U(4)=14

En procédant de même pour calculer U(5), on trouve : U(5)=23 puis U(6)=33.

Les données d'entrée vous indiquent n, le numéro d'ordre du terme à calculer et debut, un tuple contenant les premières valeurs de la suite à partir de U(0). Vous devez répondre en donnant d'une part la valeur du terme U(n) et d'autre part la somme de tous les termes de U(0) à U(n) inclus.

Testez votre code

Si n=6 et debut=(1,3,6,7) Vous devez répondre par 33,87 car la séquence calculée vaut : 1, 3, 6, 7, 14, 23, 33
Le coin tuto

Ensembles : Set

Les ensembles sont des collections, itérables (comme les listes ou les tuples), mais non ordonnées et dont tous les éléments sont distincts.

Voici un exemple montrant comment créer un ensemble, y jouter des éléments, et tester l'appartenance :

s = set()
s.add(4)
s.add(6)
print(s)
s.add(6)
print(s)
for k in (4,5,6):
    if k in s:
        print("{0} est dans s".format(k))
    else:
        print("{0} n'est pas dans s".format(k))

Plusieurs opérations (sont le résultat est encore un ensemble) sont définies sur les ensembles (différence, union, intersection) :

s1 = {1, 5, 10, 13}
s2 = {1, 13, 2}
print(s1 - s2) # différence
print(s1 | s2) # union
print(s1 & s2) # intersection

Module itertools

Le module itertools contient des méthodes pour énumérer, créer des itérables etc... De l'aide peut être obtenu en entrant : import itertools; help(itertools)

Combinaisons

À partir d'un itérable, construit les combinaisons, avec ou sans répétitions de k éléments :

import itertools
l = (1,4,6)
for c in itertools.combinations(l,2):
    print(c)

for c in itertools.combinations_with_replacement(l, 2):
    print(c)

# Somme de toutes les paires d'éléments distincts:
list(sum(i) for i in itertools.combinations(l,2))
Type de retour
une séquence de deux entiers
Entrées du problème
  • n : 18
  • debut : [1, 17, 31, 41]
Vous devez être connecté.e pour proposer une réponse au défi
Vous devez être connecté.e pour accéder aux forums.