Aller au contenu

Slices – avec solutions

Implémentez la fonction Pic suivante :

func Pic(dx, dy int) [][]uint8 {
    // TODO: Implement
}

La fonction doit retourner un slice de longueur \(dy\), et où chaque élément est lui même un slice de \(dx\) entiers non signés de 8 bits.

Pour visualiser le résultat, implémentez votre fonction dans le Playground ou le Better Playground et importez le package golang.org/x/tour/pic :

package main

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
    // TODO: Implement
}

func main() {
    pic.Show(Pic)
}
Lorsque vous exécutez le programme, il affiche votre image, en interprétant les entiers comme des valeurs en niveaux de gris (ou plutôt, en niveaux de bleu pour faire plus joli).

Implémentez la fonction Pic pour obtenir le résultat suivant:

blue square

Implémentez encore une deuxième image. Des fonctions intéressantes à utiliser dans la méthode Pic sont :

  • \(\frac{x+y}{2}\)
  • \(x \cdot y\)
  • \(x^y\)

Notes

  • Vous devez utiliser une boucle pour allouer chaque []uint8 à l’intérieur des [][]uint8
  • Utilisez uint8(intValue) pour convertir entre les types en entiers non signés de 8 bits

Environnement local

Si vous ne souhaitez pas utiliser le Playground, vous pouvez aussi utiliser votre environnement local. Vous devrez alors reconstruire l’image à partir de la chaîne de caractères produite par le programme. On pourrait très facilement écrire un programme Go pour cette tâche et c’est même un tès bon exercice que vous pourrez faire dès que vous vous en sentirez capable. En attendant, voici comment obtenir un fichier out.png avec une machine de type Unix:

go run main.go | grep "^IMAGE:" | cut -b 7- | base64 -d > out.png

Utilisation avec un VSCode récent (version ≥ 1.80)

La version 1.80 de VSCode (Juin 2023) a introduit une nouvelle fonctionnalité qui permet d’afficher les images directement dans le terminal. Pour l’utiliser, il faut l’activer dans la configuration de VSCode (Terminal › Integrated: Enable Images).

Pour utiliser cette option, remplacez simplement la ligne

import "golang.org/x/tour/pic"
par
import "github.com/supcik/xtour/pic"
et exécutez votre programme dans le terminal intégré de VSCode.

Solution
Solution 1
func Pic(dx, dy int) [][]uint8 {
    image := make([][]uint8, dy)
    for y := range image {
        image[y] = make([]uint8, dx)
        for x := range image[y] {
            image[y][x] = uint8((x + y) / 2)
        }
    }
    return image
}
Solution 2
    func Pic(dx, dy int) [][]uint8 {
        ...
            image[y][x] = uint8(x * y)
        ...
}
Solution 3
func Pic(dx, dy int) [][]uint8 {
        ...
            image[y][x] = uint8(math.Pow(float64(x)/32, float64(y)/32))
        ...
}