Défi

Effectué

Pour ce défi, vous devez améliorer un programme existant en le rendant plus rapide. Essayez d’écrire vos programmes par vous-même, même si vous devez revenir en arrière et vérifier les exemples que vous avez utilisés. Comparez ensuite votre solution à celle que nous obtenons dans l’unité suivante.

L’accès simultané dans Go est un problème complexe que vous comprendrez mieux en pratiquant. Ce défi n’est qu’une idée de ce que vous pouvez faire pour vous exercer.

Bonne chance !

Calculer les nombres de la suite Fibonacci plus rapidement avec l’accès simultané

Utilisez le programme suivant pour calculer les nombres de Fibonacci de façon séquentielle :

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func fib(number float64) float64 {
    x, y := 1.0, 1.0
    for i := 0; i < int(number); i++ {
        x, y = y, x+y
    }

    r := rand.Intn(3)
    time.Sleep(time.Duration(r) * time.Second)

    return x
}

func main() {
    start := time.Now()

    for i := 1; i < 15; i++ {
        n := fib(float64(i))
    fmt.Printf("Fib(%v): %v\n", i, n)
    }

    elapsed := time.Since(start)
    fmt.Printf("Done! It took %v seconds!\n", elapsed.Seconds())
}

Vous devez créer deux programmes à partir de ce code existant :

  • Une version améliorée où vous implémentez l’accès simultané. La fin de l’opération peut prendre quelques secondes (pas plus de 15 secondes), comme c’est le cas maintenant. Vous devez utiliser des canaux mis en mémoire tampon.

  • Écrivez une nouvelle version qui calcule les nombres de Fibonacci jusqu’à ce que l’utilisateur entre dans quit dans le terminal à l’aide de la fmt.Scanf()fonction. Si l’utilisateur appuie sur Entrée, vous devez calculer un nouveau nombre de Fibonacci. En d’autres termes, vous n’avez plus de boucle de 1 à 10.

    Utilisez deux canaux non mis en mémoire tampon : un pour calculer la suite de Fibonacci et un autre qui attend le message « Quitter » de l’utilisateur. Vous devez utiliser l’instruction select.

Voici un exemple d’interaction avec le programme :

1

1

2

3

5

8

13
quit
Done calculating Fibonacci!
Done! It took 12.043196415 seconds!