Imagine que tu veuilles tous les entiers positifs ou nuls jusqu'à 1000. Il serait ridicule de devoir les saisir un par un dans un tableau.
Pour cela, on dispose du type range :
julia> 0:1000
0:1000
julia> typeof(0:1000)
UnitRange{Int64}
Les ranges sont très courants : non seulement pour t'éviter de tout saisir, mais aussi comme types de retour des fonctions.
Note que les ranges ne sont pas des vecteurs. Ce ne sont qu'un ensemble d'instructions permettant de générer une séquence (évaluation « paresseuse », ou un « itérateur »).
Si tu as besoin d'un range sous forme de vecteur, utilise la fonction collect() pour le convertir :
julia> collect(0:5)
6-element Vector{Int64}:
0
1
2
3
4
5
On peut préciser le pas, ici 0,3 :
julia> collect(1.0:0.3:2.0)
4-element Vector{Float64}:
1.0
1.3
1.6
1.9
La syntaxe est donc start:stepsize:stop.
Les deux bornes sont incluses, comme on le voit dans l'exemple avec des entiers.
Si le pas ne divise pas exactement stop - start, le dernier élément ne dépassera pas stop.
On peut aussi utiliser des séquences non numériques dans les ranges. L'exemple le plus simple est celui des lettres ASCII :
julia> 'a':'d'
'a':1:'d'
julia> typeof('a':'d')
StepRange{Char, Int64}
julia> collect('a':'d')
4-element Vector{Char}:
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)
Le type Char sera abordé plus en détail dans un autre concept.
Pour l'instant, considère simplement ces valeurs comme des caractères isolés entre apostrophes.
Vérifie les bornes d'un range avec first() et last().
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
On peut indexer un vecteur avec des ranges d'entiers ou avec un autre vecteur :
nums = collect(10.0:50.0)
nums[3:2:7] # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]
En passionné d'échecs, tu aimerais écrire ta propre version du jeu. Oui, il existe sans doute déjà plein d'implémentations d'échecs en ligne, mais la tienne sera unique !
Mais avant de laisser libre cours à ton imagination, il faut d'abord s'occuper des bases. Commençons par générer le plateau.
Chaque case de l'échiquier est identifiée par un couple lettre-nombre. Les lignes verticales de cases, appelées colonnes, sont étiquetées de A à H. Les lignes horizontales de cases, appelées rangées, sont numérotées de 1 à 8.
Implémente la fonction rank_range(). Elle doit renvoyer un intervalle d'entiers, de 1 à 8.
julia> rank_range()
# output omitted
Implémente la fonction file_range().
Elle doit renvoyer un intervalle de caractères, de la lettre majuscule A à la lettre majuscule H.
julia> file_range()
# output omitted
Implémente la fonction ranks(). Elle doit renvoyer un vecteur d'entiers, de 1 à 8.
N'écris pas le vecteur à la main, génère-le à partir de l'intervalle renvoyé par la fonction rank_range().
julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]
Implémente la fonction files. Elle doit renvoyer un vecteur de caractères, de 'A' à 'H'.
N'écris pas le vecteur à la main, génère-le à partir de l'intervalle renvoyé par la fonction file_range().
julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Inscris-toi sur Exercism pour apprendre et maîtriser Julia avec 35 concepts128 exercices, et un vrai mentorat humain, le tout gratuitement.