Parcours
/
Elixir
Elixir
/
Exercices
/
Nombres de Lucas
Nombres de Lucas

Nombres de Lucas

Exercice d'apprentissage

Introduction

Flux

Toutes les fonctions du module Enum sont strictes. Lorsqu'on effectue plusieurs opérations sur des énumérables avec le module Enum, chaque opération va générer un résultat intermédiaire.

Le module Stream est une alternative paresseuse au module Enum strict. Il propose bon nombre des mêmes fonctions que Enum, mais au lieu de générer des résultats intermédiaires, il construit une série de calculs qui ne sont exécutés qu'une fois que le flux est transmis à une fonction du module Enum.

Les flux implémentent le protocole Enumerable et sont composables : on peut les enchaîner pour créer des fonctionnalités plus complexes.

Instructions

Tu es un immense fan de la chaîne YouTube Numberphile et tu viens de voir une chouette vidéo sur la suite de Lucas. Tu veux créer cette suite avec Elixir.

Pendant que tu conçois ta fonction, tu veux tirer parti de l'évaluation paresseuse pour pouvoir générer autant de nombres que tu le souhaites, mais seulement si tu en as besoin. Tu décides donc d'utiliser un stream.

1. Intercepte les arguments invalides

Ajoute une clause de garde pour lever une erreur si un non-entier ou un entier inférieur à 1 est utilisé pour générer la suite. Faire cela dès la première étape évitera des bugs de récursion infinie dans les étapes suivantes.

LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1

2. Génère les cas de base

Tu sais que la suite possède deux nombres de départ qui ne suivent pas la même règle. Écris deux clauses de cas de base pour renvoyer ces nombres :

LucasNumbers.generate(1)
# => [2]

LucasNumbers.generate(2)
# => [2, 1]

3. Crée le cas généralisé

Pour toute suite de plus de 2 éléments, tu sais qu'il faut additionner les deux nombres précédents pour obtenir le nombre suivant, et ainsi de suite. Écris le cas généralisé.

LucasNumbers.generate(3)
# => [2, 1, 3]

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Elixir Exercism

Prêt à commencer Nombres de Lucas ?

Inscris-toi sur Exercism pour apprendre et maîtriser Elixir avec 58 concepts168 exercices, et un vrai mentorat humain, le tout gratuitement.