Soyez le premier à donner votre avis sur cette source.
Vue 590 fois - Téléchargée 67 fois
from typing import List def fibonacci_numbers_up_to(num: int) -> List[int]: """Returns a sorted list of fibonacci numbers up to a given number""" fibonacci_nums = [0, 1] next_fibonacci = fibonacci_nums[-2] + fibonacci_nums[-1] while next_fibonacci < num: fibonacci_nums.append(next_fibonacci) next_fibonacci = fibonacci_nums[-2] + fibonacci_nums[-1] return fibonacci_nums assert fibonacci_numbers_up_to(6) == [0, 1, 1, 2, 3, 5] assert fibonacci_numbers_up_to(13) == [0, 1, 1, 2, 3, 5, 8] def largest_element_lte(list_: List[float], num: int) -> int: """Returns the largest element in a list less than or equal to given number Raises ValueError if no elements in the list are less than or equal """ for element in sorted(list_, reverse=True): if element <= num: return element else: raise ValueError(f"No element found less than or equal to {num}") fibonaccis_up_to_twenty = fibonacci_numbers_up_to(20) assert largest_element_lte(fibonaccis_up_to_twenty, 6) == 5 assert largest_element_lte(fibonaccis_up_to_twenty, 13) == 13 def zeckendorf_representation(num: int) -> List[int]: """Returns a sorted list of fibonacci numbers that sum to a given number""" if num < 0: raise ValueError("Negative integers don't have a Zeckendorf representation") fibonaccis = fibonacci_numbers_up_to(num+1) zeckendorf_numbers = [] if num == 0: return zeckendorf_numbers while num > 0: next_zeckendorf = largest_element_lte(fibonaccis, num) zeckendorf_numbers.append(next_zeckendorf) num -= next_zeckendorf # return list(reversed(zeckendorf_numbers)) return zeckendorf_numbers def main(): n = int(input("Entrez n : ")) x = zeckendorf_representation(n) print(n,":", x) if n > 0: y = fibonacci_numbers_up_to(x[0]+1) y = list(reversed(y)) m = 1 while len(y) > 3: y = y[1:] if y[0] in x: m = m*10+1 else: m = m*10 else: m = 0 print("mot :", m) if __name__ == '__main__': main()
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.