En fouillant dans sa bibliothèque, Adenine se rend compte qu’un de ses livres a une feuille arrachée.
Dans les numéros de pages de ce livre, on retrouve exactement 47 fois le chiffre 1 et 19 fois le chiffre 0. Le livre a un nombre pair de pages.
Quelle feuille a été arrachée ?
def count_ones(n):
# Compte les occurrences de '1' dans le nombre sous forme de chaîne
return ' '.join(str(i) for i in range(1, n+1)).count('1')
def count_zeros(n):
# Compte les occurrences de '0' dans le nombre sous forme de chaîne
return ' '.join(str(i) for i in range(1, n+1)).count('0')
# Exemple d'utilisation de ces fonctions
n = 118
result = count_ones(n)
print(f"Le nombre de chiffres '1' dans les nombres de 1 à {n} est : {result}")
result = count_zeros(n)
print(f"Le nombre de chiffres '0' dans les nombres de 1 à {n} est : {result}")
# Dans la suite on compte tous les 1 et les zeros de notre livre en enlevant la feuille 101/102
page_arr_1 = 101 # Première page arrachée
# Nombres de 1 de la feuille arrachées (les 2 pages)
count_ones_pa_12 = (str(page_arr_1) + str(page_arr_1 +1 )).count('1')
# Nombres de 0 de la feuille arrachées (les 2 pages)
count_zeros_pa_12 = (str(page_arr_1)+ str(page_arr_1 + 1)).count('0')
print('Page, Nb de 1, Nb de 0')
for page in range(1, 119):
if page < page_arr_1: # On compte les 1 et les 0
print(f'{page}, {count_ones(page)}, {count_zeros(page)}')
elif page > page_arr_1 + 1: # On compte les 1 et les 0 en enlevant ceux de la feuille arrachée
print(f'{page}, {count_ones(page) - count_ones_pa_12}, {count_zeros(page) - count_zeros_pa_12}')
# On peut aussi vérifier toutes les solutions par le code suivant :
possible_pages = [i for i in range(1, 119) if i % 2 != 0]
for page_arr_1 in possible_pages:
feuille_arr = [page_arr_1,page_arr_1+1]
nb_1 = len([c for c in ' '.join(str(i) for i in range(1, 119) if i not in feuille_arr) if c=="1"])
nb_0 = len([c for c in ' '.join(str(i) for i in range(1, 119) if i not in feuille_arr) if c=="0"])
if nb_1==47 and nb_0==19:
print(f'({feuille_arr[0]},{feuille_arr[1]})')
#Si l'on veut utiliser le critère que l'on a mis en place, on peut utiliser ce programme
possible_pages = [i for i in range(1, 119) if i % 2 != 0]
for page_arr_1 in possible_pages:
feuille_arr = str(page_arr_1)+str(page_arr_1+1)
nb_1 = feuille_arr.count('1')
nb_0 = feuille_arr.count('0')
if nb_1 == 3 and nb_0 == 2: # On ne garde que les feuilles avec 3 un et 2 zéros
print(f'({page_arr_1},{page_arr_1+1})')