Salut à tous,
Pour m'entraîner à Python, je me suis lancé dans un exercice de CodinGame appelé The Lucky Number. En voici l'énoncé.
A lucky number is a 10-based number, which has at least a "6" or an "8" in its digits. However, if it has "6" and "8" at the same time, then the number is NOT lucky. For example, "16", "38", "666" are lucky numbers, while "234" , "687" are not.
Now we want to know how many lucky numbers (without leading zeroes) are there between L and R, inclusive?
Seulement voilà, je suis bloqué depuis deux jours. J'ai tenté de convertir un nombre en chaîne de caractères pour trouver des occurrences de 6 ou 8, de récupérer chaque chiffre à coup de division par 10, rien n'y fait, c'est trop lent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import sys import math # Auto-generated code below aims at helping you parse # the standard input according to the problem statement. l, r = [int(i) for i in input().split()] # Write an action using print # To debug: print("Debug messages...", file=sys.stderr) def calculate_possibilities(max): """Calculate the numbers of lucky numbers from 0 to 10**(max - 1)""" possibilities = { 10: 2 } index = 2 while index < max: possibilities[10**index] = 2*(9**(index - 1)) + 8 * possibilities[10**(index-1)] index = index + 1 return possibilities possibilities = calculate_possibilities(30) def has_digit(number): string = str(number) return ('6' in string) ^ ('8' in string) def count_occurences(min, max): count = 0 while min < max: if has_digit(min): count = count + 1 min = min + 1 return count def get_nearest_greater(number): temp = [] for key in possibilities: if number <= key: temp.append(key) return min(temp) count = 0 def contains_digits(n): while n >= 1: if (n % 10 == 6) ^ (n % 10 == 8): return True n = n // 10 return False luckies = [n for n in range(l, r) if contains_digits(n)] count = len(luckies) print(str(count)) |
Tout ce que j'ai réussi à trouver, c'est le total de nombres chanceux entre 0 et $1 + n 0$.
Toute aide de votre part sera fortement appréciée. D'ailleurs, n'hésitez pas à critiquer le code sur la forme aussi, je suis un débutant Python donc tout est bon à prendre.
Merci d'avance,
informaticienzero