Liens utiles
-
la liste des "Advent of Code"
Antisèches Go
Les bases
- opérations et comparaisons
- types
- tableaux et dictionnaires
- variables
- fonctions
- boucles et conditionnelles
Niveau 2
- compléments sur les dictionnaires / tableaux
- point virgules
- structures et définitions de types
- switch
Séance 1 (06-01-2025)
Séance 2 (14-01-2025)
Écrivez des fonctions pour résoudre les problèmes suivants (parties 1 et 2).
année | jours | lien |
---|---|---|
2020 | 1 | Report Repair |
2016 | 1 | No Time for a Taxicab |
2015 | 4 | The Ideal Stocking Stuffer |
Pour chaque problème, définissez une fonction de type func (filename
string) int
qui renverra la solution trouvée. Vous n'aurez qu'à
l'appeler dans votre fonction main
avec le bon nom de fichier en
argument.
Pour gagner du temps
- lecture entière d'un fichier dans un tableau de
bytes
-
T, _ = os.ReadFile(filename)
Attention, en cas d'erreur (fichier inexistant, etc.),
T
sera vide. Pour gérer ça, il faut regarder la deuxième valeur de retour. Par exemple, le code suivant provoque une "panique" en cas d'erreur.T, err = os.ReadFile(filename) if err != nil { panic(err) }
- les modules
strings
etbytes
-
contiennent de nombreuses fonctions sur les chaines / tableaux d'octets :
Trim
,Split
,Join
,HasPrefix
, ...Utilisez les commandes go doc strings et go doc bytes pour avoir la liste de ces fonctions.
- l'empreinte MD5 d'un tableau
T
d'octets (type[]byte
) -
peut se calculer de la manière suivante
import "crypto/md5" ... E := md5.Sum(T)
E
contiendra alors un tableau statique avec exactement 16 octets (type[16]byte
).Attention, lors de la résolution du problème 2015-04, les "0" que vous devez chercher dans l'empreinte MD5 sont des "0" dans la représentation hexadécimale de l'empreinte. Chaque octet de l'empreinte donne deux chiffres hexadécimaux. Pour trouver cinq "0", il faut donc regarder deux octets et demi (20 bits) !
Travail à la maison
-
Finissez le tutoriel officiel, si ce n'est pas déjà fait.
-
Décrivez une manière de coder un type de tableaux dynamiques d'entiers en C pur. Il s'agit d'un type avec les opérations suivantes :
-
len(T)
: renvoie le nombre d'éléments du tableau, -
get(T, i)
: renvoie la case numéroi
(indéterminé sii
ne correspond pas à une case valide), -
set(T, i, v)
: mets la valeurv
(un entier) dans la case numéroi
(indéterminé sii
ne correspond pas à une case valide), -
append(T, v)
: ajoute une valeurv
à la fin du tableau. (La taille du tableau doit donc augmenter de 1.)
Réfléchissez également à la complexité de ces opérations.
-
-
Écrivez une méthode
show
pour le typetype grid map[[2]int] byte
: le dictionnaire contient des caractères ASCII (typebyte
) à des coordonnées entières (type[2]int
).La méthode
show
devra afficher les caractères à leur coordonnées, mais uniquement pour la boite englobante des coordonnées présentes dans le dictionnaire. Par exemple, pourG := grid(map[[2]int]byte{ {10, -7}: 'h', {11, -7}: 'e', {12, -7}: 'l', {13, -7}: 'l', {14, -7}: 'o', {14, -6}: 'w', {15, -6}: 'o', {16, -6}: 'r', {17, -6}: 'l', {18, -6}: 'd', }) G.show()
on obtiendra
$ go run . hello world
Vérifiez que votre code fonctionne en mettant le fichier mystere.go dans votre répertoire et en appelant
G := mystere() G.show()
-
Finissez les problèmes Advent of Code commencés :
année jours lien 2020 1 Report Repair 2016 1 No Time for a Taxicab 2015 4 The Ideal Stocking Stuffer