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)
}
Implémentez la fonction Pic pour obtenir le résultat suivant:

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"
import "github.com/supcik/xtour/pic"
Solution
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
}
func Pic(dx, dy int) [][]uint8 {
...
image[y][x] = uint8(x * y)
...
}
func Pic(dx, dy int) [][]uint8 {
...
image[y][x] = uint8(math.Pow(float64(x)/32, float64(y)/32))
...
}