Le deuxième chapitre aborde les notions de variable et d'expression. Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Le deuxième chapitre aborde les notions de variable et d'expression. Une erreur dans cette actualité ? Signalez-nous-la !
Ma motivation principale était de vous donner la bonne écriture en Julia 1.7.0 pour Base.:+, le reste du code à suivit.
using Base, Printf
"""
Julia. Exercice, ma version de 17-2 à 17-6 dans https://julia.developpez.com/tutoriels/think-julia-fr/?page=dispatch-multiple
"""
struct MyTime
heures::Int64
minutes::Int64
secondes::Int64
function MyTime(h::Int64=0, m::Int64=0, s::Int64=0)
# correction des secondes
m += div(s, 60) # le résultat de la division entière
s = rem(s, 60) # le reste de la divion entière
# correction des minutes
h += div(m, 60)
m = rem(m, 60)
# U+02264 ≤ \le, \leq Less-Than Or Equal To / Less Than Or Equal To
@assert(0 ≤ h, "heures n'est pas supérieur ou égal à 0")
@assert(0 ≤ m < 60, "minutes n'est pas entre 0 et 59.")
@assert(0 ≤ s < 60, "secondes n'est pas entre 0 et 59.")
# construction de l'objet
# le return final existe par défaut
new(h, m, s)
end
end
Base.show(io::IO, mt::MyTime) = @printf(io, "%02d:%02d:%02d", mt.heures, mt.minutes, mt.secondes)
Base.:+(mt1::MyTime, mt2::MyTime) = MyTime(mt1.heures + mt2.heures, mt1.minutes + mt2.minutes, mt1.secondes + mt2.secondes)
function my_time_to_int(mt::MyTime)::Int64
mt.heures * 60 * 60 + mt.minutes * 60 + mt.secondes
end
function int_to_my_time(x::Int64)::MyTime
MyTime(0, 0, x)
end
function increment_my_time(mt::MyTime, x::Int64)::MyTime
MyTime(mt.heures, mt.minutes, mt.secondes + x)
end
function main()
println()
mt1 = MyTime(18, 97, 8002)
mt2 = MyTime(1, 5, 20)
mt1 + mt2 |> println
x = my_time_to_int(mt1 + mt2)
int_to_my_time(x) |> println
#=
22:55:42
22:55:42
=#
for k in 1:5:50
increment_my_time(mt2, k) |> println
end
#=
01:05:21
01:05:26
01:05:31
01:05:36
01:05:41
01:05:46
01:05:51
01:05:56
01:06:01
01:06:06
=#
# remplace le return par défaut
return
end
@time main()
@time main() # 0.001301 seconds (136 allocations: 6.547 KiB)
1 |
0 |
0 |
0 |
0 |
0 |
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | using Base, Test, Random
#=
♠ "\spadessuit" "pique"
♢ "\diamondsuit" "carreau"
♡ "\heartsuit" "coeur"
♣ "\clubsuit" "trèfle"
=#
const noms_couleurs = ["♣", "♦", "♥", "♠"]
const noms_rangs = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "V", "D", "R"]
abstract type Ensemble_de_cartes end
"""
Une carte à jouer.
couleur : la couleur de la carte (pique, carreau, coeur, trèfle)
rang, de 1 à 13 : ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "V", "D", "R"]
"""
struct Carte
couleur::Int64
rang::Int64
function Carte(couleur::Int64, rang::Int64)
@assert(1 ≤ couleur ≤ 4, "la couleur n'est pas entre 1 et 4")
@assert(1 ≤ rang ≤ 13, "le rang n'est pas entre 1 et 13")
new(couleur, rang)
end
end
"""
Un paquet de cartes à jouer contenant 52 Carte.
"""
struct Paquet <: Ensemble_de_cartes
cartes::Vector{Carte}
function Paquet()
paquet = new(Carte[])
for couleur in 1:4
for rang in 1:13
push!(paquet.cartes, Carte(couleur, rang))
end
end
paquet
end
end
"""
Une main vide de Carte.
"""
struct Une_main <: Ensemble_de_cartes
cartes::Vector{Carte}
label::String
function Une_main(label::String="")
new(Carte[], label)
end
end
Base.show(io::IO, carte::Carte) = print(io, noms_rangs[carte.rang], noms_couleurs[carte.couleur])
Base.isless(c1::Carte, c2::Carte) = (c1.couleur, c1.rang) < (c2.couleur, c2.rang)
Base.show(io::IO, jeu::Ensemble_de_cartes) = begin
for carte in jeu.cartes
print(io, " $carte")
end
println(io)
end
Base.pop!(jeu::Ensemble_de_cartes) = pop!(jeu.cartes)
Base.push!(jeu::Ensemble_de_cartes, carte::Carte) = push!(jeu.cartes, carte)
Random.shuffle!(jeu::Ensemble_de_cartes) = shuffle!(jeu.cartes)
Base.sort!(jeu::Ensemble_de_cartes) = sort!(jeu.cartes)
"""
n le nb de carte dans une main.
"""
donne!(jeu::Ensemble_de_cartes, main::Une_main, n::Int64) = begin
@assert 1 ≤ n ≤ length(jeu.cartes)
shuffle!(jeu)
for k in 1:1:n
carte = pop!(jeu)
push!(main, carte)
end
sort!(main)
end
"""
m le nb de main.
n le nb de carte dans une main.
retourne un array de mains, chacune contenant n cartes.
"""
deal!(jeu::Ensemble_de_cartes; m::Int64=4, n::Int64=5) = begin
nb_cartes = length(jeu.cartes)
@assert div(nb_cartes, m * n) ≥ 1
@assert 1 ≤ n ≤ nb_cartes
mains = Vector{Une_main}()
for k in 1:1:m # nb de main
push!(mains, Une_main("main_$(k)"))
end
for main in mains
donne!(jeu, main, n)
end
mains
end
function main()
valet_coeur = Carte(3, 11)
valet_coeur |> println
dame_pique = Carte(4, 12)
dame_pique |> println
isless(valet_coeur, dame_pique) |> println
@test Carte(1, 3) < Carte(2, 2)
if valet_coeur < dame_pique
println("OK")
end
jeu = Paquet()
roi_pique = pop!(jeu)
jeu |> println
push!(jeu, roi_pique)
jeu |> println
shuffle!(jeu)
jeu |> println
sort!(jeu)
jeu |> println
ma_main = Une_main("main_dvjh")
donne!(jeu, ma_main, 5)
ma_main |> println
jeu |> println
nouveau_jeu = Paquet()
mains = deal!(nouveau_jeu, m=6, n=5)
for main in mains
println("$(main.label) : $main")
end
nouveau_jeu |> println
return
end
#=
V♥
D♠
true
OK
A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ V♣ D♣ R♣ A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ V♦ D♦ R♦ A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ V♥ D♥ R♥ A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ V♠ D♠
A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ V♣ D♣ R♣ A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ V♦ D♦ R♦ A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ V♥ D♥ R♥ A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ V♠ D♠ R♠
A♣ R♥ 7♠ A♥ V♠ 5♦ 10♣ 6♦ 8♣ D♠ R♠ A♠ V♦ 6♠ 4♣ 3♣ 4♦ D♦ 10♠ 3♥ 9♦ 8♦ 7♦ D♥ 10♦ 10♥ D♣
5♥ 8♥ A♦ 5♣ 8♠ 9♠ 4♠ V♥ 7♥ 3♦ 2♠ 2♣ 9♣ 2♥ 3♠ 5♠ 7♣ V♣ 9♥ 6♥ 6♣ 2♦ R♣ R♦ 4♥
A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ V♣ D♣ R♣ A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ V♦ D♦ R♦ A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ V♥ D♥ R♥ A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ V♠ D♠ R♠
A♣ 2♣ 5♣ 4♦ 3♥
4♠ 6♣ 10♣ D♥ 7♥ 10♥ 8♣ 7♠ 4♥ 5♦ V♠ 8♥ A♦ V♦ D♣ 7♦ 10♠ 7♣ A♥ V♣ 4♣ R♥ 6♠ R♦ 8♠ D♠ R♠ 8♦ 5♥ 9♠ 2♥ 9♦ 2♦ 3♠ D♦ 9♣ R♣ 6♦ 3♦ 2♠ 9♥ 5♠ 3♣ 10♦ A♠ 6♥ V♥
main_1 : 10♣ 6♦ D♦ 2♥ A♠
main_2 : 3♣ A♦ 5♦ 9♥ 9♠
main_3 : A♣ 9♦ 8♥ 5♠ D♠
main_4 : 4♣ 9♣ 7♦ 8♦ 5♥
main_5 : 2♣ 5♣ R♣ 6♥ R♥
main_6 : 10♦ V♦ 7♥ 10♥ 2♠
8♣ A♥ V♥ D♣ 7♣ V♣ D♥ 6♣ 2♦ 3♠ 7♠ 3♦ 4♦ 4♥ 4♠ 10♠ V♠ R♦ 8♠ 3♥ R♠ 6♠
0.007767 seconds (2.05 k allocations: 91.844 KiB)
=#
@time main()
@time main() |
0 |
0 |