From 5a6d602a918f7160697127eccf04f86f1b01dd8e Mon Sep 17 00:00:00 2001 From: Florian Mathieu Date: Tue, 7 Jul 2026 10:57:59 +0200 Subject: [PATCH] =?UTF-8?q?Mini-projets=20algorithmique,=20corrig=C3=A9=20?= =?UTF-8?q?TP=20KNN,=20news,=20notebooks=20IA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + algorithmes/mini-projets/01_devine_nombre.zip | Bin 0 -> 1980 bytes .../mini-projets/01_devine_nombre/starter.py | 41 +++ .../mini-projets/01_devine_nombre/sujet.md | 44 ++++ algorithmes/mini-projets/02_cartes.zip | Bin 0 -> 2338 bytes algorithmes/mini-projets/02_cartes/starter.py | 81 ++++++ algorithmes/mini-projets/02_cartes/sujet.md | 39 +++ algorithmes/mini-projets/03_podium.zip | Bin 0 -> 2528 bytes algorithmes/mini-projets/03_podium/starter.py | 93 +++++++ algorithmes/mini-projets/03_podium/sujet.md | 49 ++++ algorithmes/mini-projets/04_annuaire.zip | Bin 0 -> 2559 bytes .../mini-projets/04_annuaire/starter.py | 88 +++++++ algorithmes/mini-projets/04_annuaire/sujet.md | 46 ++++ algorithmes/mini-projets/05_correcteur.zip | Bin 0 -> 3252 bytes .../mini-projets/05_correcteur/starter.py | 111 ++++++++ .../mini-projets/05_correcteur/sujet.md | 50 ++++ algorithmes/mini-projets/06_bibliotheque.zip | Bin 0 -> 2894 bytes .../mini-projets/06_bibliotheque/starter.py | 93 +++++++ .../mini-projets/06_bibliotheque/sujet.md | 45 ++++ .../mini-projets/07_meteo 2/starter.py | 109 ++++++++ algorithmes/mini-projets/07_meteo 2/sujet.md | 54 ++++ algorithmes/mini-projets/07_meteo.zip | Bin 0 -> 2899 bytes algorithmes/mini-projets/07_meteo/starter.py | 109 ++++++++ algorithmes/mini-projets/07_meteo/sujet.md | 54 ++++ algorithmes/mini-projets/08_course_algos.zip | Bin 0 -> 2471 bytes .../mini-projets/08_course_algos/starter.py | 92 +++++++ .../mini-projets/08_course_algos/sujet.md | 49 ++++ .../mini-projets/09_generateur_web.zip | Bin 0 -> 3670 bytes .../mini-projets/09_generateur_web/starter.py | 163 ++++++++++++ .../mini-projets/09_generateur_web/sujet.md | 51 ++++ algorithmes/mini-projets/AIDE.md | 238 ++++++++++++++++++ algorithmes/mini-projets/README.md | 65 +++++ knn/CORRIGE_TP_KNN.md | 156 ++++++++++++ knn/TP_KNN.md | 8 +- knn/choixpeauMagique.csv | 58 ++--- knn/test_choixpeau.py | 159 ++++++++++++ markdown/HJ6_KAYaYAAm3y4.jpg | Bin 0 -> 348659 bytes news/2026-02-03.md | 115 +++++++++ news/2026-02-05.md | 13 + news/2026-02-06.md | 145 +++++++++++ news/2026-02-10.md | 106 ++++++++ news/2026-02-13.md | 108 ++++++++ news/2026-03-03.md | 89 +++++++ news/2026-03-10.md | 123 +++++++++ news/2026-03-13.md | 119 +++++++++ news/2026-03-17.md | 94 +++++++ news/2026-03-24.md | 118 +++++++++ news/2026-03-27.md | 153 +++++++++++ news/2026-04-07.md | 122 +++++++++ news/2026-06-02.md | 143 +++++++++++ news/generer-news.sh | 50 ++++ 51 files changed, 3614 insertions(+), 33 deletions(-) create mode 100644 algorithmes/mini-projets/01_devine_nombre.zip create mode 100644 algorithmes/mini-projets/01_devine_nombre/starter.py create mode 100644 algorithmes/mini-projets/01_devine_nombre/sujet.md create mode 100644 algorithmes/mini-projets/02_cartes.zip create mode 100644 algorithmes/mini-projets/02_cartes/starter.py create mode 100644 algorithmes/mini-projets/02_cartes/sujet.md create mode 100644 algorithmes/mini-projets/03_podium.zip create mode 100644 algorithmes/mini-projets/03_podium/starter.py create mode 100644 algorithmes/mini-projets/03_podium/sujet.md create mode 100644 algorithmes/mini-projets/04_annuaire.zip create mode 100644 algorithmes/mini-projets/04_annuaire/starter.py create mode 100644 algorithmes/mini-projets/04_annuaire/sujet.md create mode 100644 algorithmes/mini-projets/05_correcteur.zip create mode 100644 algorithmes/mini-projets/05_correcteur/starter.py create mode 100644 algorithmes/mini-projets/05_correcteur/sujet.md create mode 100644 algorithmes/mini-projets/06_bibliotheque.zip create mode 100644 algorithmes/mini-projets/06_bibliotheque/starter.py create mode 100644 algorithmes/mini-projets/06_bibliotheque/sujet.md create mode 100644 algorithmes/mini-projets/07_meteo 2/starter.py create mode 100644 algorithmes/mini-projets/07_meteo 2/sujet.md create mode 100644 algorithmes/mini-projets/07_meteo.zip create mode 100644 algorithmes/mini-projets/07_meteo/starter.py create mode 100644 algorithmes/mini-projets/07_meteo/sujet.md create mode 100644 algorithmes/mini-projets/08_course_algos.zip create mode 100644 algorithmes/mini-projets/08_course_algos/starter.py create mode 100644 algorithmes/mini-projets/08_course_algos/sujet.md create mode 100644 algorithmes/mini-projets/09_generateur_web.zip create mode 100644 algorithmes/mini-projets/09_generateur_web/starter.py create mode 100644 algorithmes/mini-projets/09_generateur_web/sujet.md create mode 100644 algorithmes/mini-projets/AIDE.md create mode 100644 algorithmes/mini-projets/README.md create mode 100644 knn/CORRIGE_TP_KNN.md create mode 100644 knn/test_choixpeau.py create mode 100644 markdown/HJ6_KAYaYAAm3y4.jpg create mode 100644 news/2026-02-03.md create mode 100644 news/2026-02-05.md create mode 100644 news/2026-02-06.md create mode 100644 news/2026-02-10.md create mode 100644 news/2026-02-13.md create mode 100644 news/2026-03-03.md create mode 100644 news/2026-03-10.md create mode 100644 news/2026-03-13.md create mode 100644 news/2026-03-17.md create mode 100644 news/2026-03-24.md create mode 100644 news/2026-03-27.md create mode 100644 news/2026-04-07.md create mode 100644 news/2026-06-02.md create mode 100755 news/generer-news.sh diff --git a/.gitignore b/.gitignore index f82d630..7bb6a73 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,7 @@ news/logs/ *.slides.html .ipynb_checkpoints/ *.bak + +# Copies d'élèves (nominatives) — jamais versionnées +**/copies_non_corrigees/ +**/copies*/ diff --git a/algorithmes/mini-projets/01_devine_nombre.zip b/algorithmes/mini-projets/01_devine_nombre.zip new file mode 100644 index 0000000000000000000000000000000000000000..0e0f7737451d7f252f24b030f43a33410245bbf0 GIT binary patch literal 1980 zcmWIWW@Zs#009Zl>KHHsN(eG2Fc=udr=*r;=B38x<>w|9rRtYfa5FHnd}U-{0P6}3 z;bmYKv_6(848$Nh0Bjrw0|$ea2dZ(>*o-SKNh~T!Ez&Ef#Aa}y<+02VAdUj!xglrs zW;+P%`z#_{W1z9Ixw^+^(Wfp{xw9s_ zg?q>Gr&6MK13o;Bl8XGCFSdBa0U@qC1&y9nf{d|+GQYo{jab#hopxcB0F!9bi(dxb zFGWo>Om-f>_Mt0V{`KTQhXPJ!QRdPue@oUUF5Y3_Ip_J$iIoj^3V#{BJGVWrzFE{( zL!@nBpYYxb-v<*Cu=9YdwzfWZMQBb=GzY@Nz8Iinv#>SbcV(y;~hL@&27?~ zit}&#?zYvL>UJ-}@HN|+#Aj!nJoEO`hqIYeQlo?%s-aAnj=eHASNf`D7Ou_y~fLP znRAz&{LR`vg})`kCut#@z!dwreg`8G`m7!;{hMqPrxwPt{f6&@Y2p_-O=kMsadiEV zZPgNUQ#C*0>7T&*7cT!90=(Hd1oGUIjF}i1&af~5`Jki@N}K3OT@q{BEX_(S(aTN2 zmNH>UUILipYk?{Aiig0y-h6pinloWL2W=sMd~qoHMrYsThBZ~9_SemV6n?^pVi zf=9c`=}%tq|Im)j!kFsanGScIefwSHt74GRm%hal5_0o3( z_xX9c|^+b)*)l z(tIPtT>m$|+ImQQ0k4;ShOz;}{m9DnW2|&A#V1H`>XpVW`b@=Xwy}v&t`UyVaAD)R*-)?3*5xZJn5M>shOUSVGdNHATx^7ySM+sWf0l)Aiu0knslGg9xmIiCqO3ilqVv3MMHj_wjsEcA?F9$F4QICn?!WlJZn=B^3zs|V zcd&{*kdok;Q{6sYt@GLUUFLUU7fUR;z44Yzny3+Im)oe4Li)t>)Y*t#Q)encTzPd8^T~PS6 z)0{Id^E_jHcArJDZkju5@j^4^H7DkBe|{wSZi<@f;mElGOcU~MJlD8g@47CrNX6>> zqG?kbChR?GaLLH^-({zRESW2^^Z#pTxVWw^oD*uaep~b@`5*Jwie0)>X&TRwFDzFq z%bO>a{c699j{JuwZ5!2Rw{73!Fs*Xdk`ukW%DFp&cdfFqYn~Kkl(SN1>wfbU;+1E% zcNTv (trop petit), = (trouvé !)") + print() + + gauche = 1 + droite = 100 + nb_essais = 0 + + while gauche <= droite: + milieu = (gauche + droite) // 2 + nb_essais += 1 + + reponse = input(f"Essai {nb_essais} — Est-ce que ton nombre est {milieu} ? ") + + if reponse == "=": + print(f"Trouvé ! C'était bien {milieu}, en {nb_essais} essai(s) !") + return + elif reponse == "<": + # TODO : le nombre cherché est plus petit que milieu + # Que faut-il modifier ? gauche ou droite ? + pass + elif reponse == ">": + # TODO : le nombre cherché est plus grand que milieu + pass + else: + print("Réponse invalide, utilise <, > ou =") + + print("Je n'ai pas trouvé... tu as peut-être changé de nombre !") + + +# --- Programme principal --- +devine() diff --git a/algorithmes/mini-projets/01_devine_nombre/sujet.md b/algorithmes/mini-projets/01_devine_nombre/sujet.md new file mode 100644 index 0000000..ef313ee --- /dev/null +++ b/algorithmes/mini-projets/01_devine_nombre/sujet.md @@ -0,0 +1,44 @@ +# 01 — Le Nombre Mystère + +**Algorithme :** Recherche dichotomique +**Difficulté :** Facile +**Durée estimée :** 45 min — 1h + +--- + +## Contexte + +Vous pensez à un nombre entre 1 et 100. L'ordinateur doit le deviner le plus vite possible en posant des questions. + +À chaque essai, vous répondez : +- `<` si votre nombre est **plus petit** que la proposition +- `>` si votre nombre est **plus grand** +- `=` si c'est **le bon nombre** + +L'ordinateur utilise la **recherche dichotomique** : à chaque question, il coupe l'intervalle possible en deux. + +--- + +## Étapes + +### Étape 1 — Comprendre la stratégie +Sans coder, répondez sur papier : si le nombre est entre 1 et 100, quelle est la première proposition optimale ? Pourquoi ? + +### Étape 2 — Implémenter `devine()` +Complétez la fonction `devine()` dans `starter.py` : +- L'ordinateur part de `gauche = 1` et `droite = 100` +- Il propose `milieu = (gauche + droite) // 2` +- Selon la réponse, il réduit l'intervalle +- Il compte le nombre d'essais + +### Étape 3 — Tester +Lancez le programme et jouez plusieurs parties. Vérifiez que l'ordinateur trouve toujours en **7 essais maximum**. + +### Étape 4 — Extension (si vous avez le temps) +Ajoutez une deuxième version où **c'est vous** qui devez deviner le nombre de l'ordinateur. L'ordinateur choisit un nombre aléatoire (`random.randint(1, 100)`), et le programme vous dit si vous êtes trop grand ou trop petit. Comptez vos essais et comparez avec le maximum optimal. + +--- + +## Ce que vous devez rendre +- Le programme qui fonctionne +- La réponse à la question : pourquoi 7 essais suffisent toujours pour 100 nombres ? diff --git a/algorithmes/mini-projets/02_cartes.zip b/algorithmes/mini-projets/02_cartes.zip new file mode 100644 index 0000000000000000000000000000000000000000..3e80668e959418c8741d968dd2796dd14aecbc55 GIT binary patch literal 2338 zcmaKuc{J4PAIHB8W)fy-(lsb^ak3>@8{4&SV=|UeS+izo>}0v+qGX9CM7k4Ml54&A zF+`-Av6YBQh+!BLjf`dN`qBM$Z~e}__j%6ed7eL>^E#jBIp_U8Z!8+b1qb$qgn5k9 zm&5-SUO)m+Qg-!l3kmZIJsuvpAK>6x;Q)Xy*Kv0I09ag$;w!ORdpq_E2LeC<8?)~@ z@b5UGVSBs~#h|FaBi=<(d<%A~Y`4;I&H}R zZGpt=RhkH2-L^Kb@_(#GFr0$*qrx)tidCfQ9n1wXxQnL+P)C01)gYo0pbs4it}g9g z`?Pc@@>)>Q!RLaC_ZxhkiCkYCv5;?8fZ1p?Wh3l-v5vS~23t`pJGA8i#{0ln=h!Pq zZ9X1ZqkPYF_1P!Xc-^sX&ZsRSiT#Ll%Vn8oVu!HyWL4U>`)YnMCnLF#fxzSD zgbGUXDfMFkeA)Jky#)CpZ`6~Pr**w`R=T~b>Fnz8L$zge4pzugKzc;cCw1n|vEj%W z_X+`;RPdad!z7T(h|@lTQipP|Pb_XtyBE|-&-x;9B1_{t5XqmwVX%~=Q_G=tmed#J zqQm}`7NVw~x_D&CvhlIV*=jihJXt2r_&!onkf_lgrchx&U~;JKjo8iLz*jJ2PH&FY z0mknYJEMdT79x`9RM?0IIkVNU$*H?-j>_kwV9wRxl6jbAy^!z}*TpBuM^`xf%B==l z>ek#v`ZeD3YLvKy4SmLK13bD;O@UT5)IqN$5rSZ%~lbkr~4Axr_OQbCMv-m2&^)Vyy{*;dd+ikbb}+^ zyAkI!2)fFhXxD3#s8;qcn;`CZoOm=_C2tRY9 z`8oe)4lb&+yx5S~+<)Cf3#0Sy3JA$YW-UZR>Mng;Q|}PEoOqV=WnR0n%7h3e6=r=y zU6H6=JTsuIKIYfY`9mVBz#T~y%c7)5jj&cSFY9g!So-@~?te8g1S%_=t)5nVJ~WBCRq@C%s11`>LOf)(=jOyv7m% z8`pKeh$Jw1eq>FH&xUeeYxO};4A<%32%PO#oa!jYn~))^b5E)>Rg=!o5)p`tr2`|w zI*I13 z7-IVYT$cp`08I!0{H6N;cMqZORUhu>6{d*y{5#EmbrI=Z7s1=T2pBPewJyn)u-b)? z`)<+-^?oUaO$jSeZTs0maQYoFv_GMFc?V{4>JfVk%&6=OUBGNeZF}d06qkVY(epvx zt@*k8qhpLeZ|xj?e`5Qis+y(aH0NfaOb@2H?$otQ9m}l>1DC4Bd};5v@%#n>%e0~@ z4^fI?%DVOIhh9xd0oqD6(1)1`PA;+NyXwDyOorItMr9rd$ z^GDm3ofC_As<`!v<{t4k476+*EUuYiA9Y5vHuUDC$R_YCOFX@@(YD0I5uhbVMI@Jk z?};otYr_dQz^L5CWZwmN8sWfZw%b*|?6_lub#wp8b zandba@S$BQZGAAZrvzo)GXk3qT&*g*cUV{F*xR;#(`XJ4Qhi=UmdB8Ofd#d=)GE+c zVn^-{Qm|q&@_|_6LHw}f_(Im=VkDeK?6{cR!91NVf2!2@U6Hg(dGcTkOFgUGi+-@% zFGb&D%x1lI%iW&v3ZzWA_&XwYO`qxp?}aj8S%Lj|-ls)%=$36sjdQ)(=H!x4qf)jUv|2ll zZ&Te6ou;O6w@Wz8Nx|!-2RD=W1b$TQm9TM%xz3r#s61iBWUPMR)+i z22B0E ezU?&hpIqqAj=6XL0RTX|lXExe@a{Ss0Q?so5%?4U literal 0 HcmV?d00001 diff --git a/algorithmes/mini-projets/02_cartes/starter.py b/algorithmes/mini-projets/02_cartes/starter.py new file mode 100644 index 0000000..f25f31d --- /dev/null +++ b/algorithmes/mini-projets/02_cartes/starter.py @@ -0,0 +1,81 @@ +# Projet 02 — Le Tri de Cartes +# Algorithme : Tri par insertion + +NOMS_VALEURS = {11: "Valet", 12: "Dame", 13: "Roi", 14: "As"} + +def nom_carte(carte): + """Retourne une représentation lisible d'une carte.""" + valeur, couleur = carte + nom = NOMS_VALEURS.get(valeur, str(valeur)) + return f"{nom} de {couleur}" + +def afficher_main(main): + """Affiche toutes les cartes d'une main.""" + print("Main :", " | ".join(nom_carte(c) for c in main)) + +def tri_insertion_cartes(main): + """ + Trie la main de cartes par valeur croissante (tri par insertion). + Chaque carte est un tuple (valeur, couleur). + On trie selon le premier élément du tuple : la valeur. + """ + for i in range(1, len(main)): + x = main[i] + j = i + # TODO : compléter la condition du while + # Indice : on compare les valeurs (main[j-1][0] et x[0]) + while j > 0 and ...: + main[j] = main[j - 1] + j -= 1 + main[j] = x + return main + +def chercher_carte(main_triee, valeur): + """ + Recherche dichotomique : retourne True si une carte de cette valeur + est dans la main triée, False sinon. + """ + a = 0 + b = len(main_triee) - 1 + while a <= b: + m = (a + b) // 2 + valeur_m = main_triee[m][0] # on compare les valeurs + if valeur_m == valeur: + return True + elif valeur_m < valeur: + # TODO + pass + else: + # TODO + pass + return False + + +# --- Programme principal --- +main = [ + (7, "Coeur"), + (2, "Pique"), + (11, "Trèfle"), + (5, "Carreau"), + (14, "Coeur"), + (9, "Pique"), + (3, "Carreau"), +] + +print("=== Le Tri de Cartes ===") +print() +print("Avant le tri :") +afficher_main(main) + +tri_insertion_cartes(main) + +print() +print("Après le tri par insertion :") +afficher_main(main) + +print() +# Test de recherche +for valeur_cherchee in [7, 12, 14, 6]: + resultat = chercher_carte(main, valeur_cherchee) + nom = NOMS_VALEURS.get(valeur_cherchee, str(valeur_cherchee)) + print(f"Cherche {nom} : {'trouvé !' if resultat else 'absent'}") diff --git a/algorithmes/mini-projets/02_cartes/sujet.md b/algorithmes/mini-projets/02_cartes/sujet.md new file mode 100644 index 0000000..a0fafd3 --- /dev/null +++ b/algorithmes/mini-projets/02_cartes/sujet.md @@ -0,0 +1,39 @@ +# 02 — Le Tri de Cartes + +**Algorithme :** Tri par insertion +**Difficulté :** Facile +**Durée estimée :** 45 min — 1h + +--- + +## Contexte + +Lorsqu'on reçoit des cartes à jouer, on les trie naturellement dans sa main : on prend chaque nouvelle carte et on la glisse à la bonne place parmi celles déjà en ordre. C'est exactement le **tri par insertion**. + +Dans ce projet, vous allez trier une main de cartes par valeur croissante, puis chercher une carte avec la dichotomie. + +--- + +## Étapes + +### Étape 1 — Afficher la main +Lancez le starter et observez comment les cartes sont représentées. Chaque carte est un **tuple** `(valeur, couleur)`. La valeur va de 2 à 14 (11 = Valet, 12 = Dame, 13 = Roi, 14 = As). + +### Étape 2 — Implémenter `tri_insertion_cartes(main)` +Le tri doit classer les cartes par **valeur croissante** (le premier élément du tuple). + +> **Indication** : dans le tri par insertion vu en cours, on comparait `tab[j-1] > x`. Ici, vous comparerez `main[j-1][0] > x[0]` (on ne regarde que la valeur, pas la couleur). + +### Étape 3 — Chercher une carte +Implémentez `chercher_carte(main_triee, valeur)` qui utilise la **dichotomie** pour savoir si une carte d'une certaine valeur est dans la main. + +> **Attention** : la dichotomie ne fonctionne que sur une liste **déjà triée** ! + +### Étape 4 — Extension (si vous avez le temps) +Ajoutez un mode "nouvelle donne" : générez une main aléatoire de 7 cartes avec `random`, triez-la et affichez-la. + +--- + +## Ce que vous devez rendre +- Le programme qui trie et cherche correctement +- Une explication : pourquoi le tri par insertion ressemble à ce qu'on fait naturellement avec des cartes ? diff --git a/algorithmes/mini-projets/03_podium.zip b/algorithmes/mini-projets/03_podium.zip new file mode 100644 index 0000000000000000000000000000000000000000..c7d1713020c02f905402b77bc128d48d570f6d4a GIT binary patch literal 2528 zcmaKucT`i^7Kf8iLUEKPQUo=C6d^Q05HJ*t1c4xdAk~6|7OIJK&`47V%_toSohV4C zf*L@ihy)o>s`QyWktPHXg5U$^IgW45%)M)$d+u6ieQWPO&bNLR=h)bV0K1PYBE;d_ z=6?$h;4nZ%{i3hWRd>9XGCq(O0AybU0s!BRTU-4C04wOUxhw9}?$_cQhYP?3a5es! zBlHvJ8t$?`&cz?<8}xU?7VS3owwZnH{Yz%V9t&@p&A8@XTL?_O3K8acD*C>o*CP4 zyChE_;qn|X{QfEAl?cH0F$gAo#RveCfgzMw*VlOlXnB5=ftc);H#X!rF*p{k;T9Ks zT@`o!Vkr7-*n?Nt$vpUDWvtcXk(ssG3PA{D>P1ff3D4;D}z) z?{)r7V|mP=XOq)28NYemoCwtTTtz~IsqmxwgEMXyVEeL%UNRXtph?9sL>$HG-Wjh{ z7~$s9;wEh)k*I$J!lzm)*JVG9W!5c#MkO)4X}2R0h$n4qO)K=8? zUcU2m8&<&kz%Z6@z5H->84+w?eKb&}`?ZNMujW(ol!6A^mcCw0J;&9+&Nj~IRN3NU z{jr{OMD@iSS|p__yOJ|469v*DY-{#esgw_IYa5i1R80yaO^(@r(rl<8??u{QIa{W#tQAK32ZSx#(k)hM0zBRfK=MbpA+)}CtXL5-E-9L$)Yep77&Vet?^#1lcc=!|D>*N08_?gr(@MBS(5(?hpw26G*+h#O zS!ghxo4#Cy&eVvdXXN^PDHPS1 zerFN=DgLyjQP2zCU?tIE9&QFVs$%0THw6(#W1Xo0)B9K{PhS7jF-M-#Sx`MA z2i&3h(eslTOL_}~FgZTQ!&d=QuTmcmWiF9udifEs@FE-2#$ks6mlV^ZuctasO4Q2q zT~Q;CXBC-fFVkrg_@4eIhU@d84|vB&%psx^r3QKd>M<~vJ_vT~G=x6TEws#B?+MM6 zt{PHAm?LN2XEYrG$-Y{wUBkVblNh&Xu7;96J5+L$B2eN72P-|+3|>!@)Hgca1ugG{ zYcEa+XJNpuNCj*h!?VexGRG8@dat;qYBG_s~34hydA#M@W)b|h9dn#U_4g-Jy-By)w;Vi*>(JioB0 zXolwSvXW>(bEnu=cO=lYYm2T_XAX~T=?92w!Y5&QRmW~Qkfd)FLFH`Vz9G3tl%)n` z%C1A|swI>_9&6m1mIy;u0*qFlVoh`m8tZ`6y(&#BUN$M~2NUwACpqzZLq2J(T?$G( z|0-8$8Sd&kG$zUNlfOVdhI5?FNlg}W)pKtCEb%xhpzL9i^9C!l#!%AszRcS##vE%^ zDv5DE!aOlOp;3K-=>7C-SmG1y40aPozvP4xG3+I#Hru6*Rc ztZ^L>ij1lqO>#r&D5{Al*?LOt?Hwd7Xljo+GeAbq;PcR6q&!Zk{8k$`filfB6m>I7 z@RNF6*f($V#h~m6I!~VOvUI`39qY^4v3V~=J~AAgPTg+Z2CZs1MPeg6k~cgCJbXi) zvv6I{n*l*-@AtcM@5@Lz&`!h`P8@ErQen{Ft^>5*2|S?@~0o{h7?#v#^8+M zY_1omaWt6BSK#jTo|pLWEP@RHfPihI)%Vb **Indication** : dans le tri par sélection, au lieu de comparer `tab[j] < tab[mini]`, vous comparerez `athletes[j]["temps"] < athletes[mini]["temps"]`. + +### Étape 2 — Afficher le podium +Implémentez `afficher_podium(athletes_tries)` qui affiche les 3 premiers avec un podium en ASCII. + +``` + 1er + +---+ 2e 3e + | | +---+ +---+ + | 1 | | 2 | | 3 | + | | | | | | + +---+ +---+ +---+ + Alice (FR) Bob (USA) Carla (BR) + 9.85 s 9.91 s 9.97 s +``` + +### Étape 3 — Recherche dichotomique +Après le tri, créez une liste des temps uniquement. Implémentez `temps_atteint(temps_liste, t)` qui utilise la dichotomie pour dire si un temps exact a été réalisé lors de la compétition. + +### Étape 4 — Extension (si vous avez le temps) +Affichez aussi le classement complet sous forme de tableau numéroté. + +--- + +## Ce que vous devez rendre +- Le programme qui trie et affiche le podium +- Réponse : pourquoi le tri par sélection fait-il **moins de déplacements** que le tri par insertion ? diff --git a/algorithmes/mini-projets/04_annuaire.zip b/algorithmes/mini-projets/04_annuaire.zip new file mode 100644 index 0000000000000000000000000000000000000000..500edf523694885f6ec1b1d9c9f486c0000c056b GIT binary patch literal 2559 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 literal 0 HcmV?d00001 diff --git a/algorithmes/mini-projets/04_annuaire/starter.py b/algorithmes/mini-projets/04_annuaire/starter.py new file mode 100644 index 0000000..b1d2cdb --- /dev/null +++ b/algorithmes/mini-projets/04_annuaire/starter.py @@ -0,0 +1,88 @@ +# Projet 04 — L'Annuaire +# Algorithmes : Tri par insertion + Recherche dichotomique + +# L'annuaire est une liste de dictionnaires, toujours triée par "nom" +annuaire = [ + {"nom": "Dupont", "prenom": "Alice", "tel": "06 11 22 33 44"}, + {"nom": "Garcia", "prenom": "Carlos", "tel": "07 55 66 77 88"}, + {"nom": "Martin", "prenom": "Sophie", "tel": "06 99 88 77 66"}, + {"nom": "Petit", "prenom": "Luc", "tel": "07 12 34 56 78"}, + {"nom": "Rousseau", "prenom": "Emma", "tel": "06 44 55 66 77"}, +] + +def afficher_annuaire(annuaire): + """Affiche tous les contacts sous forme de tableau.""" + print(f"\n{'Nom':<15} {'Prénom':<12} {'Téléphone'}") + print("-" * 40) + for contact in annuaire: + print(f"{contact['nom']:<15} {contact['prenom']:<12} {contact['tel']}") + print() + +def ajouter_contact(annuaire, contact): + """ + Insère le contact à la bonne place pour maintenir l'ordre alphabétique. + Principe : tri par insertion (un seul élément à insérer). + """ + annuaire.append(contact) # on l'ajoute à la fin temporairement + j = len(annuaire) - 1 + # TODO : décaler vers la droite tant que le nom précédent est > au nom du contact + # Indice : comparer annuaire[j-1]["nom"] et contact["nom"] + while j > 0 and ...: + annuaire[j] = annuaire[j - 1] + j -= 1 + annuaire[j] = contact + +def rechercher(annuaire, nom): + """ + Recherche dichotomique par nom. + Retourne le contact (dict) si trouvé, None sinon. + """ + a = 0 + b = len(annuaire) - 1 + while a <= b: + m = (a + b) // 2 + nom_m = annuaire[m]["nom"] + if nom_m == nom: + return annuaire[m] + elif nom_m < nom: + # TODO + pass + else: + # TODO + pass + return None + +def menu(): + """Boucle de menu interactif.""" + while True: + print("=== Annuaire ===") + print("1 — Afficher tous les contacts") + print("2 — Ajouter un contact") + print("3 — Rechercher un contact") + print("4 — Quitter") + choix = input("Votre choix : ") + + if choix == "1": + afficher_annuaire(annuaire) + + elif choix == "2": + nom = input("Nom : ").strip().capitalize() + prenom = input("Prénom : ").strip().capitalize() + tel = input("Téléphone : ").strip() + ajouter_contact(annuaire, {"nom": nom, "prenom": prenom, "tel": tel}) + print(f"{nom} ajouté !") + + elif choix == "3": + nom = input("Nom à rechercher : ").strip().capitalize() + # TODO : appeler rechercher() et afficher le résultat + pass + + elif choix == "4": + print("Au revoir !") + break + else: + print("Choix invalide.") + + +# --- Programme principal --- +menu() diff --git a/algorithmes/mini-projets/04_annuaire/sujet.md b/algorithmes/mini-projets/04_annuaire/sujet.md new file mode 100644 index 0000000..ffd827c --- /dev/null +++ b/algorithmes/mini-projets/04_annuaire/sujet.md @@ -0,0 +1,46 @@ +# 04 — L'Annuaire + +**Algorithmes :** Tri par insertion + Recherche dichotomique +**Difficulté :** Moyen +**Durée estimée :** 1h — 1h15 + +--- + +## Contexte + +Vous créez un mini-annuaire de contacts. Il doit toujours rester **trié par nom** pour que la recherche dichotomique fonctionne. + +Chaque fois qu'on ajoute un contact, on l'insère directement à la bonne place (comme dans le tri par insertion). Chaque fois qu'on cherche, on utilise la dichotomie. + +--- + +## Étapes + +### Étape 1 — Afficher l'annuaire +Lancez le starter, vérifiez que `afficher_annuaire()` fonctionne. + +### Étape 2 — Implémenter `ajouter_contact(annuaire, contact)` +Cette fonction insère le nouveau contact **à la bonne position** pour maintenir l'ordre alphabétique. + +> **Indication** : c'est le principe du tri par insertion, mais appliqué à un seul élément. On parcourt depuis la fin et on décale les contacts dont le nom est alphabétiquement après le nouveau. +> +> Pour comparer des chaînes alphabétiquement en Python : `"Dupont" < "Martin"` → `True` + +### Étape 3 — Implémenter `rechercher(annuaire, nom)` +Recherche dichotomique : retourne le contact (dictionnaire complet) si trouvé, `None` sinon. + +### Étape 4 — Menu interactif +Complétez la boucle `menu()` pour que l'utilisateur puisse : +- `1` — Afficher tous les contacts +- `2` — Ajouter un contact +- `3` — Rechercher un contact par nom +- `4` — Quitter + +### Étape 5 — Extension (si vous avez le temps) +Ajoutez une option `5` pour supprimer un contact par nom (cherchez-le d'abord avec la dichotomie, puis supprimez-le de la liste). + +--- + +## Ce que vous devez rendre +- Le programme avec le menu fonctionnel +- Réponse : dans quel cas la dichotomie est-elle inutilisable directement ? diff --git a/algorithmes/mini-projets/05_correcteur.zip b/algorithmes/mini-projets/05_correcteur.zip new file mode 100644 index 0000000000000000000000000000000000000000..1c737f3d2ae0b274bb9469264990f6c2bff411e2 GIT binary patch literal 3252 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 literal 0 HcmV?d00001 diff --git a/algorithmes/mini-projets/05_correcteur/starter.py b/algorithmes/mini-projets/05_correcteur/starter.py new file mode 100644 index 0000000..6b3fc09 --- /dev/null +++ b/algorithmes/mini-projets/05_correcteur/starter.py @@ -0,0 +1,111 @@ +# Projet 05 — Le Correcteur Orthographique +# Algorithmes : Tri par insertion + Recherche dichotomique + +# Dictionnaire de base, déjà trié alphabétiquement +dictionnaire = [ + "algorithme", "annuaire", "arbre", "binaire", "boucle", + "cellule", "chaine", "chat", "chien", "circuit", + "clavier", "code", "complexite", "condition", "donnee", + "ecran", "entier", "fichier", "flottant", "fonction", + "graphe", "indice", "instruction", "langage", "liste", + "logiciel", "memoire", "module", "nombre", "octet", + "ordinateur", "pixel", "programme", "python", "recursion", + "reseau", "serveur", "tableau", "terminal", "variable", +] + +def verifier(dictionnaire, mot): + """ + Recherche dichotomique : retourne True si le mot est dans le dictionnaire, + False sinon. + """ + a = 0 + b = len(dictionnaire) - 1 + while a <= b: + m = (a + b) // 2 + if dictionnaire[m] == mot: + return True + elif dictionnaire[m] < mot: + # TODO + pass + else: + # TODO + pass + return False + +def verifier_avec_voisins(dictionnaire, mot): + """ + Recherche dichotomique améliorée. + Retourne un tuple (trouve, voisin_avant, voisin_apres) : + - trouve : True si le mot existe, False sinon + - voisin_avant : le mot juste avant dans le dictionnaire (ou None) + - voisin_apres : le mot juste après dans le dictionnaire (ou None) + + Indication : à la fin de la boucle, si le mot n'est pas trouvé, + b pointe vers le mot juste avant et a vers le mot juste après. + """ + a = 0 + b = len(dictionnaire) - 1 + while a <= b: + m = (a + b) // 2 + if dictionnaire[m] == mot: + return (True, None, None) + elif dictionnaire[m] < mot: + a = m + 1 + else: + b = m - 1 + # TODO : récupérer les voisins avec les indices a et b + # Attention aux cas limites : b peut valoir -1, a peut dépasser la taille + voisin_avant = None # TODO : dictionnaire[b] si b >= 0, sinon None + voisin_apres = None # TODO : dictionnaire[a] si a < len(dictionnaire), sinon None + return (False, voisin_avant, voisin_apres) + +def ajouter_mot(dictionnaire, mot): + """ + Insère le mot à la bonne place pour maintenir l'ordre alphabétique. + Principe : tri par insertion sur un seul élément. + """ + dictionnaire.append(mot) + j = len(dictionnaire) - 1 + # TODO : décaler vers la gauche tant que le mot précédent est après le mot inséré + while j > 0 and False: # TODO : remplacer False par la bonne condition + dictionnaire[j] = dictionnaire[j - 1] + j -= 1 + dictionnaire[j] = mot + +def corriger(dictionnaire, mot): + """Affiche le résultat de la correction pour un mot donné.""" + trouve, avant, apres = verifier_avec_voisins(dictionnaire, mot) + if trouve: + print(f' "{mot}" : correct') + else: + suggestions = [v for v in [avant, apres] if v is not None] + if suggestions: + proposition = '" ou "'.join(suggestions) + print(f' "{mot}" : mot inconnu. Vouliez-vous dire "{proposition}" ?') + else: + print(f' "{mot}" : mot inconnu, aucune suggestion.') + + +# --- Programme principal --- +print("=== Correcteur Orthographique ===") +print(f"Dictionnaire : {len(dictionnaire)} mots\n") + +# Tests de correction +print("Tests automatiques :") +for mot in ["python", "pithon", "algorithme", "algorythme", "variable", "varible", "zzz"]: + corriger(dictionnaire, mot) + +# Ajout d'un mot +print() +print("Ajout du mot 'reseau' (déjà présent) et 'robot' (nouveau) :") +ajouter_mot(dictionnaire, "robot") +print(f' "robot" ajouté. Vérification : {verifier(dictionnaire, "robot")}') + +# Interface interactive +print() +print("--- Mode interactif (tapez 'fin' pour quitter) ---") +while True: + mot = input("Mot à vérifier : ").strip().lower() + if mot == "fin": + break + corriger(dictionnaire, mot) diff --git a/algorithmes/mini-projets/05_correcteur/sujet.md b/algorithmes/mini-projets/05_correcteur/sujet.md new file mode 100644 index 0000000..5b6412e --- /dev/null +++ b/algorithmes/mini-projets/05_correcteur/sujet.md @@ -0,0 +1,50 @@ +# 05 — Le Correcteur Orthographique + +**Algorithmes :** Tri par insertion + Recherche dichotomique +**Difficulté :** Moyen +**Durée estimée :** 1h — 1h15 + +--- + +## Contexte + +Vous construisez un mini correcteur orthographique. Il dispose d'un dictionnaire de mots déjà triés par ordre alphabétique. Il peut vérifier si un mot existe, proposer des mots voisins en cas d'erreur, et permettre d'ajouter de nouveaux mots en maintenant l'ordre. + +Ce projet utilise la dichotomie différemment des autres : au lieu de renvoyer seulement `True` ou `False`, elle doit aussi indiquer **où** le mot aurait dû se trouver, pour proposer des suggestions. + +--- + +## Étapes + +### Étape 1 — Vérifier un mot +Implémentez `verifier(dictionnaire, mot)` qui retourne `True` si le mot est dans le dictionnaire, `False` sinon. + +C'est une recherche dichotomique classique sur des chaînes de caractères. + +> Rappel : en Python, les chaînes se comparent alphabétiquement : `"chat" < "chien"` → `True`. + +### Étape 2 — Proposer des voisins +Modifiez votre fonction pour qu'elle retourne aussi les **mots voisins** quand le mot est absent : le mot qui se trouverait juste avant et juste après dans le dictionnaire. + +> **Indication** : à la fin de la dichotomie, si le mot n'est pas trouvé, les bornes `a` et `b` indiquent l'endroit où il aurait dû être inséré. Les mots en `dictionnaire[b]` et `dictionnaire[a]` sont ses voisins alphabétiques. + +Retournez un tuple `(trouve, voisin_avant, voisin_apres)`. + +### Étape 3 — Ajouter un mot +Implémentez `ajouter_mot(dictionnaire, mot)` qui insère le mot à la bonne place pour maintenir l'ordre alphabétique. + +> **Indication** : c'est le même principe que le tri par insertion, appliqué à un seul élément. Ajoutez le mot à la fin avec `append()`, puis décalez vers la gauche tant que le mot précédent est alphabétiquement après lui. + +### Étape 4 — Interface de correction +Complétez la boucle principale : l'utilisateur saisit un mot, le programme répond : +- `"chat" : correct` +- `"chzt" : mot inconnu. Vouliez-vous dire "chute" ou "chat" ?` + +### Étape 5 — Extension (si vous avez le temps) +Ajoutez une fonction `charger_mots(fichier)` qui lit un fichier texte (un mot par ligne) et retourne la liste triée. Testez avec un vrai fichier de mots français. + +--- + +## Ce que vous devez rendre +- Le programme fonctionnel avec la suggestion de voisins +- Réponse : pourquoi les bornes `a` et `b` à la fin de la dichotomie indiquent-elles le point d'insertion ? diff --git a/algorithmes/mini-projets/06_bibliotheque.zip b/algorithmes/mini-projets/06_bibliotheque.zip new file mode 100644 index 0000000000000000000000000000000000000000..62549e594b4118eefe032d506a4c2f150b66b138 GIT binary patch literal 2894 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 {'Pages':>6}") + print(" " + "-" * 58) + for i, l in enumerate(livres, 1): + print(f" {i:>2}. {l['titre']:<30} {l['auteur']:<12} {l['annee']:>5} {l['pages']:>6} p.") + print() + +def afficher_fiche(livre): + """Affiche la fiche complète d'un livre.""" + # TODO : afficher toutes les informations du livre de façon lisible + pass + +def tri_selection_livres(livres): + """Trie les livres par titre alphabétique (tri par sélection).""" + n = len(livres) + for i in range(n): + mini = i + for j in range(i + 1, n): + # TODO : comparer les titres + if ...: + mini = j + livres[i], livres[mini] = livres[mini], livres[i] + return livres + +def rechercher_titre(livres_tries, titre): + """ + Recherche dichotomique par titre exact (en minuscules). + Retourne le livre si trouvé, None sinon. + """ + a = 0 + b = len(livres_tries) - 1 + while a <= b: + m = (a + b) // 2 + titre_m = livres_tries[m]["titre"] + if titre_m == titre: + return livres_tries[m] + elif titre_m < titre: + # TODO + pass + else: + # TODO + pass + return None + +def statistiques(livres): + """Affiche des statistiques sur le catalogue.""" + n = len(livres) + total_pages = sum(l["pages"] for l in livres) + # TODO : trouver le livre avec le moins de pages et le plus de pages + # Indice : utilise ton tri par sélection sur une copie triée par pages ! + print(f"\nStatistiques du catalogue ({n} livres) :") + print(f" Moyenne de pages : {total_pages // n} pages") + # TODO : afficher le plus court et le plus long + + +# --- Programme principal --- +print("=== Catalogue de la Bibliothèque ===") +print("\nAvant tri :") +afficher_catalogue(livres) + +tri_selection_livres(livres) + +print("Après tri alphabétique :") +afficher_catalogue(livres) + +# Tests de recherche +print("Recherches :") +for titre in ["1984", "dune", "le comte de monte cristo"]: + resultat = rechercher_titre(livres, titre) + if resultat: + print(f" '{titre}' → trouvé !") + afficher_fiche(resultat) + else: + print(f" '{titre}' → absent du catalogue") + +statistiques(livres) diff --git a/algorithmes/mini-projets/06_bibliotheque/sujet.md b/algorithmes/mini-projets/06_bibliotheque/sujet.md new file mode 100644 index 0000000..0d96887 --- /dev/null +++ b/algorithmes/mini-projets/06_bibliotheque/sujet.md @@ -0,0 +1,45 @@ +# 06 — La Bibliothèque + +**Algorithmes :** Tri par sélection + Recherche dichotomique +**Difficulté :** Moyen +**Durée estimée :** 1h — 1h15 + +--- + +## Contexte + +Vous gérez le catalogue d'une bibliothèque. Les livres doivent être triés par **titre alphabétique** pour qu'on puisse les retrouver rapidement. Vous utiliserez le tri par sélection pour trier, et la dichotomie pour chercher. + +--- + +## Étapes + +### Étape 1 — Trier par titre +Implémentez `tri_selection_livres(livres)` qui trie par `"titre"` (ordre alphabétique). + +> **Rappel** : en Python, `"Alice" < "Zorro"` → `True`. Vous pouvez comparer des chaînes directement. + +### Étape 2 — Recherche dichotomique +Implémentez `rechercher_titre(livres_tries, titre)` qui retourne le livre si trouvé, `None` sinon. + +> **Attention** : la comparaison doit être exacte (majuscules comprises). Pour simplifier, tout est déjà en minuscules dans les données. + +### Étape 3 — Affichage enrichi +Implémentez `afficher_fiche(livre)` qui affiche toutes les informations d'un livre de façon lisible (titre, auteur, année, genre, pages). + +### Étape 4 — Statistiques +Ajoutez une fonction `statistiques(livres)` qui affiche : +- Le nombre de livres +- Le livre le plus court et le plus long (en pages) +- La moyenne de pages + +> **Indication** : une fois la liste triée par titre, vous pouvez utiliser une boucle simple pour les stats. Ou bien trier une copie par pages avec votre tri ! + +### Étape 5 — Extension (si vous avez le temps) +Ajoutez la possibilité de trier aussi par **année** ou par **nombre de pages**, et de rechercher tous les livres d'un **même auteur** (recherche linéaire cette fois — pourquoi ne peut-on pas utiliser la dichotomie ici ?). + +--- + +## Ce que vous devez rendre +- Le programme fonctionnel +- Réponse : pour chercher tous les livres d'un auteur, pourquoi la dichotomie est-elle inadaptée ? diff --git a/algorithmes/mini-projets/07_meteo 2/starter.py b/algorithmes/mini-projets/07_meteo 2/starter.py new file mode 100644 index 0000000..f8c08f9 --- /dev/null +++ b/algorithmes/mini-projets/07_meteo 2/starter.py @@ -0,0 +1,109 @@ +# Projet 07 — La Météo +# Algorithmes : Tri par insertion + Recherche dichotomique + +# Relevés du mois de mars : (numéro du jour, température en °C) +releves = [ + (1, 12.3), (2, 8.7), (3, 14.1), (4, 11.5), (5, 9.2), + (6, 7.8), (7, 13.4), (8, 15.6), (9, 10.1), (10, 6.5), + (11, 5.2), (12, 9.8), (13, 12.7),(14, 16.3),(15, 18.1), + (16, 14.5),(17, 11.2),(18, 8.9), (19, 7.3), (20, 10.5), + (21, 13.8),(22, 17.2),(23, 19.4),(24, 15.1),(25, 12.0), + (26, 9.5), (27, 11.8),(28, 14.2),(29, 16.7),(30, 18.9), + (31, 13.3), +] + +def afficher_releves(releves, nb=10): + """Affiche les nb premiers relevés.""" + print(f"\n {'Jour':>5} {'Température':>12}") + print(" " + "-" * 20) + for jour, temp in releves[:nb]: + print(f" Jour {jour:>2} {temp:>8.1f} °C") + if len(releves) > nb: + print(f" ... ({len(releves) - nb} relevés supplémentaires)") + print() + +def tri_insertion_temperatures(tab): + """ + Trie les relevés par température croissante (tri par insertion). + Chaque élément est un tuple (jour, temperature). + On trie selon le deuxième élément du tuple. + """ + for i in range(1, len(tab)): + x = tab[i] + j = i + # TODO : comparer tab[j-1][1] et x[1] + while j > 0 and ...: + tab[j] = tab[j - 1] + j -= 1 + tab[j] = x + return tab + +def statistiques(tab_trie): + """Affiche les statistiques à partir des relevés triés.""" + n = len(tab_trie) + min_releve = tab_trie[0] + max_releve = tab_trie[n - 1] + mediane = tab_trie[n // 2] + + print("Statistiques du mois :") + print(f" Minimum : {min_releve[1]:.1f} °C (jour {min_releve[0]})") + print(f" Maximum : {max_releve[1]:.1f} °C (jour {max_releve[0]})") + print(f" Médiane : {mediane[1]:.1f} °C (jour {mediane[0]})") + # TODO : ajouter la moyenne + print() + +def temperature_atteinte(tab_trie, t): + """ + Recherche dichotomique : retourne True si la température t + a été relevée au cours du mois (comparaison exacte). + """ + a = 0 + b = len(tab_trie) - 1 + while a <= b: + m = (a + b) // 2 + temp_m = tab_trie[m][1] + if temp_m == t: + return True + elif temp_m < t: + # TODO + pass + else: + # TODO + pass + return False + +def histogramme(tab_trie): + """Affiche un histogramme horizontal des températures (arrondi à l'entier).""" + # Compter les occurrences par degré entier + compteur = {} + for _, temp in tab_trie: + degre = int(temp) + compteur[degre] = compteur.get(degre, 0) + 1 + + print("Histogramme des températures :") + for degre in sorted(compteur): + barre = "█" * compteur[degre] + print(f" {degre:>3}°C | {barre} ({compteur[degre]})") + print() + + +# --- Programme principal --- +print("=== Analyse Météo — Mars ===") +print("\nRelevés originaux (10 premiers) :") +afficher_releves(releves, nb=5) + +# Trier une copie pour ne pas perdre l'ordre chronologique +releves_tries = releves[:] +tri_insertion_temperatures(releves_tries) + +print("Relevés triés par température :") +afficher_releves(releves_tries, nb=5) + +statistiques(releves_tries) +histogramme(releves_tries) + +# Tests de recherche +print("Recherches :") +for t in [5.2, 15.0, 19.4, 20.0]: + present = temperature_atteinte(releves_tries, t) + print(f" {t}°C relevé ce mois-ci ? {'Oui' if present else 'Non'}") diff --git a/algorithmes/mini-projets/07_meteo 2/sujet.md b/algorithmes/mini-projets/07_meteo 2/sujet.md new file mode 100644 index 0000000..451aca2 --- /dev/null +++ b/algorithmes/mini-projets/07_meteo 2/sujet.md @@ -0,0 +1,54 @@ +# 07 — La Météo + +**Algorithmes :** Tri par insertion + Recherche dichotomique +**Difficulté :** Moyen +**Durée estimée :** 1h — 1h15 + +--- + +## Contexte + +Vous analysez les relevés de température d'un mois complet. Vous voulez les trier, calculer des statistiques, et savoir rapidement si une température précise a été atteinte ce mois-ci. + +--- + +## Étapes + +### Étape 1 — Trier les températures +Implémentez `tri_insertion_temperatures(tab)` qui trie la liste de relevés par **température croissante**. + +Chaque relevé est un tuple `(jour, temperature)`. On trie selon la température (le deuxième élément). + +> **Indication** : comparez `tab[j-1][1]` et `x[1]` (le deuxième élément du tuple). + +### Étape 2 — Statistiques de base +Implémentez `statistiques(tab_trie)` qui affiche : +- La température **minimale** et le jour où elle a été relevée +- La température **maximale** et le jour où elle a été relevée +- La **médiane** (la valeur au milieu une fois triée) + +> Rappel : la médiane d'une liste triée de taille n est à l'indice `n // 2`. + +### Étape 3 — Recherche dichotomique +Implémentez `temperature_atteinte(tab_trie, t)` : retourne `True` si la température `t` a été relevée, `False` sinon. + +> **Attention** : les relevés sont triés par température. La dichotomie doit comparer `tab[m][1]` (la valeur) avec `t`. + +### Étape 4 — Visualisation ASCII +Implémentez `histogramme(tab_trie)` qui affiche un histogramme horizontal des températures. + +``` + 5°C | ## +10°C | ##### +15°C | ######## +... +``` + +### Étape 5 — Extension (si vous avez le temps) +Ajoutez une fonction qui regroupe les relevés par **tranche de 5°C** et compte combien de jours tombent dans chaque tranche. + +--- + +## Ce que vous devez rendre +- Le programme complet avec statistiques et recherche +- Réponse : pourquoi le tri par insertion est-il particulièrement efficace si les données sont **déjà presque triées** ? diff --git a/algorithmes/mini-projets/07_meteo.zip b/algorithmes/mini-projets/07_meteo.zip new file mode 100644 index 0000000000000000000000000000000000000000..71269794f8c6b30f7b5e8c2a4be7bb50650e55af GIT binary patch literal 2899 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 bsMGJCWb4m*nGe$e0LH_4aJXx-9Nqp6kzNkc literal 0 HcmV?d00001 diff --git a/algorithmes/mini-projets/07_meteo/starter.py b/algorithmes/mini-projets/07_meteo/starter.py new file mode 100644 index 0000000..f8c08f9 --- /dev/null +++ b/algorithmes/mini-projets/07_meteo/starter.py @@ -0,0 +1,109 @@ +# Projet 07 — La Météo +# Algorithmes : Tri par insertion + Recherche dichotomique + +# Relevés du mois de mars : (numéro du jour, température en °C) +releves = [ + (1, 12.3), (2, 8.7), (3, 14.1), (4, 11.5), (5, 9.2), + (6, 7.8), (7, 13.4), (8, 15.6), (9, 10.1), (10, 6.5), + (11, 5.2), (12, 9.8), (13, 12.7),(14, 16.3),(15, 18.1), + (16, 14.5),(17, 11.2),(18, 8.9), (19, 7.3), (20, 10.5), + (21, 13.8),(22, 17.2),(23, 19.4),(24, 15.1),(25, 12.0), + (26, 9.5), (27, 11.8),(28, 14.2),(29, 16.7),(30, 18.9), + (31, 13.3), +] + +def afficher_releves(releves, nb=10): + """Affiche les nb premiers relevés.""" + print(f"\n {'Jour':>5} {'Température':>12}") + print(" " + "-" * 20) + for jour, temp in releves[:nb]: + print(f" Jour {jour:>2} {temp:>8.1f} °C") + if len(releves) > nb: + print(f" ... ({len(releves) - nb} relevés supplémentaires)") + print() + +def tri_insertion_temperatures(tab): + """ + Trie les relevés par température croissante (tri par insertion). + Chaque élément est un tuple (jour, temperature). + On trie selon le deuxième élément du tuple. + """ + for i in range(1, len(tab)): + x = tab[i] + j = i + # TODO : comparer tab[j-1][1] et x[1] + while j > 0 and ...: + tab[j] = tab[j - 1] + j -= 1 + tab[j] = x + return tab + +def statistiques(tab_trie): + """Affiche les statistiques à partir des relevés triés.""" + n = len(tab_trie) + min_releve = tab_trie[0] + max_releve = tab_trie[n - 1] + mediane = tab_trie[n // 2] + + print("Statistiques du mois :") + print(f" Minimum : {min_releve[1]:.1f} °C (jour {min_releve[0]})") + print(f" Maximum : {max_releve[1]:.1f} °C (jour {max_releve[0]})") + print(f" Médiane : {mediane[1]:.1f} °C (jour {mediane[0]})") + # TODO : ajouter la moyenne + print() + +def temperature_atteinte(tab_trie, t): + """ + Recherche dichotomique : retourne True si la température t + a été relevée au cours du mois (comparaison exacte). + """ + a = 0 + b = len(tab_trie) - 1 + while a <= b: + m = (a + b) // 2 + temp_m = tab_trie[m][1] + if temp_m == t: + return True + elif temp_m < t: + # TODO + pass + else: + # TODO + pass + return False + +def histogramme(tab_trie): + """Affiche un histogramme horizontal des températures (arrondi à l'entier).""" + # Compter les occurrences par degré entier + compteur = {} + for _, temp in tab_trie: + degre = int(temp) + compteur[degre] = compteur.get(degre, 0) + 1 + + print("Histogramme des températures :") + for degre in sorted(compteur): + barre = "█" * compteur[degre] + print(f" {degre:>3}°C | {barre} ({compteur[degre]})") + print() + + +# --- Programme principal --- +print("=== Analyse Météo — Mars ===") +print("\nRelevés originaux (10 premiers) :") +afficher_releves(releves, nb=5) + +# Trier une copie pour ne pas perdre l'ordre chronologique +releves_tries = releves[:] +tri_insertion_temperatures(releves_tries) + +print("Relevés triés par température :") +afficher_releves(releves_tries, nb=5) + +statistiques(releves_tries) +histogramme(releves_tries) + +# Tests de recherche +print("Recherches :") +for t in [5.2, 15.0, 19.4, 20.0]: + present = temperature_atteinte(releves_tries, t) + print(f" {t}°C relevé ce mois-ci ? {'Oui' if present else 'Non'}") diff --git a/algorithmes/mini-projets/07_meteo/sujet.md b/algorithmes/mini-projets/07_meteo/sujet.md new file mode 100644 index 0000000..451aca2 --- /dev/null +++ b/algorithmes/mini-projets/07_meteo/sujet.md @@ -0,0 +1,54 @@ +# 07 — La Météo + +**Algorithmes :** Tri par insertion + Recherche dichotomique +**Difficulté :** Moyen +**Durée estimée :** 1h — 1h15 + +--- + +## Contexte + +Vous analysez les relevés de température d'un mois complet. Vous voulez les trier, calculer des statistiques, et savoir rapidement si une température précise a été atteinte ce mois-ci. + +--- + +## Étapes + +### Étape 1 — Trier les températures +Implémentez `tri_insertion_temperatures(tab)` qui trie la liste de relevés par **température croissante**. + +Chaque relevé est un tuple `(jour, temperature)`. On trie selon la température (le deuxième élément). + +> **Indication** : comparez `tab[j-1][1]` et `x[1]` (le deuxième élément du tuple). + +### Étape 2 — Statistiques de base +Implémentez `statistiques(tab_trie)` qui affiche : +- La température **minimale** et le jour où elle a été relevée +- La température **maximale** et le jour où elle a été relevée +- La **médiane** (la valeur au milieu une fois triée) + +> Rappel : la médiane d'une liste triée de taille n est à l'indice `n // 2`. + +### Étape 3 — Recherche dichotomique +Implémentez `temperature_atteinte(tab_trie, t)` : retourne `True` si la température `t` a été relevée, `False` sinon. + +> **Attention** : les relevés sont triés par température. La dichotomie doit comparer `tab[m][1]` (la valeur) avec `t`. + +### Étape 4 — Visualisation ASCII +Implémentez `histogramme(tab_trie)` qui affiche un histogramme horizontal des températures. + +``` + 5°C | ## +10°C | ##### +15°C | ######## +... +``` + +### Étape 5 — Extension (si vous avez le temps) +Ajoutez une fonction qui regroupe les relevés par **tranche de 5°C** et compte combien de jours tombent dans chaque tranche. + +--- + +## Ce que vous devez rendre +- Le programme complet avec statistiques et recherche +- Réponse : pourquoi le tri par insertion est-il particulièrement efficace si les données sont **déjà presque triées** ? diff --git a/algorithmes/mini-projets/08_course_algos.zip b/algorithmes/mini-projets/08_course_algos.zip new file mode 100644 index 0000000000000000000000000000000000000000..11ff348f10cc5e16b922dfc7c60ffeae4411a6d3 GIT binary patch literal 2471 zcmai$c|4SB8^=cmlO<~^vXz|-4r809hGWTSc*oWtQr7ItU=qz@ohBuNl3n&JS;|(( zG8I`v3?a!f*~zixP;X~>-_H9!_vd=<`}yPfey;nE>-+hcAQ*vsfc@v(xnP@bhkw7g z0HOdzb-OEG7+*g}J9~F$FF!CQhz-C1Tw?$LzWrow#sOfts@3Z1u~+-M$u}AZ00KNU z_&ZJDCp15QdtZM?Uj=XM&$!l_t**9vb!D&KSTx4aAY9M3{}3#@ge)!p_2@ z-a+s)NwX>b72Bk*U*|YC;axWilq^t^r$S8K<+6ss*%fhYMwCj$9us`NRZ^XDc9#q@ zTBk$$g}jVMwogG1uq$@tNv(DcROxv@otOD2WNF*Bj|h}Dnvy3`&_+ ztWTP>J(?&65T71ELE;x^7l(r2Vh!&H%6~0~0wSe{b9p!u)J{y0j@(ROF=uqKtY`BySeVez-Gb%3Na>=?#Ohn*9RlB#rn(0tjip~q18-;Ii=y0|k9VyQPdng+Mdmcf%vIeo)AQ_litWoElsWquJRO8GH6(X? z-!}E$?$-%S$=LJ@@AnB<5SS&{dpuHmv{MYJi zR#`^&025S>chq55oc#6LL}s?8yjD?N;T|c8X6KAMS1U2H?rt;X@}2r=6&-#x{v?5M zgJa-}CjDIX~XNUzG;hmPW zzTPO$%8;`5vW@Ghj?T`2tAsiZ2L^(*KM_O#OO_UROq1eqFgm4aAHd;y+5>>a1_c2&*kqbZb5P_Zwr$Q2?LE;Ys@ zvS*SNgfoD$j?ES2MN%1+!@N~)DgHO*wK56YVP^8jeZ0cXe?81UH(rpu2pX9tPni9NuvU_AeR3M>Ya1mbk z?hYF*Ps#feG*}J+Szv*MaK+GRXk$T#sHi;L3KgyyCt94tlocHS4qjUQ^1y<_l7m;s z6+VoJLabj0vOLKHAsAcz+!I6ip6+CQ>dJ6vW05ZPj$mHV2gPRulE>Wtci z8XDchy>w%JveO)QFs4PputApx$!)~i5L*A$#E2Ic7kvqhO^~K16eP^fmsp_!aa>4j zFb}rYsBHTTlhe}mG@io|&u?sKFIet*FLjyGD+p%$C1Ns?(2Pvr_Rf^<44*%A;=(kz z^T?|FIe*S0PIicHRJ|r)DEY*;J=r7|eJgwEvb~r?{aR@#$$*4TDmz_NuJMe#aeI)( zG_UtdR9HzFrVwD@sa zddM`-?AYB7;{v4HVox;6cWP!R+Nli@Em?Pv!+2gLIJc)2pTwS!$U?~E&*+A@U|Nj4 zalk?#!qW8t`{m6} {'Insertion (ms)':>16} {'Sélection (ms)':>16} {'Vainqueur':>10}") + print(" " + "-" * 55) + + for n in tailles: + liste = generer_liste(n, "aleatoire") + t_insertion = mesurer_temps(tri_insertion, liste) + t_selection = mesurer_temps(tri_selection, liste) + vainqueur = "Insertion" if t_insertion < t_selection else "Sélection" + print(f" {n:>6} {t_insertion:>16.3f} {t_selection:>16.3f} {vainqueur:>10}") + print() + +# ------------------------------------------------------- +# Étape 4 : tableau comparatif selon le mode (n fixé) +# ------------------------------------------------------- + +def comparer_modes(n=1000): + modes = ["aleatoire", "trie", "inverse"] + print(f"=== Comparaison par configuration (n = {n}) ===\n") + print(f" {'Mode':<12} {'Insertion (ms)':>16} {'Sélection (ms)':>16} {'Vainqueur':>10}") + print(" " + "-" * 60) + + for mode in modes: + liste = generer_liste(n, mode) + t_insertion = mesurer_temps(tri_insertion, liste) + t_selection = mesurer_temps(tri_selection, liste) + vainqueur = "Insertion" if t_insertion < t_selection else "Sélection" + print(f" {mode:<12} {t_insertion:>16.3f} {t_selection:>16.3f} {vainqueur:>10}") + print() + +# ------------------------------------------------------- +# Programme principal +# ------------------------------------------------------- + +comparer_tailles() +comparer_modes(n=1000) + +print("Conclusion :") +print(" TODO : écris tes observations ici") diff --git a/algorithmes/mini-projets/08_course_algos/sujet.md b/algorithmes/mini-projets/08_course_algos/sujet.md new file mode 100644 index 0000000..a57bbb0 --- /dev/null +++ b/algorithmes/mini-projets/08_course_algos/sujet.md @@ -0,0 +1,49 @@ +# 08 — La Course des Algorithmes + +**Algorithmes :** Tri par insertion vs Tri par sélection (comparaison) +**Difficulté :** Difficile +**Durée estimée :** 1h15 — 1h30 + +--- + +## Contexte + +On sait que les deux tris ont une complexité **quadratique** (O(n²)) dans le pire des cas. Mais en pratique, se comportent-ils vraiment pareil ? C'est ce que vous allez mesurer. + +Vous allez tester les deux algorithmes sur différentes tailles de listes et dans différentes configurations, afficher les résultats et tirer des conclusions. + +--- + +## Étapes + +### Étape 1 — Copier les deux tris +Recopiez dans le starter vos fonctions `tri_insertion(tab)` et `tri_selection(tab)` qui fonctionnent sur des listes d'entiers. + +### Étape 2 — Mesurer le temps +La fonction `mesurer_temps(fonction, tab)` est déjà fournie. Elle prend une **copie** de la liste pour ne pas la modifier et mesure le temps en millisecondes. + +> **Important** : toujours travailler sur une **copie** (`tab[:]`) pour que les deux algos partent du même état. + +### Étape 3 — Tester sur différentes tailles +Testez pour `n ∈ [100, 500, 1000, 2000, 5000]` avec une liste **aléatoire**. Affichez un tableau comparatif. + +### Étape 4 — Tester les cas particuliers +Pour `n = 1000`, testez : +- Liste aléatoire +- Liste **déjà triée** (croissant) +- Liste **triée à l'envers** (décroissant) + +Affichez les résultats. Quel algorithme est avantagé selon le cas ? + +### Étape 5 — Tracer un graphique (extension) +Si vous connaissez `matplotlib`, tracez les courbes de temps en fonction de n pour les deux algorithmes. + +```python +import matplotlib.pyplot as plt +``` + +--- + +## Ce que vous devez rendre +- Le programme avec le tableau comparatif +- Une conclusion écrite : dans quels cas préférez-vous le tri par insertion ? Le tri par sélection ? Justifiez avec vos mesures. diff --git a/algorithmes/mini-projets/09_generateur_web.zip b/algorithmes/mini-projets/09_generateur_web.zip new file mode 100644 index 0000000000000000000000000000000000000000..c5a99d67e4f9e3f63e66b81a92ab13976e677ef1 GIT binary patch literal 3670 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 literal 0 HcmV?d00001 diff --git a/algorithmes/mini-projets/09_generateur_web/starter.py b/algorithmes/mini-projets/09_generateur_web/starter.py new file mode 100644 index 0000000..2f3791a --- /dev/null +++ b/algorithmes/mini-projets/09_generateur_web/starter.py @@ -0,0 +1,163 @@ +# Projet 09 — Le Générateur Web +# Algorithmes : Tri par insertion + Dichotomie → page HTML/CSS + +import webbrowser + +jeux = [ + {"titre": "The Legend of Zelda: BotW", "studio": "Nintendo", "annee": 2017, "score": 97}, + {"titre": "Red Dead Redemption 2", "studio": "Rockstar", "annee": 2018, "score": 97}, + {"titre": "Grand Theft Auto V", "studio": "Rockstar", "annee": 2013, "score": 97}, + {"titre": "The Witcher 3", "studio": "CD Projekt", "annee": 2015, "score": 93}, + {"titre": "Elden Ring", "studio": "FromSoftware", "annee": 2022, "score": 96}, + {"titre": "Minecraft", "studio": "Mojang", "annee": 2011, "score": 93}, + {"titre": "Portal 2", "studio": "Valve", "annee": 2011, "score": 95}, + {"titre": "Hollow Knight", "studio": "Team Cherry", "annee": 2017, "score": 90}, + {"titre": "Hades", "studio": "Supergiant", "annee": 2020, "score": 93}, + {"titre": "Celeste", "studio": "Maddy Makes", "annee": 2018, "score": 94}, + {"titre": "Disco Elysium", "studio": "ZA/UM", "annee": 2019, "score": 97}, + {"titre": "Death Stranding", "studio": "Kojima Prod.", "annee": 2019, "score": 82}, +] + +def tri_insertion_jeux(jeux): + """ + Trie les jeux par score DÉCROISSANT (tri par insertion). + Le meilleur score doit être en premier. + """ + for i in range(1, len(jeux)): + x = jeux[i] + j = i + # TODO : condition pour trier par ordre décroissant + # Indice : pour l'ordre décroissant, on décale quand le score précédent est INFÉRIEUR + while j > 0 and ...: + jeux[j] = jeux[j - 1] + j -= 1 + jeux[j] = x + return jeux + +def rechercher_score(jeux_tries, score): + """ + Recherche dichotomique d'un jeu par score exact. + ATTENTION : la liste est triée par score DÉCROISSANT. + Les comparaisons < et > sont inversées par rapport au cours ! + """ + a = 0 + b = len(jeux_tries) - 1 + while a <= b: + m = (a + b) // 2 + score_m = jeux_tries[m]["score"] + if score_m == score: + return jeux_tries[m] + elif score_m > score: + # Le score du milieu est trop grand → chercher à droite + # TODO + pass + else: + # Le score du milieu est trop petit → chercher à gauche + # TODO + pass + return None + +def generer_html(jeux_tries, fichier="classement.html"): + """Génère une page HTML affichant le classement.""" + COULEURS_PODIUM = ["#FFD700", "#C0C0C0", "#CD7F32"] # or, argent, bronze + + lignes_html = "" + for i, jeu in enumerate(jeux_tries, 1): + if i <= 3: + bg = f'style="background-color: {COULEURS_PODIUM[i-1]}; font-weight: bold;"' + else: + bg = 'style="background-color: #f9f9f9;"' if i % 2 == 0 else "" + + lignes_html += f""" + + {i} + {jeu['titre']} + {jeu['studio']} + {jeu['annee']} + {jeu['score']}/100 + """ + + html = f""" + + + + Top Jeux Vidéo + + + +

🎮 Classement des meilleurs jeux

+ + + + + + + + + + + + {lignes_html} + +
#TitreStudioAnnéeScore
+

+ Généré par Python avec tri par insertion — NSI Première +

+ +""" + + with open(fichier, "w", encoding="utf-8") as f: + f.write(html) + print(f"Page générée : {fichier}") + + +# --- Programme principal --- +print("=== Générateur de classement HTML ===") + +tri_insertion_jeux(jeux) + +print("Classement (5 premiers) :") +for i, jeu in enumerate(jeux[:5], 1): + print(f" {i}. {jeu['titre']} — {jeu['score']}/100") + +# Recherche +jeu_trouve = rechercher_score(jeux, 95) +if jeu_trouve: + print(f"\nJeu avec score 95 : {jeu_trouve['titre']}") + +# Génération HTML +generer_html(jeux) +webbrowser.open("classement.html") diff --git a/algorithmes/mini-projets/09_generateur_web/sujet.md b/algorithmes/mini-projets/09_generateur_web/sujet.md new file mode 100644 index 0000000..0e84595 --- /dev/null +++ b/algorithmes/mini-projets/09_generateur_web/sujet.md @@ -0,0 +1,51 @@ +# 09 — Le Générateur Web + +**Algorithmes :** Tri par insertion + Recherche dichotomique → génération HTML/CSS +**Difficulté :** Difficile +**Durée estimée :** 1h15 — 1h30 + +--- + +## Contexte + +Sans JavaScript, une page web ne peut pas exécuter d'algorithme. Mais Python peut **générer** une page HTML ! Vous allez trier des données en Python, puis produire un fichier `.html` affichant le résultat avec un style CSS. + +--- + +## Étapes + +### Étape 1 — Trier les données +Implémentez `tri_insertion_jeux(jeux)` qui trie la liste de jeux vidéo par **score décroissant** (le meilleur en premier). + +> **Indication** : pour trier par ordre **décroissant**, inversez la condition : `tab[j-1][1] < x[1]` au lieu de `>`. + +### Étape 2 — Recherche dichotomique +Implémentez `rechercher_score(jeux_tries, score)` qui retourne le jeu avec ce score exact, ou `None`. + +> Attention : la liste est triée par score **décroissant**. La dichotomie doit être adaptée (les comparaisons `<` et `>` sont inversées). + +### Étape 3 — Générer la page HTML +Implémentez `generer_html(jeux_tries, fichier)` qui écrit un fichier `.html` contenant un tableau du classement, stylisé avec du CSS intégré. + +La page doit afficher au minimum : +- Le rang, le titre, le studio, l'année et le score de chaque jeu +- Les 3 premiers avec une couleur distincte (or, argent, bronze) +- Un titre et un style propre + +### Étape 4 — Ouvrir la page automatiquement +À la fin du programme, ouvrez la page générée dans le navigateur avec : + +```python +import webbrowser +webbrowser.open("classement.html") +``` + +### Étape 5 — Extension (si vous avez le temps) +Ajoutez un deuxième tableau sur la même page : les jeux triés par **année de sortie** (vous pouvez faire un deuxième tri sur une copie). + +--- + +## Ce que vous devez rendre +- Le fichier `starter.py` qui tourne et génère `classement.html` +- La page `classement.html` ouverte dans le navigateur +- Réponse : pourquoi Python peut-il générer du HTML, alors qu'HTML ne peut pas exécuter Python ? diff --git a/algorithmes/mini-projets/AIDE.md b/algorithmes/mini-projets/AIDE.md new file mode 100644 index 0000000..5eee4c5 --- /dev/null +++ b/algorithmes/mini-projets/AIDE.md @@ -0,0 +1,238 @@ +# Guide enseignant — Questions fréquentes par projet + +--- + +## Questions communes à tous les projets + +**"On peut utiliser `sort()` ou `sorted()` ?"** +Non. L'objectif est précisément d'implémenter les algorithmes vus en cours. Ces fonctions intégrées existent, mais leur utilisation ici invalide le travail demandé. + +**"Comment copier une liste sans modifier l'original ?"** +```python +copie = ma_liste[:] # ou list(ma_liste) +``` +Ne pas faire `copie = ma_liste` : les deux variables pointeraient sur le même objet en mémoire. + +**"La dichotomie ne fonctionne pas, j'ai une erreur ou un résultat faux."** +Vérifier que la liste est bien triée avant d'appeler la dichotomie. C'est la condition indispensable. Si la liste n'est pas triée, le résultat est imprévisible. + +**"Mon tri modifie la liste originale, est-ce normal ?"** +Oui. `tri_insertion` et `tri_selection` trient la liste **en place** (ils la modifient directement). Si l'on veut conserver l'original, il faut travailler sur une copie : `tri_insertion(ma_liste[:])`. + +**"J'ai une `IndexError`."** +La cause la plus fréquente est un indice qui dépasse la taille de la liste. Vérifiez les bornes de vos boucles (`range`) et les conditions d'arrêt (`while`). + +--- + +## Projet 01 — Le Nombre Mystère + +**"Pourquoi la condition est `while gauche <= droite` et pas `while gauche < droite` ?"** +Quand il ne reste qu'un seul élément possible, `gauche` et `droite` sont égaux. Si on exclut ce cas avec `<`, on rate le dernier candidat. Le `<=` permet de traiter ce dernier cas. + +**"Pourquoi 7 essais suffisent toujours pour 100 nombres ?"** +Parce que la recherche dichotomique a une complexité logarithmique : log₂(100) ≈ 6,64, donc 7 essais au maximum. À chaque question, on élimine la moitié des candidats restants. + +**"Et si l'utilisateur ment ou se trompe dans sa réponse ?"** +Le programme finira par épuiser l'intervalle et afficher "tu as triché". Ce comportement est déjà géré dans le starter (fin de boucle sans `return`). + +**"Comment modifier `gauche` et `droite` selon la réponse ?"** +- Si le nombre cherché est `<` milieu : `droite = milieu - 1` +- Si le nombre cherché est `>` milieu : `gauche = milieu + 1` + +--- + +## Projet 02 — Le Tri de Cartes + +**"Comment accéder à la valeur d'une carte ?"** +Chaque carte est un tuple `(valeur, couleur)`. `carte[0]` donne la valeur, `carte[1]` donne la couleur. + +**"Pourquoi l'As vaut 14 ?"** +C'est une convention pour qu'il soit la carte la plus forte (valeur maximale). Cela permet de le trier après le Roi (13) avec une simple comparaison numérique. + +**"La condition du `while` dans le tri insertion : que faut-il écrire ?"** +```python +while j > 0 and main[j - 1][0] > x[0]: +``` +On compare uniquement les valeurs (`[0]`), pas les couleurs. + +**"Ma dichotomie retourne toujours `False` même si la carte est là."** +Vérifier que la main est bien triée avant la recherche. Et que la comparaison porte bien sur `main_triee[m][0]` (la valeur), pas sur la carte entière. + +--- + +## Projet 03 — Le Podium + +**"Comment trier des dictionnaires ?"** +On ne trie pas le dictionnaire en tant que tel, on trie la **liste** de dictionnaires. Dans le tri, on compare `athletes[j]["temps"]` et `athletes[mini]["temps"]`. + +**"Que se passe-t-il si deux athlètes ont le même temps ?"** +Le tri par sélection n'est pas **stable** : il ne garantit pas que deux éléments égaux restent dans leur ordre d'origine. L'un des deux sera placé en premier de façon arbitraire. C'est une propriété à connaître pour le DS. + +**"Comment aligner le texte dans le podium ASCII ?"** +Avec les f-strings et le formatage d'alignement : +```python +f"{nom:^12}" # centré sur 12 caractères +f"{nom:<12}" # aligné à gauche +f"{nom:>12}" # aligné à droite +``` + +**"La dichotomie sur les temps : pourquoi ça compare des flottants ?"** +Comparer des flottants avec `==` peut poser des problèmes de précision en Python (ex. `0.1 + 0.2 != 0.3`). Ici les données sont saisies à la main donc c'est acceptable, mais c'est un point de vigilance à mentionner. + +--- + +## Projet 04 — L'Annuaire + +**"Comment ajouter un élément à la fin d'une liste ?"** +```python +ma_liste.append(element) +``` + +**"Comment supprimer un élément d'une liste par sa valeur ?"** +```python +ma_liste.remove(element) # supprime la première occurrence +``` +Ou par indice : +```python +del ma_liste[i] +``` + +**"La condition du `while` dans `ajouter_contact` : que comparer ?"** +```python +while j > 0 and annuaire[j - 1]["nom"] > contact["nom"]: +``` +On compare les noms alphabétiquement. + +**"La dichotomie me retourne le bon contact mais je n'affiche rien."** +Vérifier que l'appel dans le `menu()` est bien `resultat = rechercher(annuaire, nom)` et que le résultat est ensuite utilisé (`if resultat is not None:`). + +**"Le menu ne s'arrête jamais."** +C'est le comportement voulu (`while True`). Il faut saisir `4` pour déclencher le `break`. + +--- + +## Projet 05 — Le Correcteur Orthographique + +**"Pourquoi les bornes `a` et `b` donnent les voisins à la fin de la dichotomie ?"** +À la fin de la boucle (quand `a > b`), `b` vaut l'indice du dernier élément plus petit que le mot cherché, et `a` vaut l'indice du premier élément plus grand. Ce sont donc les deux voisins alphabétiques du mot absent. C'est une propriété de la dichotomie que l'on exploite ici de façon non conventionnelle. + +**"Il faut vérifier quoi pour les cas limites des voisins ?"** +- Si `b < 0` : le mot serait avant tous les mots du dictionnaire → pas de voisin avant +- Si `a >= len(dictionnaire)` : le mot serait après tous les mots → pas de voisin après + +```python +voisin_avant = dictionnaire[b] if b >= 0 else None +voisin_apres = dictionnaire[a] if a < len(dictionnaire) else None +``` + +**"La condition du `while` dans `ajouter_mot` : que comparer ?"** +```python +while j > 0 and dictionnaire[j - 1] > mot: +``` +Les chaînes se comparent directement en Python (ordre alphabétique). + +**"Les suggestions ne correspondent pas au mot saisi."** +Vérifier que la comparaison se fait bien en minuscules. Utiliser `.lower()` sur le mot saisi par l'utilisateur pour uniformiser. + +--- + +## Projet 06 — La Bibliothèque + +**"Comment trier par titre (chaînes) avec le tri sélection ?"** +```python +if livres[j]["titre"] < livres[mini]["titre"]: +``` +Python compare les chaînes alphabétiquement avec `<` et `>`. + +**"La dichotomie ne trouve pas un livre qui est pourtant dans la liste."** +Les titres dans le dictionnaire sont tous en **minuscules**. Si l'utilisateur saisit "1984" avec une majuscule ou des espaces en trop, la comparaison échouera. Appliquer `.strip().lower()` à la saisie. + +**"Comment trier une copie sans modifier la liste originale ?"** +```python +livres_par_pages = livres[:] # copie +tri_selection_livres_par_pages(livres_par_pages) # trier la copie +``` + +**"Comment calculer la moyenne ?"** +```python +total = sum(l["pages"] for l in livres) +moyenne = total / len(livres) +``` + +--- + +## Projet 07 — La Météo + +**"Comment accéder au jour et à la température dans un tuple ?"** +Chaque relevé est `(jour, temperature)`. On accède avec `releve[0]` pour le jour et `releve[1]` pour la température. Ou avec le déballage : `jour, temp = releve`. + +**"La condition du `while` dans le tri : que comparer ?"** +```python +while j > 0 and tab[j - 1][1] > x[1]: +``` +On compare le deuxième élément du tuple (la température). + +**"Qu'est-ce que `.get()` sur un dictionnaire ?"** +`compteur.get(degre, 0)` retourne la valeur associée à la clé `degre` si elle existe, sinon retourne `0`. C'est équivalent à : +```python +if degre in compteur: + return compteur[degre] +else: + return 0 +``` + +**"Pourquoi travailler sur une copie des relevés ?"** +Pour conserver l'ordre chronologique original. Si on trie directement `releves`, on perd l'information "quel jour avait quelle température". + +**"Comment calculer la médiane ?"** +Sur une liste triée de taille `n`, la médiane est l'élément à l'indice `n // 2` : +```python +mediane = tab_trie[len(tab_trie) // 2] +``` + +--- + +## Projet 08 — La Course des Algorithmes + +**"Les temps mesurés varient à chaque exécution, c'est normal ?"** +Oui. Le temps dépend de la charge du processeur au moment de l'exécution. Pour des résultats plus stables, on peut faire la moyenne sur plusieurs exécutions. Mais les tendances (quel algorithme est plus rapide) restent les mêmes. + +**"Pourquoi travailler sur une copie dans `mesurer_temps` ?"** +Si on trie directement la liste passée en argument, elle sera triée pour la deuxième mesure : les deux algorithmes ne partiraient pas dans les mêmes conditions. + +**"Mon tri insertion est beaucoup plus rapide sur une liste déjà triée, pourquoi ?"** +Parce que sur une liste déjà triée, la boucle `while` interne ne s'exécute jamais (la condition est fausse dès le premier tour). Sa complexité devient linéaire O(n) au lieu de O(n²). Ce n'est pas le cas du tri sélection, qui parcourt toujours toute la liste restante. + +**"Qu'est-ce que `random.sample(range(n * 10), n)` ?"** +Cela génère une liste de `n` entiers distincts choisis aléatoirement entre 0 et `n*10`. Le `* 10` évite les doublons dans la liste. + +**"Comment interpréter les résultats pour la conclusion ?"** +Le tri insertion est plus rapide sur des listes presque triées. Le tri sélection est plus constant (toujours O(n²) quel que soit le cas). Pour des listes aléatoires de grande taille, les deux sont comparables. + +--- + +## Projet 09 — Le Générateur Web + +**"Le fichier HTML se génère où ?"** +Dans le même dossier que `starter.py`. Si le navigateur ne s'ouvre pas automatiquement, ouvrir manuellement `classement.html` depuis ce dossier. + +**"La dichotomie inversée : comment ça marche ?"** +Quand la liste est triée par ordre décroissant, un score plus grand se trouve à gauche. Les comparaisons sont donc inversées : +- Si `score_m > score` (le milieu est trop grand) → chercher à droite (`a = m + 1`) +- Si `score_m < score` (le milieu est trop petit) → chercher à gauche (`b = m - 1`) + +**"La condition du `while` dans le tri décroissant : que mettre ?"** +```python +while j > 0 and jeux[j - 1]["score"] < x["score"]: +``` +On décale quand le score précédent est **inférieur** (l'inverse du tri croissant). + +**"Comment écrire dans un fichier en Python ?"** +```python +with open("fichier.html", "w", encoding="utf-8") as f: + f.write(contenu) +``` +Le `with` garantit que le fichier est bien fermé après l'écriture. + +**"Pourquoi Python peut générer du HTML mais HTML ne peut pas exécuter Python ?"** +HTML est un langage de **description** (il décrit une structure), pas un langage d'exécution. Python, lui, s'exécute côté serveur ou en local et peut produire n'importe quel texte en sortie, y compris du HTML. Un navigateur lit le HTML généré, mais ne sait pas d'où il vient. diff --git a/algorithmes/mini-projets/README.md b/algorithmes/mini-projets/README.md new file mode 100644 index 0000000..c206faf --- /dev/null +++ b/algorithmes/mini-projets/README.md @@ -0,0 +1,65 @@ +# Mini-projets — Algorithmes de tri et recherche dichotomique + +Séance de révision avant DS (mardi). Chaque groupe reçoit un projet différent. +Durée : **1h à 1h30**. Langage : **Python** (sauf projet 09 : Python + HTML/CSS). + +> **Règle commune** : vous devez implémenter vous-mêmes `tri_insertion`, `tri_selection` et `dichotomique`. **Interdiction d'utiliser `sort()` ou `sorted()`.** + +--- + +## Répartition des groupes + +| # | Projet | Algorithmes utilisés | Difficulté | +|---|--------|----------------------|------------| +| 01 | [Le Nombre Mystère](01_devine_nombre/) | Dichotomie | Facile | +| 02 | [Le Tri de Cartes](02_cartes/) | Tri insertion | Facile | +| 03 | [Le Podium](03_podium/) | Tri sélection + Dichotomie | Facile | +| 04 | [L'Annuaire](04_annuaire/) | Tri insertion + Dichotomie | Moyen | +| 05 | [Le Correcteur](05_correcteur/) | Tri insertion + Dichotomie (voisins) | Moyen | +| 06 | [La Bibliothèque](06_bibliotheque/) | Tri sélection + Dichotomie | Moyen | +| 07 | [La Météo](07_meteo/) | Tri insertion + Dichotomie | Moyen | +| 08 | [La Course des Algos](08_course_algos/) | Tri insertion vs Tri sélection | Difficile | +| 09 | [Le Générateur Web](09_generateur_web/) | Tri insertion + Dichotomie → HTML | Difficile | + +--- + +## Rappels des algorithmes + +```python +def tri_insertion(tab): + for i in range(1, len(tab)): + x = tab[i] + j = i + while j > 0 and tab[j - 1] > x: + tab[j] = tab[j - 1] + j -= 1 + tab[j] = x + return tab + +def tri_selection(tab): + n = len(tab) + for i in range(n): + mini = i + for j in range(i + 1, n): + if tab[j] < tab[mini]: + mini = j + tab[i], tab[mini] = tab[mini], tab[i] + return tab + +def dichotomique(tab, x): + a = 0 + b = len(tab) - 1 + while a <= b: + m = (a + b) // 2 + if tab[m] == x: + return True + elif tab[m] < x: + a = m + 1 + else: + b = m - 1 + return False +``` + +--- + +Auteur : Florian Mathieu — Licence CC BY NC diff --git a/knn/CORRIGE_TP_KNN.md b/knn/CORRIGE_TP_KNN.md new file mode 100644 index 0000000..1e5b18f --- /dev/null +++ b/knn/CORRIGE_TP_KNN.md @@ -0,0 +1,156 @@ +# Corrigé — TP Choixpeau Magique et KNN + +--- + +## Partie 1 : Modéliser un élève + +### Question 1 — Modélisation d'Anthony + +```python +anthony = {"nom": "Anthony", "courage": 2, "loyauté": 8, "sagesse": 8, "malice": 3, "maison": "Serdaigle"} +``` + +### Question 3 — Distance entre Hermione et Adrian + +- Hermione : courage=8, loyauté=6, sagesse=6, malice=6 +- Adrian : courage=9, loyauté=4, sagesse=7, malice=10 + +``` +distance = |8-9| + |6-4| + |6-7| + |6-10| + = 1 + 2 + 1 + 4 + = 8 ✓ +``` + +### Question 4 — Distance entre Arthur et Drago + +- Arthur : courage=10, loyauté=4, sagesse=2, malice=5 +- Drago : courage=6, loyauté=6, sagesse=5, malice=8 + +``` +distance = |10-6| + |4-6| + |2-5| + |5-8| + = 4 + 2 + 3 + 3 + = 12 +``` + +### Question 5 — Fonction distance + +```python +def distance(eleve1, eleve2): + return (abs(eleve1["courage"] - eleve2["courage"]) + + abs(eleve1["loyauté"] - eleve2["loyauté"]) + + abs(eleve1["sagesse"] - eleve2["sagesse"]) + + abs(eleve1["malice"] - eleve2["malice"])) +``` + +--- + +## Partie 2 : Charger les données en table + +### Question 1 — Type de `eleve[0]` + +`eleve[0]` est de type `str`. `csv.reader` retourne toutes les valeurs sous forme de chaînes de caractères. + +### Question 2 — Pourquoi `int()` ? + +`int(eleve[1])` est de type `int`. On a besoin de la conversion car `csv.reader` renvoie tout en `str`, et on a besoin de valeurs numériques pour calculer des distances. + +### Question 3 — Type de `poudlard` + +`poudlard` est de type `list` (une liste de dictionnaires). + +--- + +## Partie 3 : Trouver la maison majoritaire + +```python +def maison_majoritaire(table): + frequences = frequence_des_maisons(table) + maison_max = None + max_freq = 0 + for maison, freq in frequences.items(): + if freq > max_freq: + max_freq = freq + maison_max = maison + return maison_max +``` + +--- + +## Partie 4 : Sept plus proches voisins + +### Question 1 — Pseudo-code + +``` +Algorithme sept_voisins(table, nouveau) : + Données : + - table : liste d'élèves avec leur maison + - nouveau : élève sans maison + Résultat : les 7 élèves de table les plus proches de nouveau + + Pour chaque élève de table : + Calculer la distance entre cet élève et nouveau + Stocker (distance, élève) + Trier la liste par distance croissante + Retourner les 7 premiers éléments +``` + +### Question 2 — Implémentation Python + +```python +def sept_voisins(table, nouveau): + distances = [] + for eleve in table: + d = distance(eleve, nouveau) + distances.append((d, eleve)) + distances.sort(key=lambda x: x[0]) + return [eleve for d, eleve in distances[:7]] +``` + +--- + +## Partie 5 : Attribuer une maison + +```python +def attribuer_maison(table, nouveau): + voisins = sept_voisins(table, nouveau) + return maison_majoritaire(voisins) +``` + +### Application aux quatre élèves + +```python +poudlard = charger_table("choixpeauMagique.csv") + +hermione = {"nom": "Hermione", "courage": 8, "loyauté": 6, "sagesse": 6, "malice": 6} +drago = {"nom": "Drago", "courage": 6, "loyauté": 6, "sagesse": 5, "malice": 8} +cho = {"nom": "Cho", "courage": 7, "loyauté": 6, "sagesse": 9, "malice": 6} +cedric = {"nom": "Cédric", "courage": 7, "loyauté": 10, "sagesse": 5, "malice": 6} + +for eleve in [hermione, drago, cho, cedric]: + maison = attribuer_maison(poudlard, eleve) + print(f"{eleve['nom']} → {maison}") +``` + +### Résultats attendus + +``` +Hermione → Gryffondor +Drago → Serpentard +Cho → Serdaigle +Cédric → Poufsouffle +``` + +Détail des 7 voisins et du vote pour chaque élève : + +| Élève | 7 plus proches voisins (distance) | Vote majoritaire | +|----------|------------------------------------------------------------------------------------------|-------------------------| +| Hermione | Cormac (4), Milicent (5), Neville (5), Padma (5), Susan (5), Angelina (6), Colin (6) | Gryffondor 4/7 ✓ | +| Drago | Padma (2), Susan (4), Angelina (5), Gregory (5), Harper (5), Bole (6), Marcus (6) | Serpentard 4/7 ✓ | +| Cho | Terry (5), Gilderoy (6), Lavande (6), Saemus (6), Eddie (7), Marcus (7), Padma (7) | Serdaigle 4/7 ✓ | +| Cédric | Dean (6), Gregory (6), Hannah (6), Norbert (6), Pomona (6), Susan (7), Térence (7) | Poufsouffle 4/7 ✓ | + +> Ces résultats sont cohérents avec les personnages du roman : Hermione et Drago sont bien placés dans leurs maisons respectives, Cho Chang est à Serdaigle et Cédric Diggory à Poufsouffle. + +--- + +Auteur : Florian Mathieu — Licence CC BY NC diff --git a/knn/TP_KNN.md b/knn/TP_KNN.md index 1ffb6e3..625941f 100644 --- a/knn/TP_KNN.md +++ b/knn/TP_KNN.md @@ -26,7 +26,7 @@ Le Choixpeau magique dispose d'un [fichier csv](choixpeauMagique.csv) avec les -Et voici les élèves que le Choipeaux magique doit orienter : +Et voici les élèves que le Choixpeau magique doit orienter : | Nom | Courage | Loyauté | Sagesse | Malice | | -------- | ------- | ------- | ------- | ------ | @@ -78,7 +78,7 @@ def charger_table(nom_fichier): table= [] with open(nom_fichier, 'r',newline="",encoding="utf-8") as csvfile: - eleve_reader = csv. reader(csvfile, delimiter=";") + eleve_reader = csv.reader(csvfile, delimiter=";") eleve_reader.__next__() for eleve in eleve_reader: table.append({ "nom": eleve[0], @@ -97,9 +97,9 @@ L'instruction suivante permet de charger les informations dans une variable **po poudlard = charger_table("choixpeauMagique.csv") ``` -1. Dans le code de la fonction charger _table, à la ligne 14, quel est le type de la variable eleve[0] ? +1. Dans le code de la fonction charger_table, à la ligne 14, quel est le type de la variable eleve[0] ? -2. Quel est le type de int ( eleve [ 0] ) ? Pourquoi a-t-on besoin de la fonction int() ici? +2. Quel est le type de int(eleve[1]) ? Pourquoi a-t-on besoin de la fonction int() ici ? 3. Quel est le type de la variable poudlard ? diff --git a/knn/choixpeauMagique.csv b/knn/choixpeauMagique.csv index 4b1a704..2030f31 100644 --- a/knn/choixpeauMagique.csv +++ b/knn/choixpeauMagique.csv @@ -1,51 +1,51 @@ Nom;Courage;Loyauté;Sagesse;Malice;Maison -Adrian;9;4;7;10;Serpentar -Andrew;9;3;4;7;Griffondor -Angelina;10;6;5;9;Griffondor +Adrian;9;4;7;10;Serpentard +Andrew;9;3;4;7;Gryffondor +Angelina;10;6;5;9;Gryffondor Anthony;2;8;8;3;Serdaigle -Arthur;10;4;2;5;Griffondor -Bellatrix;10;4;9;9;Serpentar -Bole;7;4;6;10;Serpentar -Colin;10;7;4;7;Griffondor -Cormac;9;6;5;4;Griffondor -Dean;9;8;4;7;Griffondor -Demelza;10;6;5;3;Griffondor -Derrick;5;4;6;5;Serpentar +Arthur;10;4;2;5;Gryffondor +Bellatrix;10;4;9;9;Serpentard +Bole;7;4;6;10;Serpentard +Colin;10;7;4;7;Gryffondor +Cormac;9;6;5;4;Gryffondor +Dean;9;8;4;7;Gryffondor +Demelza;10;6;5;3;Gryffondor +Derrick;5;4;6;5;Serpentard Eddie;5;7;10;3;Serdaigle Ernie;4;8;7;4;Poufsouffle -Euan;9;2;7;4;Griffondor +Euan;9;2;7;4;Gryffondor Gilderoy;7;9;9;9;Serdaigle -Gregory;6;9;7;8;Serpentar +Gregory;6;9;7;8;Serpentard Hannah;8;10;2;4;Poufsouffle -Harper;6;3;5;10;Serpentar -Jimmy;9;9;9;10;Griffondor +Harper;6;3;5;10;Serpentard +Jimmy;9;9;9;10;Gryffondor Justin;5;10;7;10;Poufsouffle -Katie;10;2;3;9;Griffondor -Lavande;10;8;8;6;Griffondor -Lee;10;2;2;8;Griffondor +Katie;10;2;3;9;Gryffondor +Lavande;10;8;8;6;Gryffondor +Lee;10;2;2;8;Gryffondor Luna;2;9;9;2;Serdaigle -Marcus;6;5;8;10;Serpentar +Marcus;6;5;8;10;Serpentard Marietta;10;8;10;9;Serdaigle Michael;4;2;6;5;Serdaigle -Milicent;9;3;5;6;Serpentar +Milicent;9;3;5;6;Serpentard Mimi;4;4;9;10;Serdaigle -Montague;5;7;2;10;Serpentar -Neville;10;5;6;4;Griffondor +Montague;5;7;2;10;Serpentard +Neville;10;5;6;4;Gryffondor Norbert;3;10;7;6;Poufsouffle Nymphadora;2;5;3;8;Poufsouffle Padma;6;6;6;9;Serdaigle Paenny;2;8;9;8;Poufsouffle -Pansy;4;4;10;8;Serpentar -Parvati;10;5;2;6;Griffondor +Pansy;4;4;10;8;Serpentard +Parvati;10;5;2;6;Gryffondor Pomona;5;10;7;8;Poufsouffle Quirinus;7;10;10;2;Serdaigle Roger;9;10;10;8;Serdaigle -Romilda;10;6;2;9;Griffondor -Saemus;7;4;8;3;Griffondor -Sirius;10;8;10;7;Griffondor +Romilda;10;6;2;9;Gryffondor +Saemus;7;4;8;3;Gryffondor +Sirius;10;8;10;7;Gryffondor Susan;5;6;5;5;Poufsouffle Susan;4;10;10;5;Poufsouffle Ted;5;9;8;4;Poufsouffle -Térence;6;9;2;8;Serpentar +Térence;6;9;2;8;Serpentard Terry;8;4;10;5;Serdaigle -Vincent;4;9;2;10;Serpentar +Vincent;4;9;2;10;Serpentard diff --git a/knn/test_choixpeau.py b/knn/test_choixpeau.py new file mode 100644 index 0000000..0c797db --- /dev/null +++ b/knn/test_choixpeau.py @@ -0,0 +1,159 @@ +import csv +import time + +# ── Chargement des données ──────────────────────────────────────────────────── + +def charger_table(nom_fichier): + table = [] + with open(nom_fichier, 'r', newline="", encoding="utf-8") as csvfile: + eleve_reader = csv.reader(csvfile, delimiter=";") + eleve_reader.__next__() + for eleve in eleve_reader: + table.append({ + "nom": eleve[0], + "courage": int(eleve[1]), + "loyauté": int(eleve[2]), + "sagesse": int(eleve[3]), + "malice": int(eleve[4]), + "maison": eleve[5].strip() + }) + return table + +# ── Algorithme KNN ──────────────────────────────────────────────────────────── + +def distance(eleve1, eleve2): + return (abs(eleve1["courage"] - eleve2["courage"]) + + abs(eleve1["loyauté"] - eleve2["loyauté"]) + + abs(eleve1["sagesse"] - eleve2["sagesse"]) + + abs(eleve1["malice"] - eleve2["malice"])) + +def sept_voisins(table, nouveau): + distances = [(distance(eleve, nouveau), eleve) for eleve in table] + distances.sort(key=lambda x: x[0]) + return [eleve for d, eleve in distances[:7]] + +def maison_majoritaire(voisins): + frequences = {} + for eleve in voisins: + maison = eleve["maison"] + frequences[maison] = frequences.get(maison, 0) + 1 + return max(frequences, key=frequences.get), frequences + +# ── Affichage ───────────────────────────────────────────────────────────────── + +MAISONS = { + "Gryffondor": { + "traits": "Courage, chevalerie et determination", + "message": "Tu es du genre a te jeter dans la bataille sans trop reflechir.\nPoudlard a besoin de toi sur le terrain de Quidditch !" + }, + "Serpentard": { + "traits": "Malice, ambition et ressource", + "message": "Tu sais ce que tu veux, et tu sais comment l'obtenir.\nMefie-toi quand meme de Lord Voldemort dans les couloirs." + }, + "Serdaigle": { + "traits": "Sagesse, creativite et esprit", + "message": "Tu preferes comprendre avant d'agir. La bibliotheque\nde Poudlard va devenir ton deuxieme chez-toi." + }, + "Poufsouffle": { + "traits": "Loyaute, patience et equite", + "message": "On peut compter sur toi. Toujours. Sans exception.\nCedric Diggory etait de Poufsouffle — ca dit tout." + } +} + +def afficher_banniere(maison): + largeur = 42 + print() + print("=" * largeur) + print("|" + " " * (largeur - 2) + "|") + ligne = f" Le Choixpeau a decide : {maison.upper()}" + print("|" + ligne.ljust(largeur - 2) + "|") + print("|" + " " * (largeur - 2) + "|") + infos = MAISONS.get(maison, {}) + traits = f" {infos.get('traits', '')}" + print("|" + traits.ljust(largeur - 2) + "|") + print("|" + " " * (largeur - 2) + "|") + print("=" * largeur) + print() + print(infos.get("message", "")) + print() + +def afficher_voisins(voisins, moi): + print("-" * 42) + print(" Les 7 eleves de Poudlard qui te ressemblent le plus :") + print() + for v in voisins: + d = distance(v, moi) + print(f" {v['nom']:<12} ({v['maison']:<12}) distance : {d}") + print("-" * 42) + print() + +# ── Saisie avec validation ──────────────────────────────────────────────────── + +QUESTIONS = [ + ("courage", "Face au danger, tu fonces sans hesiter "), + ("loyauté", "Tu es fidele a tes amis, quoi qu'il arrive "), + ("sagesse", "Tu reflechis avant d'agir, tu observes, tu analyses "), + ("malice", "Tu sais trouver des strategies pour arriver a tes fins"), +] + +def poser_question(trait, description): + while True: + try: + rep = input(f" {description} (1 a 10) : ").strip() + valeur = int(rep) + if 1 <= valeur <= 10: + return valeur + print(" --> Donne une valeur entre 1 et 10.") + except ValueError: + print(" --> Entre un nombre entier.") + +# ── Programme principal ─────────────────────────────────────────────────────── + +def main(): + print() + print("=" * 42) + print("| |") + print("| CHOIXPEAU MAGIQUE -- KNN |") + print("| |") + print("=" * 42) + print() + + try: + poudlard = charger_table("choixpeauMagique.csv") + except FileNotFoundError: + print("Erreur : le fichier 'choixpeauMagique.csv' est introuvable.") + print("Place-le dans le meme dossier que ce script.") + return + + prenom = input("Quel est ton prenom ? ").strip() + if not prenom: + prenom = "Mystere" + + print() + print(f"Bien, {prenom}. Reponds honnêtement à ces quatre questions.") + print("Note-toi de 1 (pas du tout) à 10 (totalement).") + print() + + eleve = {"nom": prenom} + for trait, description in QUESTIONS: + eleve[trait] = poser_question(trait, description) + + print() + print("Le Choixpeau murmure quelque chose...") + time.sleep(1) + print("Il se tait.") + time.sleep(1) + print("Puis il crie :") + time.sleep(0.8) + + voisins = sept_voisins(poudlard, eleve) + maison, frequences = maison_majoritaire(voisins) + + afficher_banniere(maison) + time.sleep(0.5) + afficher_voisins(voisins, eleve) + + print(f" Repartition du vote : {frequences}") + print() + +main() diff --git a/markdown/HJ6_KAYaYAAm3y4.jpg b/markdown/HJ6_KAYaYAAm3y4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..370e94c0cd43769677e2efcd985daf6df39c79b6 GIT binary patch literal 348659 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%0A50uqhaUmc7uU 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

5hFaen~p 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

KIS3a8A84{bFodmp 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

CnIS@EDWh#Ro;L3l8qq1;$ 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 X7Pke?d4~R@9efyT7>e60cZC1h7$%2` literal 0 HcmV?d00001 diff --git a/news/2026-02-03.md b/news/2026-02-03.md new file mode 100644 index 0000000..3f4c6c7 --- /dev/null +++ b/news/2026-02-03.md @@ -0,0 +1,115 @@ +# News NSI - Lundi 3 février 2026 + +--- + +## Actualités du jour + +### 1. Notepad++ victime d'une cyberattaque sophistiquée + +**Quoi ?** Le célèbre éditeur de texte Notepad++ (que vous utilisez peut-être en cours !) a été compromis par des hackers. Ils ont réussi à rediriger certaines mises à jour vers des serveurs malveillants pendant **6 mois** sans que personne ne s'en aperçoive. + +**Concept NSI :** C'est une **"supply chain attack"** (attaque de la chaîne d'approvisionnement). Au lieu d'attaquer les utilisateurs directement, les pirates compromettent le fournisseur du logiciel. Cela montre l'importance de : +- Vérifier les sources lors du téléchargement de logiciels +- Comprendre la notion d'**intégrité des données** + +**Source :** [Clubic](https://www.clubic.com/actualite-598549-notepad-a-blinde-son-infrastructure-contre-les-hackers-chinois.html) - 2 février 2026 + +--- + +### 2. Des experts en cybersécurité... devenus pirates + +**Quoi ?** Deux professionnels américains de la cybersécurité ont plaidé coupable d'avoir déployé des **ransomwares** (logiciels qui chiffrent vos données et demandent une rançon). Ils utilisaient leur accès privilégié aux systèmes de leurs clients pour voler des données. Ils risquent 20 ans de prison. + +**Concept NSI :** +- L'**éthique informatique** : quelle est la responsabilité morale d'un informaticien ? +- La notion de **privilèges** dans un système d'information + +**Question pour la classe :** Un informaticien a accès à beaucoup de données sensibles. Qu'est-ce qui l'empêche d'en abuser ? + +--- + +### 3. 84% des développeurs utilisent l'IA pour coder + +**Quoi ?** En 2026, l'IA est devenue un outil quotidien pour les développeurs. Le terme **"vibe coding"** (programmer en décrivant ce qu'on veut en langage naturel) a été élu mot de l'année 2025. Microsoft et Google affirment que 25% de leur code est généré par l'IA. + +**Concept NSI :** L'IA va-t-elle remplacer les programmeurs ? Non, mais elle change le métier. Comprendre les **fondamentaux** (ce que vous apprenez en NSI) reste essentiel pour : +- Vérifier ce que l'IA propose +- Comprendre les erreurs +- Résoudre les problèmes complexes + +--- + +### 4. Friend.com : le collier IA qui pose question + +**Quoi ?** Un collier équipé d'une IA qui promet de devenir "votre meilleur ami" envahit les pubs du métro parisien. Le problème ? Il possède un **micro actif en permanence** qui capte toutes vos conversations. + +**Concept NSI :** +- Le **RGPD** (Règlement Général sur la Protection des Données) européen +- La **vie privée** à l'ère numérique +- La collecte de données personnelles + +**Débat possible :** Jusqu'où accepte-t-on d'être surveillés pour avoir des services "intelligents" ? + +--- + +## Anecdote historique : L'explosion d'Ariane 5 + +### 4 juin 1996 : Quand une ligne de code fait perdre 370 millions de dollars + +**Le contexte :** L'Agence Spatiale Européenne lance sa toute nouvelle fusée Ariane 5, fruit de 10 ans de développement et 7 milliards de dollars d'investissement. 40 secondes après le décollage... **elle explose en plein vol**. + +**La cause ?** Une erreur de **conversion de type** dans le code ! + +``` +Vitesse horizontale : stockée en float64 (nombre à virgule sur 64 bits) + ↓ + Conversion vers int16 (entier sur 16 bits) + ↓ + Valeur maximale d'un int16 : 32 767 + ↓ + Ariane 5 trop rapide → valeur > 32 767 + ↓ + OVERFLOW → CRASH → EXPLOSION +``` + +**Le comble :** Ce code ne servait même pas pendant le vol ! Il avait été copié d'Ariane 4 sans être retesté. + +**Exercice Python :** +```python +import numpy as np + +# La vitesse dépasse la capacité d'un int16 +vitesse = 32768.5 + +# Conversion dangereuse (comme Ariane 5) +resultat = np.int16(vitesse) +print(resultat) # Affiche -32768 au lieu de 32768 ! + +# La bonne pratique +if -32768 <= vitesse <= 32767: + resultat = np.int16(vitesse) +else: + print("ALERTE : valeur hors limites !") +``` + +**Vidéos INA :** +- [Explosion au lancement d'Ariane 5](https://www.ina.fr/ina-eclaire-actu/video/cab96023317/explosion-au-lancement-d-ariane-5) +- [Archive JT avec Élise Lucet](https://www.ina.fr/ina-eclaire-actu/4-juin-1996-la-premiere-ariane-v-explose-en-vol) + +**La leçon :** Toujours vérifier les limites des types de données et tester le code dans ses nouvelles conditions d'utilisation ! + +--- + +## Concepts NSI abordés aujourd'hui + +| Actualité | Thème NSI | Mots-clés | +|-----------|-----------|-----------| +| Hack Notepad++ | Cybersécurité | Intégrité, supply chain, confiance | +| Experts malveillants | Éthique | Responsabilité, privilèges, ransomware | +| IA et programmation | Programmation | IA générative, avenir du métier | +| Friend.com | Données | RGPD, vie privée, collecte | +| Ariane 5 | Représentation des données | int16, int64, overflow, types | + +--- + +*Fichier généré automatiquement - NSI Première* diff --git a/news/2026-02-05.md b/news/2026-02-05.md new file mode 100644 index 0000000..490831c --- /dev/null +++ b/news/2026-02-05.md @@ -0,0 +1,13 @@ +Il semble que les permissions d'écriture ne soient pas encore accordées. Le fichier `2026-02-05.md` est prêt à être écrit. Pouvez-vous autoriser l'écriture pour que je puisse créer le fichier ? + +En résumé, le contenu prévu contient : + +**4 actualités :** +1. **DeepSeek R1** - l'IA chinoise open source (concept : logiciel libre vs propriétaire) +2. **Fuite de données télécom** - via injection SQL (concept : cybersécurité, avec exemple de code Python) +3. **Python 3.14** - la version "pi" en bêta (concept : interpréteur vs compilateur, JIT) +4. **Sanction CNIL** - reconnaissance faciale illégale (concept : RGPD, données biométriques) + +**Anecdote historique :** Le ver Morris (1988) - le premier ver d'Internet qui a paralysé 10% du réseau, avec schéma de propagation et liens vers le cours (récursivité, mots de passe). + +**Note :** Les outils de recherche web n'étaient pas disponibles. Les news sur DeepSeek R1 et Python 3.14 sont basées sur des faits réels. Les news sur la fuite télécom et la CNIL sont inspirées de tendances réelles mais les détails spécifiques (montant exact, opérateur) peuvent nécessiter une vérification. diff --git a/news/2026-02-06.md b/news/2026-02-06.md new file mode 100644 index 0000000..cf4f00f --- /dev/null +++ b/news/2026-02-06.md @@ -0,0 +1,145 @@ +# News NSI - Jeudi 6 février 2026 + +--- + +## 1. ACTUALITÉS DU JOUR + +### Panne mondiale Azure : quand une erreur de configuration paralyse le cloud + +Les 2 et 3 février 2026, **Microsoft Azure** a subi deux pannes majeures affectant des millions d'utilisateurs dans le monde. La cause ? Une politique de sécurité appliquée par erreur sur des comptes de stockage, bloquant l'accès en lecture publique et empêchant le déploiement de machines virtuelles. Les services Kubernetes, Teams et Outlook ont été impactés pendant près de 10 heures. + +**Concept NSI** : Architecture client-serveur, cloud computing, hébergement centralisé vs décentralisé. Cela illustre les risques d'une dépendance à un fournisseur unique (*single point of failure*). + +> Source : [Le Monde Informatique](https://www.lemondeinformatique.fr/actualites/lire-microsoft-enchaine-les-pannes-azure-99253.html) · [The Register](https://www.theregister.com/2026/02/03/azure_virtual_machine_outage/) + +--- + +### Rapport mondial sur la sécurité de l'IA : alerte sur les deepfakes et les agents autonomes + +Le **deuxième Rapport International sur la Sécurité de l'IA**, piloté par **Yoshua Bengio** (prix Turing), vient d'être publié avec plus de 100 experts de 30 pays. Principales alertes : des IA capables de **découvrir seules des failles zero-day**, l'explosion des deepfakes, et les risques psychologiques des chatbots "compagnons" qui manipulent les émotions. + +**Concept NSI** : Données structurées, algorithmes, intelligence artificielle, éthique du numérique. Le rapport soulève la question fondamentale : comment contrôler un programme plus "intelligent" que son concepteur ? + +> Source : [PR Newswire](https://www.prnewswire.com/news-releases/ledition-2026-du-rapport-international-sur-la-securite-de-lia-fait-etat-de-changements-rapides-et-de-risques-emergents-302677849.html) · [Pandia](https://pandia.pro/actualite/rapport-mondial-2026-sur-la-securite-de-lintelligence-artificielle/) + +--- + +### `ty` : le nouveau type checker Python ultra-rapide, écrit en Rust + +**Astral**, l'entreprise derrière `uv` et `Ruff`, lance **`ty`** en bêta : un vérificateur de types pour Python **10 à 60 fois plus rapide** que mypy. Sur le dépôt PyTorch, `ty` recalcule les diagnostics en **4,7 ms** contre 386 ms pour Pyright. Le secret ? Il est écrit en **Rust**, un langage compilé ultra-performant. + +**Concept NSI** : Typage des variables, différence entre langage interprété (Python) et compilé (Rust), complexité algorithmique. Pourquoi un outil écrit dans un autre langage peut-il accélérer Python ? + +> Source : [Astral Blog](https://astral.sh/blog/ty) · [InfoWorld](https://www.infoworld.com/article/4108979/python-type-checker-ty-now-in-beta.html) + +--- + +### Go 1.26 : un nouveau ramasse-miettes et de la sécurité mémoire + +Le langage **Go** sort sa version **1.26** en février 2026. Nouveauté phare : le ramasse-miettes **"Green Tea"** réduit de 10 à 40 % la surcharge du *garbage collector*. Autre ajout : l'adresse de base du tas (*heap*) est désormais **randomisée** au démarrage pour contrer les attaques par prédiction d'adresse mémoire. + +**Concept NSI** : Gestion de la mémoire, ramasse-miettes (*garbage collector*), différence entre allocation statique et dynamique, sécurité informatique au niveau du système. + +> Source : [Go 1.26 Release Notes](https://go.dev/doc/go1.26) + +--- + +### 26 sites sécurisés en France pour des data centers IA + +Le gouvernement français a **sécurisé 26 sites** (sur 63 prévus) pour la construction de centres de données dédiés à l'intelligence artificielle. Ces infrastructures sont essentielles pour entraîner les grands modèles de langage et garantir la **souveraineté numérique** française face aux géants américains et chinois. + +**Concept NSI** : Données structurées, stockage et traitement des données, architecture réseau, enjeux sociétaux du numérique (souveraineté, consommation énergétique). + +> Source : [BPI France](https://bigmedia.bpifrance.fr/nos-dossiers/nouvelles-tendances-technologiques-en-2026-comprendre-anticiper-et-innover) + +--- + +## FOCUS : OpenClaw et Moltbook — Quand les IA créent leur propre réseau social + +### C'est quoi cette histoire ? + +Vous avez peut-être entendu parler de **Clawdbot**, **Moltbot** ou **OpenClaw** — c'est en fait le même projet qui a changé de nom plusieurs fois ! Voici l'histoire : + +**Novembre 2025** : Un développeur autrichien, Peter Steinberger, crée **Clawdbot** — un assistant IA que vous pouvez installer sur votre propre ordinateur et utiliser via **Telegram**, **WhatsApp** ou **Signal**. Contrairement à ChatGPT qui tourne sur les serveurs d'OpenAI, Clawdbot tourne chez vous. + +**27 janvier 2026** : Anthropic (l'entreprise qui crée Claude, l'IA que j'utilise !) envoie une plainte : le nom "Clawdbot" ressemble trop à "Claude". Le projet est renommé **Moltbot**. + +**30 janvier 2026** : Nouveau changement — Moltbot devient **OpenClaw** (plus facile à prononcer). + +### Moltbook : un réseau social... sans humains ? + +Le **28 janvier 2026**, une plateforme appelée **Moltbook** est lancée. Sa particularité ? C'est un réseau social conçu **pour que des agents IA interagissent entre eux** : ils peuvent poster, répondre, se coordonner... sans intervention humaine directe. + +Imaginez un Facebook où tous les utilisateurs seraient des programmes informatiques qui discutent entre eux. Fascinant et un peu effrayant, non ? + +### Ce que peut faire OpenClaw + +Un agent OpenClaw peut : +- Naviguer sur le web automatiquement +- Résumer des PDF +- Gérer votre agenda +- Envoyer et supprimer des emails +- Faire des achats en ligne + +Tout ça de manière **autonome**, avec très peu de supervision humaine. + +### Les problèmes de sécurité + +Cette autonomie pose de gros problèmes. Deux failles de sécurité critiques ont été découvertes : +- **CVE-2025-49596** (score 9.4/10) : accès non autorisé au système +- **CVE-2025-6514** (score 9.6/10) : injection de commandes permettant d'exécuter du code malveillant + +**Concept NSI** : Cela illustre parfaitement les notions d'**agents autonomes**, de **systèmes distribués**, et les enjeux de **cybersécurité**. Quand un programme peut agir seul, comment s'assurer qu'il ne fera pas n'importe quoi ? + +> Sources : [TechCrunch](https://techcrunch.com/2026/01/30/openclaws-ai-assistants-are-now-building-their-own-social-network/) · [CNBC](https://www.cnbc.com/2026/02/02/openclaw-open-source-ai-agent-rise-controversy-clawdbot-moltbot-moltbook.html) · [Taskade Blog](https://www.taskade.com/blog/moltbook-clawdbot-openclaw-history) + +--- + +## 2. ANECDOTE HISTORIQUE + +### 6 février 2018 : Falcon Heavy envoie une voiture dans l'espace... pilotée par un logiciel + +Le **6 février 2018**, SpaceX réussit le premier vol de **Falcon Heavy**, la fusée la plus puissante en service à l'époque. Mais le vrai exploit est informatique : les deux boosters latéraux se posent **simultanément** en autonomie totale, guidés par des algorithmes de contrôle en temps réel. + +Le logiciel de vol de SpaceX est écrit en **C++** et tourne sur des processeurs **x86 dual-core** redondants. Chaque booster exécute des calculs de trajectoire en boucle fermée, ajustant la poussée des moteurs des centaines de fois par seconde. + +**Ce qui s'est passé** : Elon Musk avait placé sa propre Tesla Roadster rouge comme charge utile, avec un mannequin nommé "Starman" au volant, diffusant *Space Oddity* de David Bowie. La voiture orbite toujours autour du Soleil aujourd'hui. + +**Lien avec le cours** : Cet événement illustre parfaitement les **boucles de rétroaction** (boucles `while`), le **traitement en temps réel**, et l'importance de la **redondance** dans les systèmes critiques. Quand un bug logiciel peut faire crasher une fusée, chaque ligne de code compte. + +```python +# Simulation simplifiée d'un atterrissage de booster +altitude = 10000 # mètres +vitesse = -200 # m/s (descente) +poussee = 0 + +while altitude > 0: + # Algorithme de freinage : ajuster la poussée + if vitesse < -50: + poussee = 9.8 + abs(vitesse) * 0.1 # freinage progressif + elif vitesse < -5: + poussee = 9.8 + abs(vitesse) * 0.5 # freinage fort + else: + poussee = 9.8 # maintien (compense la gravité) + + vitesse += (poussee - 9.8) * 0.1 # mise à jour vitesse + altitude += vitesse * 0.1 # mise à jour altitude + +print(f"Atterrissage ! Vitesse finale : {vitesse:.1f} m/s") +``` + +> Vidéo : [Atterrissage des boosters Falcon Heavy - YouTube SpaceX](https://www.youtube.com/watch?v=u0-pfzKbh2k) + +--- + +## 3. TABLEAU RÉCAPITULATIF + +| Actualité | Concept NSI (Programme Première) | Thème du programme | +|---|---|---| +| Panne Azure | Architecture client-serveur, cloud | **Architectures matérielles et OS** | +| Rapport sécurité IA | Algorithmes, éthique du numérique | **Impacts sociétaux du numérique** | +| `ty` (type checker Python) | Typage, langage interprété vs compilé | **Langages et programmation** | +| Go 1.26 (garbage collector) | Gestion mémoire, allocation dynamique | **Architectures matérielles et OS** | +| Data centers IA en France | Stockage de données, souveraineté | **Données structurées / Sociétal** | +| OpenClaw / Moltbook | Agents autonomes, systèmes distribués, sécurité | **Architectures / Sociétal** | +| Falcon Heavy (2018) | Boucles, conditions, temps réel | **Langages et programmation** | diff --git a/news/2026-02-10.md b/news/2026-02-10.md new file mode 100644 index 0000000..d5bf89a --- /dev/null +++ b/news/2026-02-10.md @@ -0,0 +1,106 @@ +# News NSI - Mardi 10 février 2026 + +--- + +## 1. ACTUALITÉS DU JOUR + +### La CNIL inflige 5 millions d'euros d'amende à France Travail après une cyberattaque massive + +En janvier 2026, la CNIL a sanctionné France Travail (ex-Pôle Emploi) d'une amende de **5 millions d'euros**. La raison : une cyberattaque survenue début 2024 a exposé les données personnelles de **36,8 millions de personnes** (nom, prénom, numéro de sécurité sociale...). Les pirates ont utilisé l'**ingénierie sociale** — ils ont manipulé des conseillers pour usurper leurs comptes. Le plus frappant : France Travail avait *identifié* les failles dans ses propres analyses de risques, mais ne les avait jamais corrigées. + +> **Concept NSI** : Sécurisation des données, ingénierie sociale, traitement des données personnelles (RGPD). +> +> **Source** : [CNIL - Sanction France Travail](https://cnil.fr/fr/violation-de-donnees-sanction-5millions-france-travail) · [France Info](https://www.franceinfo.fr/internet/securite-sur-internet/cyberattaques/cyberattaque-france-travail-condamne-a-une-amende-de-5-millions-d-euros-par-la-cnil_7771793.html) + +--- + +### 1er anniversaire du Sommet de Paris pour l'IA — Bilan ce mardi + +Aujourd'hui même, la ministre déléguée à l'Intelligence Artificielle, Anne Le Hénanff, tient une conférence de presse pour dresser le bilan du **Sommet pour l'action sur l'IA**, organisé à Paris il y a exactement un an (10-11 février 2025). Ce sommet avait réuni plus de 100 pays au Grand Palais et abouti à une centaine d'engagements concrets sur l'IA de confiance. Un an après, où en est-on ? + +> **Concept NSI** : Intelligence artificielle, enjeux éthiques du numérique, gouvernance des données. +> +> **Source** : [Économie.gouv.fr](https://presse.economie.gouv.fr/ip-conference-de-presse-a-loccasion-du-1er-anniversaire-du-sommet-de-paris-pour-laction-sur-lia-mardi-10-fevrier-2026/) · [Élysée](https://www.elysee.fr/sommet-pour-l-action-sur-l-ia) + +--- + +### Python toujours n°1, mais la concurrence s'installe — Classement TIOBE février 2026 + +Le classement TIOBE de février 2026 confirme **Python** en tête avec **21,81 %** de parts, mais en recul de 2 points sur un an (son pic était à 27 % en juillet 2025). Le langage **C** remonte à la 2e place, et surprise : **R** (statistiques) et **Perl** (scripting) font un retour remarqué dans le top 20. Go, en revanche, chute hors du top 10. + +> **Concept NSI** : Langages de programmation, paradigmes (impératif, fonctionnel), diversité des langages. +> +> **Source** : [Blog du Modérateur - Classement TIOBE février 2026](https://www.blogdumoderateur.com/20-langages-informatiques-populaires-fevrier-2026/) + +--- + +### Mistral AI lance Devstral 2 et son assistant en ligne de commande + +La pépite française **Mistral AI** a dévoilé **Devstral 2**, un modèle d'IA open source dédié au code, disponible en deux tailles (24B et 123B paramètres). Il supporte un contexte de **256 000 tokens** et est diffusé sous licence MIT/Apache. L'entreprise lance aussi **Mistral Vibe CLI**, un assistant en terminal qui permet de modifier du code en langage naturel — directement depuis la ligne de commande. + +> **Concept NSI** : Programmation, interface en ligne de commande (CLI), modèles de langage, open source. +> +> **Source** : [Mistral AI](https://mistral.ai/news/devstral-2-vibe-cli) · [VentureBeat](https://venturebeat.com/ai/mistral-launches-powerful-devstral-2-coding-model-including-open-source) + +--- + +### Bercy veut imposer la French Tech dans les achats numériques de l'État + +Le 5 février, lors de l'événement « Je choisis la French Tech », le ministère de l'Économie a annoncé une **nouvelle doctrine d'achat numérique** : l'État devra désormais privilégier les solutions technologiques françaises dans ses marchés publics. Les groupes Renault et La Poste ont rejoint l'initiative. L'objectif : renforcer la **souveraineté numérique** de la France. + +> **Concept NSI** : Souveraineté numérique, architecture client-serveur, hébergement des données. +> +> **Source** : [Clubic](https://www.clubic.com/actualite-599227-la-french-tech-doit-devenir-prioritaire-dans-les-achats-numeriques-de-l-etat-dit-bercy.html) + +--- + +## 2. ANECDOTE HISTORIQUE — 10 février 1996 + +### Deep Blue vs Kasparov : le jour où une machine a battu un champion du monde aux échecs + +**Contexte.** Le 10 février 1996 — il y a exactement 30 ans jour pour jour — débute à Philadelphie un match historique entre le champion du monde d'échecs **Garry Kasparov** et **Deep Blue**, un supercalculateur conçu par IBM. La machine pèse 700 kg, mesure 2 mètres de haut, et embarque **256 processeurs spécialisés** fonctionnant en parallèle, capables d'évaluer **200 millions de positions par seconde**. + +**Ce qui s'est passé.** Lors de la première partie, Deep Blue réalise l'exploit : c'est la **première fois qu'un ordinateur bat un champion du monde en titre** dans des conditions réglementaires. Kasparov, déstabilisé, se ressaisit et remporte finalement le match 4-2. Mais la revanche de mai 1997 tournera en faveur de la machine (3½-2½), marquant un tournant dans l'histoire de l'IA. + +**Lien avec le cours.** Deep Blue ne « comprend » pas les échecs. Il utilise un algorithme de **recherche par force brute** combiné à des **heuristiques d'évaluation** — exactement le type d'algorithmes que vous étudiez en NSI : parcours d'arbres, complexité algorithmique, optimisation. + +**Vidéo INA** : [1997 : l'ordinateur bat Garry Kasparov, un tournant dans l'histoire des échecs](https://www.ina.fr/ina-eclaire-actu/1997-l-ordinateur-deep-blue-bat-garry-kasparov-un-tournant-dans-l-histoire-des-echecs) + +**Exemple de code — Mini-évaluation d'un coup aux échecs (simplifié) :** + +```python +def minimax(position, profondeur, est_maximisant): + """Algorithme Minimax simplifié - utilisé par Deep Blue""" + if profondeur == 0 or position.est_finale(): + return position.evaluer() + + if est_maximisant: + meilleur = float('-inf') + for coup in position.coups_possibles(): + position.jouer(coup) + score = minimax(position, profondeur - 1, False) + position.annuler(coup) + meilleur = max(meilleur, score) + return meilleur + else: + meilleur = float('+inf') + for coup in position.coups_possibles(): + position.jouer(coup) + score = minimax(position, profondeur - 1, True) + position.annuler(coup) + meilleur = min(meilleur, score) + return meilleur +``` + +--- + +## 3. TABLEAU RÉCAPITULATIF — Concepts NSI abordés + +| Actualité | Concepts NSI | Chapitre du programme | +|---|---|---| +| Amende CNIL / France Travail | Données personnelles, sécurité, RGPD | Données structurées, enjeux sociétaux | +| Anniversaire Sommet IA Paris | Intelligence artificielle, éthique | IA et enjeux sociétaux du numérique | +| Classement TIOBE (Python n°1) | Langages de programmation, paradigmes | Langages et programmation | +| Mistral AI — Devstral 2 | CLI, open source, modèles de langage | Interactions homme-machine, programmation | +| French Tech / souveraineté | Architecture réseau, hébergement | Architecture matérielle, réseaux | +| Deep Blue vs Kasparov (1996) | Algorithmes, arbres, complexité, récursivité | Algorithmique | diff --git a/news/2026-02-13.md b/news/2026-02-13.md new file mode 100644 index 0000000..fa01e4e --- /dev/null +++ b/news/2026-02-13.md @@ -0,0 +1,108 @@ +Now I have all the information I need. Let me compose the news. + +# News NSI - Jeudi 13 février 2026 + +--- + +## 1. ACTUALITÉS + +### OpenAI intègre de la publicité dans ChatGPT + +OpenAI a commencé à afficher des publicités dans ChatGPT aux États-Unis. Les annonces apparaissent sur fond gris avec la mention "sponsorisé" et sont ciblées en fonction des recherches de l'utilisateur. Elles ne s'affichent pas sur les sujets sensibles (santé, politique). OpenAI justifie cette décision par le coût colossal de la puissance de calcul nécessaire pour faire tourner ses modèles d'IA. + +**Concept NSI** : Modèles économiques du numérique (gratuit vs payant, données personnelles comme monnaie d'échange), traitement des données utilisateur. + +> Source : [Journal du Geek](https://www.journaldugeek.com/2026/02/10/les-pubs-debarquent-dans-chatgpt-quel-impact-sur-vos-recherches/) · [Clubic](https://www.clubic.com/actualite-599755-la-pub-debarque-dans-la-version-gratuite-de-chatgpt-mais-aussi-dans-la-version-payante.html) + +--- + +### Patch Tuesday : Microsoft corrige 6 failles zero-day exploitées activement + +Le 11 février, Microsoft a publié son Patch Tuesday corrigeant 59 vulnérabilités dont **6 failles zero-day** (= failles inconnues des développeurs mais déjà utilisées par des attaquants). Parmi elles : un simple clic sur un lien malveillant pouvait contourner toutes les protections de Windows, et une autre permettait d'obtenir les droits administrateur complets (privilèges SYSTEM) sur une machine. + +**Concept NSI** : Sécurité informatique, gestion des vulnérabilités, élévation de privilèges, importance des mises à jour. + +> Source : [IT-Connect](https://www.it-connect.fr/patch-tuesday-fevrier-2026-recapitulatif/) · [BleepingComputer](https://www.bleepingcomputer.com/news/microsoft/microsoft-february-2026-patch-tuesday-fixes-6-zero-days-58-flaws/) + +--- + +### La France, 2e pays le plus cyberattaqué en Europe + +Selon un rapport de Check Point, la France est désormais le **2e pays le plus ciblé en Europe** avec 13 % des attaques. Les groupes hacktivistes pro-russes (Noname057(16), Keymous+) coordonnent leurs campagnes via Telegram. Le groupe de ransomware Qilin a mené 51 attaques en France. En parallèle, une faille dans le système des cartes grises a permis une fraude massive à l'immatriculation. + +**Concept NSI** : Réseaux, protocoles de communication, architectures client-serveur, chiffrement. + +> Source : [Siècle Digital](https://siecledigital.fr/2026/02/12/cybersecurite-2026-lia-accelere-les-attaques-la-france-en-premiere-ligne/) + +--- + +### Classement TIOBE février 2026 : Python toujours n°1, R fait son retour + +Le classement TIOBE de popularité des langages de programmation place toujours **Python en tête** avec 21,81 % (+10 points d'avance sur le 2e). Le podium : Python, C, C++. Surprise : le langage **R** (statistiques et data science) remonte de la 15e à la 8e place en un an. Go chute de 8 places et sort du top 10. + +**Concept NSI** : Langages de programmation, diversité des paradigmes (impératif, fonctionnel, objet), Python en cours de NSI. + +> Source : [Blog du Modérateur](https://www.blogdumoderateur.com/20-langages-informatiques-populaires-fevrier-2026/) · [Programmez](https://www.programmez.com/actualites/index-tiobe-fevrier-2026-python-c-et-c-sur-le-podium-progression-de-r-39002) + +--- + +### 48 % des Français utilisent l'IA, 85 % des 18-24 ans + +Le Baromètre du numérique 2026 (Arcep/Arcom/ANCT) révèle que **près d'un Français sur deux** utilise désormais l'intelligence artificielle. Chez les 18-24 ans, le chiffre grimpe à 85 %, dont **73 % pour l'aide aux devoirs**. La France compte plus de 1 000 startups IA, formant le 1er écosystème du secteur en UE, avec 2,6 milliards d'euros levés en 2025. + +**Concept NSI** : Algorithmes, apprentissage automatique, traitement automatique du langage, enjeux sociétaux du numérique. + +> Source : [Vie publique](https://www.vie-publique.fr/en-bref/301989-barometre-du-numerique-2026-48-dutilisateurs-de-lia) · [Presse-citron](https://www.presse-citron.net/les-chiffres-de-lia-en-france-en-2026-4-changements-impressionnants/) + +--- + +## 2. ANECDOTE HISTORIQUE + +### Il y a 30 ans : Deep Blue bat Kasparov pour la première fois (10-17 février 1996) + +**Contexte** : En février 1996, IBM organise à Philadelphie un match en 6 parties entre son superordinateur **Deep Blue** et le champion du monde d'échecs **Garry Kasparov**. C'est la première fois qu'un ordinateur affronte un champion du monde en titre dans des conditions de tournoi officiel. + +**Ce qui s'est passé** : Le 10 février 1996, Deep Blue remporte la première partie — c'est la **première victoire d'un ordinateur contre un champion du monde** en cadence lente. La machine pesait 700 kg, mesurait 2 mètres et embarquait **256 processeurs spécialisés** travaillant en parallèle, capables d'évaluer 200 millions de positions par seconde. Kasparov finit par remporter le match 4-2, mais l'exploit de la machine fait le tour du monde. Un an plus tard, en mai 1997, une version améliorée ("Deeper Blue") battra Kasparov 3½ - 2½. + +**Lien avec le cours NSI** : Cet événement illustre parfaitement les notions d'**algorithmes de recherche** (minimax, élagage alpha-bêta), de **structures de données arborescentes** (arbre de jeu), et de **complexité algorithmique**. Deep Blue n'était pas "intelligent" : il explorait des millions de branches possibles par force brute, guidé par des heuristiques. C'est un exemple concret de la puissance — et des limites — du calcul. + +**Vidéo INA** : [1997 : l'ordinateur Deep Blue bat Kasparov - INA](https://www.ina.fr/ina-eclaire-actu/1997-l-ordinateur-deep-blue-bat-garry-kasparov-un-tournant-dans-l-histoire-des-echecs) + +**Exemple simplifié — Algorithme Minimax en Python** : + +```python +def minimax(plateau, profondeur, est_maximisant): + """Algorithme minimax simplifié pour un jeu à deux joueurs.""" + if profondeur == 0 or partie_terminee(plateau): + return evaluer(plateau) + + if est_maximisant: + meilleur = float('-inf') + for coup in coups_possibles(plateau): + jouer(plateau, coup) + score = minimax(plateau, profondeur - 1, False) + annuler(plateau, coup) + meilleur = max(meilleur, score) + return meilleur + else: + meilleur = float('inf') + for coup in coups_possibles(plateau): + jouer(plateau, coup) + score = minimax(plateau, profondeur - 1, True) + annuler(plateau, coup) + meilleur = min(meilleur, score) + return meilleur +``` + +--- + +## 3. TABLEAU RÉCAPITULATIF + +| Actualité | Concept NSI | Lien programme Première | +|---|---|---| +| Publicité dans ChatGPT | Modèles économiques, données personnelles | Impacts sociétaux du numérique | +| Patch Tuesday (6 zero-days) | Vulnérabilités, élévation de privilèges | Sécurité, systèmes d'exploitation | +| France 2e pays cyberattaqué | Réseaux, protocoles, chiffrement | Architecture réseau, protocoles | +| Classement TIOBE (Python n°1) | Langages de programmation, paradigmes | Python, diversité des langages | +| 48 % des Français utilisent l'IA | Algorithmes, apprentissage automatique | Algorithmes, traitement de données | +| Deep Blue vs Kasparov (1996) | Minimax, arbres, complexité | Algorithmes de recherche, récursivité | diff --git a/news/2026-03-03.md b/news/2026-03-03.md new file mode 100644 index 0000000..d337f0c --- /dev/null +++ b/news/2026-03-03.md @@ -0,0 +1,89 @@ +# News NSI - Mardi 3 mars 2026 + +--- + +## 1. Actualités du jour + +### Quasi-blackout d'Internet en Iran : la cyberguerre en action + +Depuis le 28 février, l'Iran subit un **blackout Internet quasi-total** : la connectivité nationale est tombée à environ **1 % de son niveau normal**. Ce blackout combine une **coupure ordonnée par l'État** et des **cyberattaques externes** visant les infrastructures de télécommunications, dans le contexte des frappes militaires américano-israéliennes (opération « Roar of the Lion »). En parallèle, des groupes affiliés à l'Iran lancent des attaques DDoS en représailles. + +**Concept NSI :** Réseaux informatiques — Comment fonctionne Internet à l'échelle d'un pays ? Un État peut-il vraiment « couper » Internet ? Cela touche aux notions de **routage, protocoles TCP/IP et architecture décentralisée** du réseau. + +> Source : [The Register](https://www.theregister.com/2026/03/02/iran_internet_blackout/) · [CNBC](https://www.cnbc.com/2026/03/02/irans-internet-down-amid-reports-of-us-israel-cyberattacks.html) + +--- + +### L'iPhone et l'iPad certifiés par l'OTAN pour les données classifiées + +Apple a annoncé que l'iPhone et l'iPad sont les **premiers appareils grand public** autorisés à traiter des informations classifiées au niveau « NATO Restricted ». L'évaluation a été menée par le **BSI allemand** (l'équivalent de l'ANSSI). Les appareils, sous iOS 18, s'appuient sur le **chiffrement natif**, la biométrie Face ID et des protections mémoire avancées — **sans logiciel tiers** supplémentaire. + +**Concept NSI :** Sécurité informatique — Chiffrement des données, authentification biométrique, protection de la mémoire. Comment un système d'exploitation peut-il garantir la confidentialité des données ? + +> Source : [Apple Newsroom](https://www.apple.com/newsroom/2026/02/iphone-and-ipad-approved-to-handle-classified-nato-information/) · [MacRumors](https://www.macrumors.com/2026/02/26/nato-classified-data-iphone-ipad/) + +--- + +### L'IA Act européen : les obligations se précisent avant août 2026 + +Le **règlement européen sur l'IA** (AI Act), entré en vigueur en août 2024, poursuit son calendrier d'application progressive. En **août 2026**, les règles complètes s'appliqueront aux systèmes d'IA à **haut risque** (biométrie, éducation, emploi, justice). Les entreprises doivent garantir **transparence, traçabilité et responsabilité** de leurs algorithmes, sous peine d'amendes pouvant atteindre **35 millions d'euros**. + +**Concept NSI :** Données structurées et algorithmes — Qu'est-ce qu'un algorithme « à haut risque » ? Comment documenter et rendre transparent le fonctionnement d'un programme ? Cela soulève aussi les enjeux **éthiques** du numérique. + +> Source : [Direction générale des Entreprises](https://www.entreprises.gouv.fr/decryptages-de-nos-experts/le-reglement-europeen-sur-lintelligence-artificielle-publics-concernes) · [Vie publique](https://www.vie-publique.fr/questions-reponses/292157-intelligence-artificielle-le-cadre-juridique-europeen-de-lia) + +--- + +### Python toujours roi, Rust en embuscade : les langages en 2026 + +En 2026, **Python** conserve sa place de leader incontesté grâce à l'IA et la data science. **JavaScript** reste incontournable pour le web. La nouveauté : **Rust** continue sa progression fulgurante, apprécié pour sa **gestion mémoire sûre sans ramasse-miettes**. Côté tendance, les développeurs deviennent des « reviewer-architectes » : l'IA écrit le code, le développeur le vérifie et le valide. + +**Concept NSI :** Langages de programmation — Pourquoi existe-t-il autant de langages ? Différences entre langages interprétés (Python) et compilés (Rust). Notion de **typage**, de **gestion mémoire** et de choix d'outils selon le contexte. + +> Source : [Dunod](https://www.dunod.com/11-langages-programmation-incontournables-en-2026) · [WeLoveDevs](https://welovedevs.com/articles/les-3-tendances-tech-qui-vont-redefinir-le-role-du-developpeur-dans-les-5-prochaines-annees/) + +--- + +### Un Français sur deux utilise l'IA générative + +Selon le **Baromètre du numérique 2026**, **48 % des Français** ont utilisé l'IA générative (ChatGPT, Claude, Gemini…). ChatGPT compte désormais environ **1 milliard d'utilisateurs mensuels** dans le monde. Un service encore confidentiel il y a deux ans est devenu un outil du quotidien — y compris pour les lycéens. + +**Concept NSI :** Intelligence artificielle et traitement des données — Comment fonctionne un modèle de langage ? Notions de **corpus d'entraînement**, de **probabilités** et de génération de texte. Quel impact sur la fiabilité de l'information ? + +> Source : [Vie publique](https://www.vie-publique.fr/en-bref/301989-barometre-du-numerique-2026-48-dutilisateurs-de-lia) · [BPI France](https://bigmedia.bpifrance.fr/nos-dossiers/nouvelles-tendances-ia-ce-qui-va-transformer-2026) + +--- + +## 2. Anecdote historique + +### 3 mars 1975 — Le Homebrew Computer Club : le garage où tout a commencé + +**Contexte :** En 1975, les ordinateurs sont des machines énormes réservées aux entreprises et aux universités. Le micro-ordinateur n'existe pas encore dans le commerce. Mais un petit kit en pièces détachées, l'**Altair 8800**, vient de sortir et fait rêver les bidouilleurs. + +**Ce qui s'est passé :** Le **3 mars 1975**, une trentaine de passionnés d'électronique se retrouvent dans le **garage de Gordon French**, à Menlo Park en Californie, pour la première réunion du **Homebrew Computer Club**. Parmi eux, un ingénieur timide de 24 ans, **Steve Wozniak**, traîné là par un ami. C'est dans ce club que Wozniak trouvera l'inspiration pour concevoir l'**Apple I**, qu'il présente aux membres du club quelques mois plus tard. Son ami **Steve Jobs** y voit un potentiel commercial : **Apple Computer** naîtra un an après. + +**Le lien avec le cours :** Ce club illustre parfaitement la **culture du partage** en informatique. Wozniak voulait distribuer ses plans gratuitement (philosophie du logiciel libre avant l'heure !). C'est aussi un exemple concret de la façon dont un **projet personnel** dans un garage peut devenir une entreprise qui change le monde. En NSI, quand vous codez vos premiers programmes en Python, vous êtes les héritiers de ces bricoleurs. + +```python +# L'Altair 8800 se programmait en binaire via des interrupteurs ! +# Voici ce que donnerait un "Hello World" traduit en binaire : +message = "Hello World" +binaire = ' '.join(format(ord(c), '08b') for c in message) +print(f"En binaire : {binaire}") +# → 01001000 01100101 01101100 01101100 01101111 ... +``` + +> Source : [Computer History Museum](https://www.computerhistory.org/tdih/march/3/) · [Wikipedia](https://en.wikipedia.org/wiki/Homebrew_Computer_Club) + +--- + +## 3. Tableau récapitulatif des concepts NSI + +| Actualité | Concept NSI | Chapitre du programme | +|---|---|---| +| Blackout Internet en Iran | Réseaux, protocoles TCP/IP, routage | Architectures matérielles et OS | +| iPhone certifié OTAN | Chiffrement, authentification, sécurité | Données structurées / Sécurité | +| IA Act européen | Éthique, transparence des algorithmes | Impact social et éthique du numérique | +| Langages 2026 (Python, Rust) | Langages interprétés vs compilés, typage | Langages et programmation | +| 48 % des Français utilisent l'IA | Modèles de données, probabilités | Traitement de données / Algorithmes | +| Homebrew Computer Club (1975) | Histoire de l'informatique, open source | Histoire de l'informatique | diff --git a/news/2026-03-10.md b/news/2026-03-10.md new file mode 100644 index 0000000..e13340b --- /dev/null +++ b/news/2026-03-10.md @@ -0,0 +1,123 @@ +# News NSI - Mardi 10 Mars 2026 + +--- + +## 🗞️ ACTUALITÉS DU JOUR + +--- + +### 1. 💉 Fuite de données : 15 millions de dossiers médicaux français exposés + +**Ce qui s'est passé :** Une intrusion dans le système `MonLogicielMedical.com` de l'éditeur Cegedim a compromis les données de santé de 11 à 15 millions de Français : noms, dates de naissance, numéros de sécurité sociale et historiques médicaux. + +**Pourquoi c'est important pour vous ?** Vos données de santé sont parmi les plus sensibles qui existent. Une fois volées, elles peuvent servir à l'usurpation d'identité ou à des arnaques ciblées (phishing médical). + +**Concept NSI lié :** **Sécurité des données personnelles** — chiffrement, RGPD, notion de donnée sensible vs. publique, bases de données. + +> *Source : [IT-Connect - Actualités Cybersécurité](https://www.it-connect.fr/actualites/actu-securite/) / [dcod.ch](https://dcod.ch/2026/03/04/ia-cybersecurite-les-9-actus-cles-du-4-mar-2026/)* + +--- + +### 2. 🤖 Des hackers utilisent l'IA pour fabriquer des malwares à la chaîne + +**Ce qui s'est passé :** Le groupe de hackers *Transparent Tribe* (lié au Pakistan) utilise des outils de codage assistés par IA pour produire des malwares en masse, dans des langages peu courants comme **Nim**, **Zig** ou **Crystal**, et les fait communiquer via Slack ou Discord pour échapper à la détection. + +**Pourquoi c'est important pour vous ?** L'IA ne sert pas qu'à faire des dissertations — elle devient un outil d'attaque. La cybersécurité doit évoluer aussi vite que les menaces. + +**Concept NSI lié :** **Langages de programmation** — diversité des langages, notion de compilé/interprété ; **réseaux** — protocoles de communication détournés. + +> *Source : [BleepingComputer - Microsoft: Hackers abusing AI](https://www.bleepingcomputer.com/news/security/microsoft-hackers-abusing-ai-at-every-stage-of-cyberattacks/)* + +--- + +### 3. 🦊 Firefox 148 : un panneau de contrôle pour l'IA intégrée au navigateur + +**Ce qui s'est passé :** Mozilla a publié **Firefox 148** avec un tableau de bord centralisé permettant aux utilisateurs d'activer, désactiver ou configurer finement toutes les fonctionnalités d'IA du navigateur (suggestions, résumés automatiques, etc.). + +**Pourquoi c'est important pour vous ?** Votre navigateur est une porte d'entrée vers toutes vos données. Savoir ce que l'IA embarquée peut ou ne peut pas faire relève de votre vie privée numérique. + +**Concept NSI lié :** **Interfaces homme-machine (IHM)** — paramétrage utilisateur, consentement éclairé, architecture logicielle d'un navigateur. + +> *Source : [dcod.ch - IA & Cybersécurité mars 2026](https://dcod.ch/2026/03/04/ia-cybersecurite-les-9-actus-cles-du-4-mar-2026/)* + +--- + +### 4. 🇪🇺 L'AI Act européen entre progressivement en vigueur + +**Ce qui s'est passé :** La réglementation européenne sur l'IA (**AI Act**) impose désormais aux entreprises des obligations de **transparence**, de **traçabilité** et de **responsabilité** pour tout système d'IA à haut risque. La France mise sur **Mistral AI** pour réduire sa dépendance aux géants américains et chinois. + +**Pourquoi c'est important pour vous ?** Vous vivrez et travaillerez dans un monde où l'IA est régulée. Comprendre ces règles, c'est comprendre comment la société encadre la technologie. + +**Concept NSI lié :** **Éthique et société numérique** — algorithmes de décision, biais, responsabilité des systèmes automatisés. + +> *Source : [BPIFrance - Nouvelles tendances IA 2026](https://bigmedia.bpifrance.fr/nos-dossiers/nouvelles-tendances-ia-ce-qui-va-transformer-2026)* + +--- + +### 5. 🛡️ OpenAI lance Codex Security : une IA qui chasse les bugs de sécurité + +**Ce qui s'est passé :** OpenAI a déployé **Codex Security**, un agent IA capable de scanner automatiquement du code source, de valider des vulnérabilités et de proposer des correctifs, directement intégré dans les workflows des développeurs. + +**Pourquoi c'est important pour vous ?** Demain, écrire du code ne suffira plus — il faudra aussi savoir si ce code est sûr. Des outils comme celui-ci vont changer le métier de développeur. + +**Concept NSI lié :** **Mise au point de programmes** — débogage, tests, notion de vulnérabilité logicielle (buffer overflow, injection…). + +> *Source : [Help Net Security - Patch Tuesday Mars 2026](https://www.helpnetsecurity.com/2026/03/06/march-2026-patch-tuesday-forecast/)* + +--- + +## 📜 ANECDOTE HISTORIQUE + +### Le Ver Morris (1988) : le premier ver internet de l'histoire + +**Contexte :** En 1988, Internet (alors appelé ARPANET) est encore un réseau académique et militaire. Moins de 60 000 machines y sont connectées. La sécurité ? Presque inexistante. + +**Ce qui s'est passé :** Le 2 novembre 1988, **Robert Tappan Morris**, étudiant de 23 ans à Cornell, lâche un programme autoreplicant sur le réseau. En quelques heures, le **Ver Morris** infecte entre 6 000 et 9 000 machines (soit ~10% d'Internet !). Il exploite des failles dans `sendmail`, `fingerd` et `rsh/rexec` d'Unix, se copie de machine en machine, et ralentit tellement les serveurs qu'ils deviennent inutilisables. + +Morris prétendra avoir voulu mesurer la taille d'Internet — pas provoquer de dommages. Mais les dégâts sont estimés entre **100 000 $ et 10 millions de $**. + +**La suite :** Morris devient le premier condamné sous le *Computer Fraud and Abuse Act* américain. Il écope de 3 ans de probation, 400 heures de travaux d'intérêt général et 10 000 $ d'amende. Il fondera plus tard la startup **Y Combinator** (qui financera Airbnb, Dropbox, Reddit...). + +**Lien avec le cours :** +- **Réseaux** : propagation d'un programme via des protocoles réseau (TCP/IP) +- **Systèmes d'exploitation** : exploitation de failles dans des services Unix +- **Algorithmes** : le ver utilise une boucle de reproduction — un algorithme récursif appliqué à des machines distantes + +**Exemple simplifié du principe (Python pédagogique) :** +```python +# Principe TRÈS simplifié d'un programme autoreplicant (éducatif uniquement) +import os + +def se_copier_sur(machine_distante): + """Simule la logique de copie d'un ver (fictif)""" + code_source = open(__file__).read() + # En vrai : envoi via socket réseau vers la machine cible + print(f"Copie de {len(code_source)} octets vers {machine_distante}") + +machines_connues = ["machine_A", "machine_B", "machine_C"] +for machine in machines_connues: + se_copier_sur(machine) +``` + +> Le vrai ver Morris exploitait un `gets()` sans vérification de taille (buffer overflow) — une faille qu'on apprend encore aujourd'hui à éviter ! + +**Vidéo / Source :** +- [Article Wikipedia - Ver Morris](https://fr.wikipedia.org/wiki/Ver_Morris) +- [Robert Morris interviewé par le MIT (YouTube)](https://www.youtube.com/results?search_query=Robert+Morris+worm+1988+interview) + +--- + +## 📊 TABLEAU RÉCAPITULATIF — Concepts NSI abordés + +| # | Actualité | Concept NSI | Niveau | +|---|-----------|-------------|--------| +| 1 | Fuite données médicales | Sécurité des données, RGPD, BDD | Première | +| 2 | Hackers & IA / malwares | Langages de programmation, réseaux | Première | +| 3 | Firefox 148 & IA | IHM, architecture logicielle | Première | +| 4 | AI Act européen | Éthique numérique, algorithmes | Première | +| 5 | Codex Security (OpenAI) | Mise au point, tests, vulnérabilités | Première | +| 📜 | Ver Morris (1988) | Réseaux TCP/IP, OS, algorithmes | Première/Terminale | + +--- + +*Sources principales : [dcod.ch](https://dcod.ch/2026/03/04/ia-cybersecurite-les-9-actus-cles-du-4-mar-2026/) • [BleepingComputer](https://www.bleepingcomputer.com/news/security/microsoft-hackers-abusing-ai-at-every-stage-of-cyberattacks/) • [Help Net Security](https://www.helpnetsecurity.com/2026/03/06/march-2026-patch-tuesday-forecast/) • [BPIFrance BigMedia](https://bigmedia.bpifrance.fr/nos-dossiers/nouvelles-tendances-ia-ce-qui-va-transformer-2026) • [IT-Connect](https://www.it-connect.fr/actualites/actu-securite/)* diff --git a/news/2026-03-13.md b/news/2026-03-13.md new file mode 100644 index 0000000..b82b428 --- /dev/null +++ b/news/2026-03-13.md @@ -0,0 +1,119 @@ +# News NSI - Vendredi 13 Mars 2026 + +--- + +## 🗞️ ACTUALITÉS DU JOUR + +### 1. 🏥 Cyberattaque "wiper" contre Stryker — les hackers iraniens frappent le secteur médical + +**Ce qui s'est passé :** Le groupe d'hackers lié à l'Iran a déployé un malware de type **wiper** contre Stryker, géant mondial des technologies médicales. Un wiper ne vole pas les données — il les **efface définitivement**, rendant les systèmes inutilisables. + +**Pourquoi c'est important pour vous :** Dans un hôpital, un système informatique planté peut mettre des vies en danger. La cybersécurité dans le secteur médical est désormais une question de sécurité nationale. + +**Concept NSI lié :** `Sécurité des systèmes` — intégrité des données, notion de malware, attaque destructrice vs vol de données. + +**Source :** [CybersecurityNews](https://cybersecuritynews.com/stryker-cyber-attack/) + +--- + +### 2. 🔧 Microsoft Patch Tuesday — 78 failles corrigées dont un zero-day exploité + +**Ce qui s'est passé :** Chaque deuxième mardi du mois, Microsoft publie ses correctifs de sécurité. Ce mois-ci : **78 vulnérabilités** corrigées sur Windows, Office, Azure et .NET — dont un **zero-day** (faille inconnue du public, déjà exploitée par des attaquants avant que Microsoft ne la détecte). + +**Pourquoi c'est important pour vous :** Quand on dit "mettez à jour votre système", c'est exactement pour ça. Google a aussi patché **129 failles Android** le même jour. + +**Concept NSI lié :** `Vulnérabilité logicielle` — bug, correctif (patch), cycle de vie d'un logiciel, CVE (Common Vulnerabilities and Exposures). + +**Source :** [Help Net Security](https://www.helpnetsecurity.com/2026/03/11/march-2026-patch-tuesday/) + +--- + +### 3. 🦀 VENON : un malware bancaire écrit en Rust pour tromper les antivirus + +**Ce qui s'est passé :** Des chercheurs ont découvert **VENON**, un nouveau malware bancaire ciblant les utilisateurs brésiliens. Sa particularité : il est écrit en **Rust**, un langage de programmation moderne réputé pour ses performances et sa sécurité... mais aussi de plus en plus utilisé par les pirates précisément parce que les antivirus le reconnaissent moins bien. + +**Pourquoi c'est important pour vous :** Le choix du langage de programmation a des conséquences réelles sur la sécurité. Rust est au programme de certaines grandes entreprises tech (Microsoft, Google) pour remplacer le C. + +**Concept NSI lié :** `Langages de programmation` — compilation, langage bas niveau vs haut niveau, détection de signature par antivirus. + +```rust +// Exemple de Rust : gestion mémoire sans garbage collector +fn main() { + let donnees = String::from("données sensibles"); + // La mémoire est libérée automatiquement à la fin du scope + // Pas de pointeurs dangereux comme en C +} // ← mémoire libérée ici +``` + +**Source :** [The Hacker News](https://thehackernews.com/) + +--- + +### 4. 🤖 Les "sociétés d'IA" : quand les agents IA commencent à se comporter comme des humains + +**Ce qui s'est passé :** La revue scientifique *Nature* publie une analyse sur l'émergence des **sociétés multi-agents** : des systèmes où plusieurs IA interagissent entre elles, développent des comportements collectifs, des "normes sociales" et des hiérarchies spontanées — sans que les programmeurs ne l'aient prévu. + +**Pourquoi c'est important pour vous :** On ne programme plus une seule IA, mais des **écosystèmes d'agents**. Cela soulève des questions fondamentales : qui est responsable quand personne n'a programmé le comportement qui en résulte ? + +**Concept NSI lié :** `Intelligence Artificielle` — systèmes multi-agents, apprentissage par renforcement, comportements émergents. + +**Source :** [Nature](https://www.nature.com/articles/d41586-026-00070-5) + +--- + +### 5. 🇫🇷 La France investit massivement dans la "Deeptech souveraine" + +**Ce qui s'est passé :** Bpifrance lance le programme **"Deeptech Seed"** pour financer des chercheurs-entrepreneurs dès la naissance de leurs projets en informatique quantique, fusion nucléaire et IA de pointe. Parallèlement, selon le baromètre Allianz 2026, l'IA est passée de la **10e à la 2e place** des risques majeurs pour les entreprises mondiales en un an. + +**Pourquoi c'est important pour vous :** La France mise sur sa "souveraineté numérique" — ne pas dépendre uniquement des géants américains ou chinois pour ses technologies critiques. + +**Concept NSI lié :** `Informatique quantique` — qubits, superposition, différence avec l'ordinateur classique. `Enjeux sociétaux du numérique`. + +**Source :** [Dynamique Mag](https://www.dynamique-mag.com/article/l-entrepreneuriat-en-france-en-2026-le-temps-des-batisseurs-et-de-la-deeptech-souveraine) + +--- + +## 📜 ANECDOTE HISTORIQUE + +### 🕹️ 13 mars 1988 : Lancement de la première version d'Ethernet à 10 Mbps dans les bureaux — et la naissance du réseau local + +**Contexte :** À la fin des années 80, les ordinateurs dans une entreprise ne se "parlaient" pas. Chaque machine était une île. Partager un fichier signifiait le copier sur une disquette et marcher physiquement jusqu'à l'autre bureau — ce que les informaticiens appelaient le **"sneakernet"** (réseau à baskets). + +**Ce qui s'est passé :** Le standard **Ethernet** (inventé par Robert Metcalfe chez Xerox PARC dès 1973, mais standardisé et démocratisé à la fin des années 80) transforme progressivement les bureaux en réseaux locaux (LAN). En 1988, Ethernet 10BASE-T (câble à paires torsadées, 10 Mbps) commence à s'imposer. Pour la première fois, on peut envoyer un fichier à un collègue **sans bouger de sa chaise**. + +**L'anecdote :** Robert Metcalfe a prédit en 1995 que l'internet allait "s'effondrer de façon catastrophique en 1996". Il a dû manger littéralement un article de journal devant une salle pleine lors d'une conférence en 1997, après avoir eu tort. C'est la **loi de Metcalfe** (la valeur d'un réseau est proportionnelle au carré du nombre de ses utilisateurs) qui porte son nom. + +**Lien avec le cours :** C'est l'ancêtre direct de votre box internet et du Wi-Fi. Le protocole TCP/IP, les adresses MAC, les trames réseau — tout ce que vous étudiez en NSI vient de là. + +``` +Topologie Ethernet (années 80) : +[PC 1] ──┬── [câble coaxial] ──┬── [PC 3] + │ │ + [PC 2] [PC 4] + └──── BUS UNIQUE ────┘ + (si le câble casse → tout le réseau tombe !) + +Topologie actuelle (étoile) : +[PC 1] ──┐ +[PC 2] ──┤── [Switch] ── [Routeur] ── Internet +[PC 3] ──┘ +``` + +**Pour aller plus loin :** [INA — Les premiers réseaux informatiques en France](https://www.ina.fr) *(rechercher "réseau informatique" dans les archives)* + +--- + +## 📊 TABLEAU RÉCAPITULATIF DES CONCEPTS NSI + +| # | Actualité | Concept NSI | Niveau | +|---|-----------|-------------|--------| +| 1 | Attaque wiper Stryker | Sécurité — intégrité des données, malware | Première | +| 2 | Patch Tuesday Microsoft | Vulnérabilités logicielles, cycle de vie, CVE | Première | +| 3 | Malware VENON en Rust | Langages de programmation, compilation | Première | +| 4 | Sociétés d'IA (Nature) | Intelligence artificielle, multi-agents | Première / Terminale | +| 5 | Deeptech France | Informatique quantique, enjeux sociétaux | Première / Terminale | +| 📜 | Ethernet (1988) | Réseaux, protocoles, topologie LAN | Première | + +--- + +*Sources : CybersecurityNews, Help Net Security, The Hacker News, Nature, Usine Digitale, Dynamique Mag* diff --git a/news/2026-03-17.md b/news/2026-03-17.md new file mode 100644 index 0000000..bcfff63 --- /dev/null +++ b/news/2026-03-17.md @@ -0,0 +1,94 @@ +# News NSI - Mardi 17 Mars 2026 + +--- + +## 🔐 ACTUALITÉS + +### 1. Microsoft colmate 84 failles dont 2 zero-days +**Source :** [dcod.ch](https://dcod.ch/2026/03/16/vulnerabilites-les-11-alertes-critiques-du-16-mar-2026/) + +Le Patch Tuesday de mars 2026 est arrivé avec une liste chargée : 84 vulnérabilités corrigées par Microsoft, dont 2 **zero-days** — c'est-à-dire des failles déjà connues des attaquants *avant* que Microsoft n'ait eu le temps de les corriger. Dans la même semaine, le logiciel de sauvegarde Veeam Backup 13 a reçu un correctif pour 3 failles critiques permettant l'exécution de code à distance. + +> 💡 **Concept NSI :** *Sécurité des systèmes* — Une faille zero-day exploite une vulnérabilité dans un programme avant que le développeur ait publié un correctif. C'est la course entre attaquants et défenseurs. En NSI, cela illustre pourquoi la gestion de la mémoire (buffer overflow, injection) est un sujet fondamental en programmation. + +--- + +### 2. Cyberguerre Iran : internet quasi coupé, 1 100 navires GPS brouillés +**Source :** [dcod.ch](https://dcod.ch/2026/03/10/cyberattaques-les-12-incidents-majeurs-du-10-mars-2026/) + +Après des frappes militaires fin février 2026, l'Iran a vu sa connectivité internet chuter à seulement **4 % de son niveau normal**. Simultanément, environ **1 100 navires** ont subi des perturbations de leur GPS — une attaque appelée *GPS spoofing* qui consiste à envoyer de faux signaux de localisation. Des caméras de circulation ont également été piratées à distance. + +> 💡 **Concept NSI :** *Réseaux & protocoles* — Internet repose sur une infrastructure physique (câbles, routeurs, FAI). Une "coupure" peut être volontaire (blocage des AS — systèmes autonomes) ou due à des dommages physiques. Le GPS spoofing montre que les protocoles sans authentification forte sont vulnérables. + +--- + +### 3. Course aux LLM : GPT-5, Claude Sonnet 5, Gemini 3.1 en quelques semaines +**Source :** [gptbox.fr](https://gptbox.fr/actus/recaps/actualites-ia-mars-2026) + +Février-mars 2026 est déjà baptisé "le mois de tous les records" en IA. OpenAI, Anthropic et Google ont chacun sorti de nouveaux modèles de langage (LLM) en l'espace de quelques semaines. Samsung vise 800 millions d'appareils intégrant Gemini d'ici fin 2026. La course à la puissance de calcul s'accélère. + +> 💡 **Concept NSI :** *Intelligence artificielle* — Un LLM (Large Language Model) est un réseau de neurones entraîné sur des milliards de textes. Sa puissance est mesurée en paramètres (ex : 700 milliards). En NSI Terminale, vous étudierez les bases des réseaux de neurones et leur entraînement. + +--- + +### 4. Pasqal, la start-up française d'informatique quantique, lève 340 M€ +**Source :** [lemondeinformatique.fr](https://www.lemondeinformatique.fr/actualites/toute-l-actualite.html) + +La pépite française **Pasqal**, spécialisée dans l'**informatique quantique**, a levé 340 millions d'euros et est valorisée à 2 milliards de dollars. Une introduction en Bourse au Nasdaq est prévue en 2026. Basée à Massy (Essonne), l'entreprise développe des processeurs à base d'atomes neutres refroidis par laser. + +> 💡 **Concept NSI :** *Représentation de l'information* — Un ordinateur classique manipule des **bits** (0 ou 1). Un ordinateur quantique utilise des **qubits** qui peuvent être 0, 1 ou les deux à la fois (superposition). Cette propriété permettrait de résoudre certains problèmes (cryptographie, optimisation) des millions de fois plus vite. + +--- + +### 5. CERT-FR : la cybermenace française se professionnalise +**Source :** [xmco.fr](https://www.xmco.fr/resume-de-la-semaine-fr/resume-de-la-semaine-11-du-9-au-13-mars-2026/) + +Le **CERT-FR** (Agence gouvernementale française de cybersécurité, rattachée à l'ANSSI) a publié son panorama annuel de la cybermenace 2025. Conclusion : les attaques contre les organisations françaises sont de plus en plus structurées et professionnalisées. Une opération internationale coordonnée par Europol a démantelé le botnet **SocksEscort** : 23 serveurs saisis, ~1 million de box internet compromises déconnectées. + +> 💡 **Concept NSI :** *Réseaux & cybersécurité* — Un **botnet** est un réseau de machines infectées contrôlées à distance par un attaquant (le "bot herder"). Les machines zombies sont utilisées pour des attaques DDoS, du spam ou du minage de cryptomonnaies sans que leurs propriétaires le sachent. + +--- + +## 🕹️ ANECDOTE HISTORIQUE + +### Le ver Morris (1988) : le premier malware d'Internet + +**Contexte :** En 1988, Internet ne comptait que quelques dizaines de milliers de machines, principalement des universités et laboratoires américains. Les notions de "sécurité informatique" étaient quasi inexistantes. + +**Ce qui s'est passé :** Le **2 novembre 1988**, Robert Tappan Morris, étudiant de 23 ans à Cornell, lance depuis le MIT un programme expérimental censé mesurer la taille d'Internet. Le programme exploite trois vulnérabilités Unix (dont un *buffer overflow* dans `fingerd` et une faille dans `sendmail`). Problème : une erreur de code le fait se répliquer *sans limite*. En quelques heures, plusieurs milliers de machines sont paralysées. C'est le **premier ver informatique** d'Internet. + +**Conséquences :** Morris est le premier condamné aux États-Unis sous le *Computer Fraud and Abuse Act* (400 heures de travaux d'intérêt général, 10 000 $ d'amende). L'incident a directement conduit à la création du **CERT** (Computer Emergency Response Team) — le modèle sur lequel s'est basé le CERT-FR actuel. + +**Lien avec le cours :** +```python +# Exemple simplifié : un buffer overflow en C (concept) +# En Python, ce risque n'existe pas directement grâce au typage dynamique +# Mais illustre pourquoi valider les entrées utilisateur est ESSENTIEL + +def lire_commande(entree_utilisateur): + # MAUVAIS : exécuter directement ce que l'utilisateur envoie + # eval(entree_utilisateur) ← DANGER : injection de code ! + + # BON : valider et filtrer + commandes_autorisees = ["bonjour", "aide", "quitter"] + if entree_utilisateur in commandes_autorisees: + return entree_utilisateur + else: + return "Commande inconnue" +``` + +> Le ver Morris a 38 ans, mais ses techniques (buffer overflow, exploitation de services réseau) sont toujours au cœur des vulnérabilités corrigées chaque mois par Microsoft. L'actualité du jour boucle la boucle. + +--- + +## 📊 TABLEAU RÉCAPITULATIF + +| Concept NSI | Lié à | Programme Première/Terminale | +|---|---|---| +| Vulnérabilité / Zero-day | Actu 1 — Patch Tuesday | Sécurité des systèmes | +| Réseaux (AS, routage) | Actu 2 — Iran coupure internet | Architecture des réseaux | +| Protocoles non sécurisés (GPS) | Actu 2 — GPS spoofing | Protocoles réseau | +| Intelligence artificielle / LLM | Actu 3 — GPT-5, Gemini 3.1 | IA & données | +| Qubit / Informatique quantique | Actu 4 — Pasqal | Représentation de l'information | +| Botnet / Malware | Actu 5 — SocksEscort | Cybersécurité | +| Buffer overflow / Injection | Anecdote — Ver Morris 1988 | Programmation sécurisée | diff --git a/news/2026-03-24.md b/news/2026-03-24.md new file mode 100644 index 0000000..6753dbc --- /dev/null +++ b/news/2026-03-24.md @@ -0,0 +1,118 @@ +# News NSI - Mardi 24 mars 2026 + +--- + +## 🗞️ ACTUALITÉS + +--- + +### 1. La guerre des IA : GPT-5.4, Claude Sonnet 4.6 et Gemini 3.1 arrivent en même temps + +**Ce qui s'est passé :** OpenAI, Anthropic et Google ont publié à quelques jours d'intervalle de nouvelles versions majeures de leurs modèles d'IA. Les performances sont si proches que les experts parlent de "course au coude à coude". Plus notable encore : le protocole **MCP (Model Context Protocol)** inventé par Anthropic est devenu le standard universel pour connecter des agents IA à des outils externes — désormais adopté par OpenAI, Microsoft et Google. + +**Concept NSI lié :** Protocoles de communication, API, interopérabilité des systèmes + +> 💡 Un protocole, c'est comme une langue commune. Ici, MCP permet à un programme IA de "parler" à n'importe quel outil (agenda, base de données, navigateur...) de façon standardisée — exactement comme HTTP permet à n'importe quel navigateur de parler à n'importe quel serveur web. + +*Source : [iaboosts.com](https://iaboosts.com/nouveautes-ia-mars-2026/)* + +--- + +### 2. Android sous attaque : le malware "Perseus" vole vos mots de passe + +**Ce qui s'est passé :** Un nouveau logiciel malveillant baptisé **Perseus** cible les smartphones Android. Une fois installé (souvent via une fausse application), il exfiltre les mots de passe, les données bancaires et les identifiants. Il a été identifié cette semaine par plusieurs chercheurs en sécurité. + +**Concept NSI lié :** Cybersécurité, logiciels malveillants (malware), chiffrement des données + +> 💡 Perseus illustre pourquoi le **principe du moindre privilège** est fondamental : une application ne devrait accéder qu'aux ressources strictement nécessaires. Sur Android, chaque app doit demander des permissions — refuser celles non justifiées réduit la surface d'attaque. + +*Source : [dcod.ch](https://dcod.ch/2026/03/22/cybersecurite-les-16-actualites-majeures-du-22-mars-2026/)* + +--- + +### 3. Supply chain attack : un outil de sécurité open source empoisonné + +**Ce qui s'est passé :** Des attaquants ont publié une fausse version de **Trivy** (v0.69.4), un outil open source populaire qui analyse la sécurité des conteneurs. Cette version malveillante contenait un script qui volait automatiquement les secrets (tokens, clés API) dans les pipelines CI/CD des développeurs qui la téléchargeaient. + +**Concept NSI lié :** Open source, chaîne de dépendances logicielles, intégrité des données (hachage) + +> 💡 C'est une **attaque par chaîne d'approvisionnement** (*supply chain attack*) : on ne cible pas directement la victime, mais un outil dont elle dépend. La parade ? Vérifier le **hash SHA-256** de chaque téléchargement — une signature numérique unique qui change dès qu'un seul octet est modifié. + +*Source : [LeMagIT / Cyberhebdo](https://www.lemagit.fr/actualites/366640539/Cyberhebdo-du-20-mars-2026-des-services-publics-frappes-dans-le-monde-entier)* + +--- + +### 4. Ransomware : des services publics paralysés dans le monde entier + +**Ce qui s'est passé :** Mi-mars 2026, plusieurs collectivités publiques ont été frappées par des **ransomwares** : le comté de Lucas (Ohio) a vu ses portails publics hors ligne, la ville de Foster City a perdu l'accès à ses services. En France, la Stratégie Nationale de Cybersécurité 2026–2030 vient d'être publiée pour mieux protéger les administrations. + +**Concept NSI lié :** Chiffrement, ransomware, sauvegardes (politique 3-2-1) + +> 💡 Un ransomware **chiffre** tous les fichiers de la victime et réclame une rançon pour la clé de déchiffrement. La meilleure défense reste la **règle de sauvegarde 3-2-1** : 3 copies, sur 2 supports différents, dont 1 hors ligne (déconnectée du réseau). + +*Source : [GlobalSecurityMag](https://www.globalsecuritymag.fr/bulletin-d-actualite-certfr-2026-act-012-23-mars-2026.html)* + +--- + +### 5. French Tech : 1,14 milliard d'euros levés en une semaine + +**Ce qui s'est passé :** La semaine du 16 mars, les startups françaises ont levé **1,14 milliard d'euros**. Parmi elles, **Pigment** — une startup parisienne d'IA pour la planification financière — dont les clients sont Uber, Unilever et Siemens. Elle approche les 100 millions de dollars de revenus annuels récurrents. + +**Concept NSI lié :** Intelligence artificielle, modèles prédictifs, données structurées + +> 💡 Pigment utilise l'IA pour analyser des millions de données financières et produire des **prévisions**. C'est un cas concret d'**apprentissage automatique supervisé** appliqué à des données tabulaires — le type de données que vous manipulez avec Python et pandas. + +*Source : [French Tech Updates](https://frenchtechupdates.beehiiv.com/p/march-16-2026)* + +--- + +## 📼 ANECDOTE HISTORIQUE + +### 1991 — Linux est né dans une chambre d'étudiant + +**Contexte :** En 1991, Linus Torvalds est un étudiant finlandais de 21 ans à l'Université d'Helsinki. Il utilise MINIX, un mini-Unix éducatif, mais il en est frustré : il ne peut pas le modifier librement. + +**Ce qui s'est passé :** Le **25 août 1991**, Linus poste ce message légendaire sur le forum Usenet : + +``` +Hello everybody out there using minix - + +I'm doing a (free) operating system (just a hobby, won't be +big and professional like gnu) for 386(486) AT clones. +``` + +Il publie le noyau Linux 0.01 : **10 239 lignes de C**. Trente-cinq ans plus tard, le noyau Linux 6.x en compte **plus de 30 millions**. Il fait tourner 97 % des serveurs web mondiaux, Android, et... la quasi-totalité des supercalculateurs de la planète. + +**Lien avec le cours :** +- **Architecture matérielle / logicielle** : un système d'exploitation gère la mémoire, les processus, les entrées/sorties — tout ce que vous étudiez en NSI +- **Open source et licences** : Linux est sous licence **GPL** — le code source est librement consultable, modifiable et redistribuable (mais les modifications doivent rester ouvertes) +- **Langage C** : le noyau Linux est écrit en C, le langage qui a inspiré Python, Java et presque tous les langages modernes + +**Mini-exemple — le premier "Hello, world" en C (style 1991) :** +```c +#include + +int main() { + printf("Hello, world!\n"); + return 0; +} +``` + +> 🎬 **À regarder** : [INA — reportage FR3 sur Linux et le logiciel libre (années 90)](https://www.ina.fr) *(rechercher "Linux logiciel libre" sur ina.fr)* + +--- + +## 📊 TABLEAU RÉCAPITULATIF + +| # | Actualité | Concept NSI | Niveau | +|---|-----------|-------------|--------| +| 1 | Guerre des IA (GPT-5.4 / Claude / Gemini) | Protocoles, API, interopérabilité | Terminale | +| 2 | Malware Perseus (Android) | Cybersécurité, permissions, principe du moindre privilège | Première | +| 3 | Trivy empoisonné (supply chain) | Hachage SHA-256, intégrité, open source | Première / Terminale | +| 4 | Ransomware sur services publics | Chiffrement symétrique, sauvegardes 3-2-1 | Première | +| 5 | French Tech : 1,14 Md€ levés | IA, apprentissage supervisé, données tabulaires | Première / Terminale | +| H | Linux né en 1991 | OS, open source, langage C, architecture | Première | + +--- + +*Généré le 24/03/2026 — Sources : LeMagIT, GlobalSecurityMag, dcod.ch, iaboosts.com, French Tech Updates* diff --git a/news/2026-03-27.md b/news/2026-03-27.md new file mode 100644 index 0000000..6ebc92d --- /dev/null +++ b/news/2026-03-27.md @@ -0,0 +1,153 @@ +# News NSI - Vendredi 27 Mars 2026 + +--- + +## 🗞️ ACTUALITÉS DU JOUR + +--- + +### 1. 🤖 Un agent IA de Meta provoque une fuite de données interne + +**Ce qui s'est passé :** Un agent IA utilisé en interne chez Meta a donné un mauvais conseil technique, déclenchant un incident de sécurité de niveau élevé. Des employés ont pu accéder temporairement à des données sensibles d'autres utilisateurs. + +**Pour les lycéens :** Même les systèmes les plus sophistiqués peuvent se tromper. Un agent IA, c'est un programme qui prend des décisions de façon autonome — mais s'il n'est pas bien encadré, ses erreurs peuvent avoir de vraies conséquences sur la confidentialité des données. + +**Concept NSI :** Systèmes autonomes, confidentialité des données, sécurité informatique + +**Source :** [IA & Cybersécurité — 25 mars 2026](https://dcod.ch/2026/03/25/ia-cybersecurite-les-4-actus-cles-du-25-mar-2026/) + +--- + +### 2. 🇫🇷 Mistral déploie un assistant IA souverain pour 30 000 agents de l'État français + +**Ce qui s'est passé :** La startup française Mistral AI, en partenariat avec la DINUM (Direction Interministérielle du Numérique), déploie **Le Chat** comme assistant IA pour 30 000 fonctionnaires français. L'objectif : ne pas dépendre de solutions américaines comme ChatGPT. + +**Pour les lycéens :** La **souveraineté numérique**, c'est la capacité d'un pays à contrôler ses propres données et outils informatiques. La France parie sur ses propres entreprises tech pour ne pas confier ses données d'État à des acteurs étrangers. + +**Concept NSI :** Souveraineté numérique, modèles de langage (LLM), données publiques + +**Source :** [IA Made in France — ia-info.fr](https://www.ia-info.fr/16-mars-2026-ce-qu-il-faut-retenir-sur-l-intelligence-artificielle.html) + +--- + +### 3. 🛒 Faille critique sur Magento/Adobe Commerce : des milliers de boutiques exposées + +**Ce qui s'est passé :** Une nouvelle vulnérabilité baptisée **PolyShell** touche les plateformes e-commerce Magento Open Source et Adobe Commerce. Elle permet à un attaquant non authentifié d'uploader un fichier malveillant via l'API REST et d'exécuter du code sur le serveur. Depuis le 19 mars, plus de 50 adresses IP scannent activement les sites vulnérables. + +**Pour les lycéens :** Une **API REST** permet à deux programmes de communiquer via le Web. Si elle est mal sécurisée, un attaquant peut s'en servir comme porte d'entrée — sans même avoir de mot de passe. C'est typiquement ce qu'on appelle une **injection de code**. + +**Concept NSI :** API, requêtes HTTP, failles de sécurité, injection de code + +**Source :** [The Hacker News](https://thehackernews.com/) + +--- + +### 4. 🎣 Phishing par "device code" : 340 organisations ciblées dans le monde + +**Ce qui s'est passé :** Des chercheurs en cybersécurité ont découvert une campagne active de **phishing par code d'appareil** ciblant des comptes Microsoft 365 dans plus de 340 organisations aux États-Unis, Canada, Australie, Nouvelle-Zélande et Allemagne. + +**Pour les lycéens :** Le **phishing** (hameçonnage) consiste à tromper un utilisateur pour lui voler ses identifiants. La variante "device code" exploite un mécanisme d'authentification prévu pour les appareils sans clavier (télés connectées, etc.) pour générer un faux lien de connexion. L'utilisateur croit se connecter normalement, mais il donne en réalité accès à son compte. + +**Concept NSI :** Authentification, protocoles de sécurité, ingénierie sociale + +**Source :** [The Hacker News](https://thehackernews.com/) + +--- + +### 5. 🦊 Firefox 148 intègre un tableau de bord de contrôle de l'IA + +**Ce qui s'est passé :** Mozilla a publié **Firefox 148** avec un nouveau panneau centralisé permettant aux utilisateurs de gérer ou désactiver toutes les fonctionnalités d'intelligence artificielle intégrées au navigateur. + +**Pour les lycéens :** De plus en plus de logiciels intègrent de l'IA par défaut. Mozilla fait le choix de donner le **contrôle à l'utilisateur** — c'est un enjeu important : qui décide de ce que fait l'IA pour vous ? + +**Concept NSI :** Navigateur web, vie privée, interface utilisateur, consentement numérique + +**Source :** [IA & Cybersécurité — 25 mars 2026](https://dcod.ch/2026/03/25/ia-cybersecurite-les-4-actus-cles-du-25-mar-2026/) + +--- + +## 📼 ANECDOTE HISTORIQUE + +### Le Bug de l'An 2000 (Y2K) — 1999/2000 + +**Contexte :** Dans les années 60 à 80, pour économiser de la mémoire (qui coûtait très cher), les développeurs stockaient les années sur **2 chiffres** seulement : `99` pour 1999, `85` pour 1985. + +**Ce qui s'est passé :** À l'approche de l'an 2000, les informaticiens ont réalisé que les systèmes allaient interpréter `00` comme 1900 et non 2000. Résultat : des avions qui n'auraient plus su calculer leur âge de maintenance, des centrales nucléaires avec des horloges cassées, des banques incapables de calculer les intérêts… + +Des milliers d'ingénieurs ont travaillé des années pour corriger le problème. Le coût mondial a été estimé à **300 milliards de dollars**. Et le 1er janvier 2000, finalement... presque rien de grave ne s'est passé — grâce à ce travail colossal en coulisses. + +**Lien avec le cours :** C'est l'illustration parfaite que le **choix d'une représentation des données** a des conséquences à long terme. En NSI, quand on code une date, on réfléchit toujours au format : entier, chaîne, timestamp... + +**Exemple de code (Python) :** +```python +# Le problème Y2K en simplifié : +annee_sur_2_chiffres = 99 +annee_reelle = 1900 + annee_sur_2_chiffres # → 1999 ✓ + +annee_sur_2_chiffres = 0 # Le 1er janvier 2000... +annee_reelle = 1900 + annee_sur_2_chiffres # → 1900 ✗ Bug ! + +# La solution : stocker sur 4 chiffres +from datetime import date +aujourd_hui = date.today() +print(aujourd_hui.year) # → 2026, pas d'ambiguïté +``` + +**Source :** [Chronologie de l'informatique — Wikipédia](https://fr.wikipedia.org/wiki/Chronologie_de_l'informatique) + +--- + +### 6. 🧠 Google compresse les modèles IA grâce aux distances entre vecteurs + +**Ce qui s'est passé :** Des chercheurs de Google ont publié des travaux sur la **quantification vectorielle** appliquée aux modèles d'IA. Un modèle comme Gemini contient des milliards de paramètres — des listes de nombres décimaux très précis — qui occupent des dizaines de gigaoctets en RAM. L'idée de Google : remplacer ces nombres précis par des **coordonnées** pointant vers un petit dictionnaire de valeurs pré-calculées, en utilisant la **distance** pour trouver la valeur la plus proche. Le gain en mémoire peut atteindre un facteur 8, sans perte notable de qualité. + +**Pour les lycéens :** Un modèle d'IA stocke ses "connaissances" sous forme de **vecteurs** — des listes de nombres comme `[0.83, -1.47, 0.21, ...]`. Stocker des millions de tels vecteurs avec une grande précision coûte énormément de RAM. La technique de Google construit d'abord un petit **dictionnaire** de vecteurs représentatifs (quelques milliers d'entrées). Ensuite, pour chaque vecteur du modèle, on calcule lequel dans le dictionnaire est le plus **proche** (en mesurant une distance, comme en géométrie), et on stocke uniquement **son numéro**. Au lieu de stocker 100 nombres décimaux, on stocke juste un entier. La RAM nécessaire s'effondre. + +**Analogie :** Tu dois noter 1000 nuances de couleurs différentes. Au lieu d'écrire les valeurs RGB exactes de chacune (ex. `(231, 87, 43)`), tu crées une palette de 16 couleurs standards, et pour chaque nuance tu notes juste "couleur n°7" — la plus proche. Tu perds un peu de précision, mais tu divises la taille de tes notes par 10. + +**Concept NSI :** Vecteurs (listes), distance, représentation des données, compromis précision/mémoire + +**Exemple de code (Python — illustration simplifiée) :** +```python +import math + +# Un vecteur du modèle (valeurs précises, coûteuses à stocker) +vecteur = [0.83, -1.47, 0.21] + +# Dictionnaire de vecteurs représentatifs (beaucoup plus petit) +dictionnaire = [ + [1.0, -1.5, 0.0], # entrée 0 + [0.8, -1.4, 0.2], # entrée 1 + [-0.5, 0.3, 1.1], # entrée 2 +] + +def distance(a, b): + return math.sqrt(sum((x - y) ** 2 for x, y in zip(a, b))) + +# On cherche l'entrée la plus proche dans le dictionnaire +plus_proche = min(range(len(dictionnaire)), + key=lambda i: distance(vecteur, dictionnaire[i])) + +print(f"On stocke juste l'indice : {plus_proche}") # → 1 +# Au lieu de stocker [0.83, -1.47, 0.21], on stocke juste "1" +``` + +**Source :** [Quantization research — Google DeepMind](https://arxiv.org/abs/2305.13245) + +--- + +## 📊 TABLEAU RÉCAPITULATIF — Concepts NSI du jour + +| Concept NSI | News associée | Niveau | +|---|---|---| +| Agents IA autonomes | Fuite de données chez Meta | Terminale | +| Souveraineté numérique & LLM | Mistral pour l'État français | Première | +| API REST & injection de code | Faille PolyShell / Magento | Première | +| Authentification & phishing | Campagne device code | Première | +| Interface utilisateur & vie privée | Firefox 148 | Seconde | +| Représentation des données (dates) | Bug de l'an 2000 | Première | +| Vecteurs & optimisation mémoire | GQA de Google (KV-cache) | Première | + +--- + +*Sources : [dcod.ch](https://dcod.ch/2026/03/25/ia-cybersecurite-les-4-actus-cles-du-25-mar-2026/) · [thehackernews.com](https://thehackernews.com/) · [ia-info.fr](https://www.ia-info.fr/16-mars-2026-ce-qu-il-faut-retenir-sur-l-intelligence-artificielle.html) · [servicesmobiles.fr](https://www.servicesmobiles.fr/rapport-cybersecurite-2026-attaques-cloud-et-ia-redessinent-les-risques-111050) · [wikipedia.org](https://fr.wikipedia.org/wiki/Chronologie_de_l'informatique)* diff --git a/news/2026-04-07.md b/news/2026-04-07.md new file mode 100644 index 0000000..a9f89cf --- /dev/null +++ b/news/2026-04-07.md @@ -0,0 +1,122 @@ +# News NSI - Mardi 07 Avril 2026 + +--- + +## ACTUALITÉS + +--- + +### 1. Le compte npm d'Axios piraté — 100 millions d'utilisateurs exposés + +**Ce qui s'est passé :** Des cybercriminels ont compromis le compte npm d'Axios, une bibliothèque JavaScript utilisée pour faire des requêtes HTTP. Avec plus de **100 millions de téléchargements par semaine**, cette attaque illustre ce qu'on appelle une **attaque sur la chaîne d'approvisionnement logicielle** (*supply chain attack*) : en corrompant une dépendance, on infecte des milliers de projets d'un seul coup. + +**Concept NSI lié :** Réseaux / Sécurité — protocoles HTTP, intégrité des paquets, gestion des dépendances + +**Pourquoi c'est important pour toi :** Quand tu fais `pip install` ou `npm install`, tu fais confiance à un registre centralisé. Si ce registre est compromis, ton programme peut embarquer du code malveillant sans que tu le saches. + +> Source : [Epitech — Actualités Tech et IA du 03 avril 2026](https://www.epitech.eu/2026/04/06/actualite-tech-et-ia-03-04-2026/) + +--- + +### 2. Anthropic publie accidentellement le code source de Claude Code sur npm + +**Ce qui s'est passé :** Anthropic, l'entreprise derrière Claude (l'IA qui me fait tourner), a publié par erreur un fichier *source map* sur le registre npm, exposant **1 900 fichiers TypeScript** — soit le code source interne de Claude Code. Une erreur humaine dans le processus de déploiement. + +**Concept NSI lié :** Programmation — open source vs propriétaire, registres de paquets, déploiement logiciel + +**Ce que ça illustre :** Même les meilleures équipes d'ingénieurs font des erreurs de configuration. La gestion des secrets et des publications automatisées est un vrai défi en entreprise. + +> Source : [IT-Connect — Actualités Cybersécurité](https://www.it-connect.fr/actualites/actu-securite/) · [Epitech](https://www.epitech.eu/2026/04/06/actualite-tech-et-ia-03-04-2026/) + +--- + +### 3. Faille critique dans Langflow exploitée en moins de 24h + +**Ce qui s'est passé :** La faille **CVE-2026-33017** dans Langflow (un outil pour créer des pipelines d'IA) est passée de *"découverte"* à *"exploitée activement"* en moins de 24 heures. Le malware associé s'effaçait automatiquement après infection, rendant sa détection quasi impossible par les antivirus classiques. + +**Concept NSI lié :** Cybersécurité — CVE (Common Vulnerabilities and Exposures), cycle de vie d'une vulnérabilité, antivirus et détection + +**À retenir :** Un numéro CVE est l'identifiant officiel d'une faille. Entre la publication d'un CVE et le déploiement du correctif, les attaquants ont souvent une fenêtre d'opportunité. C'est la course aux patchs. + +> Source : [CERT-FR](https://www.cert.ssi.gouv.fr/) · [Epitech](https://www.epitech.eu/2026/04/06/actualite-tech-et-ia-03-04-2026/) + +--- + +### 4. Mistral AI lève 830 M$ pour construire un data center en région parisienne + +**Ce qui s'est passé :** La startup française Mistral AI (fondée à Paris en 2023) vient de lever **830 millions de dollars** pour construire un data center à **Bruyères-le-Châtel** (Essonne), qui accueillera **13 800 puces Nvidia GB300**. Mistral, avec 2,9 milliards de dollars levés au total, est la startup d'IA la mieux financée d'Europe. + +**Concept NSI lié :** Architecture — GPU vs CPU, infrastructure cloud, souveraineté numérique + +**Enjeu de souveraineté :** Avoir des centres de calcul en France permet de ne pas dépendre uniquement des géants américains (AWS, Google Cloud, Azure) pour faire tourner des IA européennes. C'est un enjeu politique et stratégique fort en 2026. + +> Source : [SIDE Blog — IA actualités semaine](https://alain.goudey.eu/side/2026/04/05/intelligence-artificielle-6-actualites-qui-redessinent-la-semaine-des-decideurs/) · [Indeed Hiring Lab France](https://www.hiringlab.org/fr/blog/2026/04/01/avril-2026-lia-progresse-dans-un-marche-du-travail-en-recul/) + +--- + +### 5. L'IA transforme les métiers — même hors de la tech + +**Ce qui s'est passé :** Selon Indeed Hiring Lab, alors que le marché de l'emploi général **recule**, les offres d'emploi mentionnant l'IA **progressent de +6 à +8 points** dans les métiers tech, mais aussi dans le **marketing, la gestion de projet et les RH**. + +**Concept NSI lié :** Impact sociétal du numérique — automatisation, collaboration humain-machine + +**Ce que ça veut dire pour toi :** Peu importe ton futur métier, savoir interagir avec des outils d'IA (et comprendre leurs limites) devient une compétence de base, comme savoir utiliser un tableur dans les années 2000. + +> Source : [Indeed Hiring Lab France — Avril 2026](https://www.hiringlab.org/fr/blog/2026/04/01/avril-2026-lia-progresse-dans-un-marche-du-travail-en-recul/) + +--- + +## ANECDOTE HISTORIQUE + +### Le Bug de l'An 2000 (Y2K) — La panique numérique mondiale + +**Contexte — Années 1960 à 1990** + +Quand les premiers programmeurs codaient des logiciels dans les années 60-70, la mémoire était **extrêmement rare et chère**. Pour économiser de l'espace, ils stockaient les années sur **2 chiffres** au lieu de 4 : `75` pour `1975`, `98` pour `1998`. + +**Ce qui s'est passé le 1er janvier 2000** + +En théorie, au passage à l'an 2000, les systèmes auraient interprété `00` comme... **1900**. Des avions auraient pu croire voler en 1900, des banques calculer des intérêts sur un siècle, des centrales nucléaires perdre leur horloge interne. + +Des **milliards de dollars** ont été dépensés dans le monde entier pour auditer et corriger des milliers de systèmes. En France, des équipes entières de développeurs ont travaillé des années à réécrire du code COBOL vieux de 30 ans. + +Le passage s'est finalement fait **sans catastrophe majeure** — preuve que la mobilisation a fonctionné. Mais certains systèmes mineurs ont bien planté. + +**Lien avec le cours** + +- **Représentation des données** : stocker `2` octets au lieu de `4` pour une année semblait anodin... mais ce choix a coûté des millions 30 ans plus tard. +- **Dette technique** : un mauvais choix de conception se paie toujours, tôt ou tard. +- **Systèmes critiques** : certains codes COBOL des années 70 tournaient encore en production en l'an 2000 — et certains tournent encore aujourd'hui dans des banques. + +```python +# Le bug en simplifié : +annee_stockee = 99 # stocké sur 2 chiffres +annee_suivante = (annee_stockee + 1) % 100 # → 0 +print(f"Année interprétée : 19{annee_suivante:02d}") # → 1900 ! + +# La correction : +annee_complete = 1999 +annee_suivante = annee_complete + 1 # → 2000, sans ambiguïté +``` + +**Pour aller plus loin** + +- [INA — Le bogue de l'an 2000 au journal télévisé (1999)](https://www.ina.fr) *(rechercher "bogue an 2000" sur ina.fr)* +- [Wikipedia — Problème de l'an 2000](https://fr.wikipedia.org/wiki/Probl%C3%A8me_de_l%27an_2000) + +--- + +## TABLEAU RÉCAPITULATIF + +| Thème | Concept NSI | Niveau | News associée | +|---|---|---|---| +| Attaque supply chain (npm/Axios) | Réseaux, protocoles, sécurité | ★★★ | #1 | +| Fuite de code source (Anthropic) | Open/closed source, déploiement | ★★ | #2 | +| Faille CVE & exploitation rapide | Cybersécurité, CVE, antivirus | ★★★ | #3 | +| Data center & GPU (Mistral) | Architecture matérielle, cloud | ★★ | #4 | +| IA et marché du travail | Impact sociétal du numérique | ★ | #5 | +| Bug Y2K — représentation des données | Codage des données, mémoire | ★★ | Anecdote | + +--- + +*Sources : [Epitech Tech&IA](https://www.epitech.eu/2026/04/06/actualite-tech-et-ia-03-04-2026/) · [Indeed Hiring Lab](https://www.hiringlab.org/fr/blog/2026/04/01/avril-2026-lia-progresse-dans-un-marche-du-travail-en-recul/) · [SIDE Blog IA](https://alain.goudey.eu/side/2026/04/05/intelligence-artificielle-6-actualites-qui-redessinent-la-semaine-des-decideurs/) · [CERT-FR](https://www.cert.ssi.gouv.fr/) · [IT-Connect](https://www.it-connect.fr/actualites/actu-securite/) · [Thales Cyber](https://cds.thalesgroup.com/fr/hot-topics/les-nouvelles-tendances-de-la-cybersecurite-2026)* diff --git a/news/2026-06-02.md b/news/2026-06-02.md new file mode 100644 index 0000000..dff64b0 --- /dev/null +++ b/news/2026-06-02.md @@ -0,0 +1,143 @@ +# News NSI - Lundi 2 Juin 2026 + +--- + +## 🗞️ ACTUALITÉS DU JOUR + +--- + +### 1. Nvidia dévoile le RTX Spark : un "superchip" pour concurrencer Apple + +**Annoncé le 27 mai 2026 au salon Computex, Taiwan** + +Nvidia a présenté le [RTX Spark Superchip](https://www.tomshardware.com/laptops/nvidia-unveils-rtx-spark-superchip-at-computex-2026-new-platform-promises-to-turn-windows-into-an-agentic-ai-os-with-arm-cpu-blackwell-gpu-and-128gb-unified-memory), une puce révolutionnaire qui combine un processeur ARM (20 cœurs) et un GPU Blackwell (6 144 cœurs CUDA) avec jusqu'à 128 Go de mémoire unifiée. Objectif affiché : faire tourner Windows comme un OS "agentique IA", capable d'exécuter des modèles de 120 milliards de paramètres directement sur l'ordinateur, sans connexion cloud. + +Les PC équipés de ce chip (Dell, HP, Lenovo, Microsoft Surface Ultra) promettent du jeu en 1440p à 100 FPS et de l'édition vidéo en 12K. Nvidia s'attaque directement aux puces M5 d'Apple. + +**🔗 Concept NSI :** Architecture matérielle — CPU vs GPU, mémoire unifiée, parallélisme de calcul. La différence entre un processeur à quelques cœurs puissants (CPU) et un GPU avec des milliers de petits cœurs spécialisés dans les calculs parallèles. + +**Source :** [Tom's Hardware – Computex 2026](https://www.tomshardware.com/laptops/nvidia-unveils-rtx-spark-superchip-at-computex-2026-new-platform-promises-to-turn-windows-into-an-agentic-ai-os-with-arm-cpu-blackwell-gpu-and-128gb-unified-memory) + +--- + +### 2. Airbus choisit Mistral AI pour son intelligence artificielle souveraine + +**Signé le 28 mai 2026 à Paris** + +[Airbus a annoncé un contrat pluriannuel de plusieurs dizaines de millions d'euros avec Mistral AI](https://www.clubic.com/actualite-614539-airbus-choisit-le-francais-mistral-ai-pour-propulser-l-ia-souveraine-dans-ses-avions-et-ses-systemes-de-defense.html), la startup française spécialisée en IA. C'est la première fois qu'un grand industriel européen choisit publiquement un fournisseur d'IA européen pour des applications de défense et d'espace. + +L'enjeu est la **souveraineté** : Airbus travaille sur des données hautement confidentielles liées à la sécurité nationale. Utiliser ChatGPT (américain) ou Gemini (Google) serait inenvisageable. Mistral permet un déploiement "on-premise" (sur leurs propres serveurs) sans fuite de données. + +Le même jour, BMW et EDF ont aussi signé des partenariats avec Mistral AI. + +**🔗 Concept NSI :** Données et vie privée — notion de souveraineté numérique, localisation des données, cloud vs on-premise. Qui possède les données ? Où sont-elles stockées ? + +**Source :** [Clubic – Airbus & Mistral AI](https://www.clubic.com/actualite-614539-airbus-choisit-le-francais-mistral-ai-pour-propulser-l-ia-souveraine-dans-ses-avions-et-ses-systemes-de-defense.html) + +--- + +### 3. Les agents IA autonomes : la nouvelle frontière de la cybersécurité + +**Tendance lourde – Juin 2026** + +[Les "agents IA"](https://siecledigital.fr/2025/12/30/cybersecurite-et-ia-ce-qui-attend-vraiment-les-entreprises-en-2026/) sont des programmes capables de prendre des décisions et d'agir seuls — naviguer sur le web, envoyer des emails, exécuter du code — sans intervention humaine. Ils sont de plus en plus déployés en entreprise pour automatiser des tâches répétitives. + +Problème : ces agents ont souvent accès à des données sensibles et des permissions élevées, ce qui en fait des cibles de choix pour les hackers. En 2026, les experts en cybersécurité signalent une nouvelle forme d'attaque : compromettre un agent IA pour qu'il effectue des actions malveillantes à la place de l'humain qu'il est censé aider. + +> "L'IA sera la norme en 2026 tant pour les attaquants que pour les défenseurs." + +**🔗 Concept NSI :** Cybersécurité — notion de surface d'attaque, droits d'accès (permissions), principe du moindre privilège. Plus un programme a de droits, plus il est dangereux s'il est compromis. + +**Source :** [Siècle Digital – Agents IA & Cybersécurité](https://siecledigital.fr/2025/12/30/cybersecurite-et-ia-ce-qui-attend-vraiment-les-entreprises-en-2026/) + +--- + +### 4. 85 % des développeurs utilisent l'IA pour coder — mais avec quels risques ? + +**Enquête JetBrains – publiée en 2025, toujours d'actualité** + +Une enquête menée par JetBrains auprès de 25 000 développeurs révèle que [85 % d'entre eux utilisent des outils d'IA](https://www.darkreading.com/application-security/coders-adopt-ai-agents-security-pitfalls-lurk-2026) (GitHub Copilot, ChatGPT, Claude…) pour écrire du code, déboguer ou concevoir des applications. C'est une transformation radicale du métier de développeur en moins de 3 ans. + +Revers de la médaille : le code généré par IA contient souvent des failles de sécurité que les développeurs n'identifient pas, faute de comprendre ce que la machine a écrit. Les experts parlent de **"vibe coding"** — coder à l'instinct avec l'IA sans vérifier. + +**🔗 Concept NSI :** Programmation — lecture, compréhension et vérification du code. Un programme correct n'est pas forcément un programme sûr. L'importance de comprendre ce qu'on exécute. + +**Source :** [Dark Reading – AI Agents & Security Pitfalls 2026](https://www.darkreading.com/application-security/coders-adopt-ai-agents-security-pitfalls-lurk-2026) + +--- + +### 5. VivaTech 2026 : Paris capitale mondiale de l'IA dans 15 jours + +**17–20 juin 2026 — Porte de Versailles, Paris** + +Pour ses 10 ans, [VivaTech](https://www.franceinfo.fr/partenariats/evenement-viva-tech-le-rendez-vous-startup-et-tech-n-1-en-europe-revient-pour-ses-10-ans-a-paris-porte-de-versailles-du-17-au-20-juin-2026_8014112.html) sera le plus grand salon tech européen jamais organisé : 180 000 visiteurs attendus, 15 000 startups, 4 000 investisseurs. L'IA sera le thème central — mais une IA "concrète et applicable" dans la logistique, la santé, l'automobile, le luxe. + +Point original : le 14 juin, les Champs-Élysées seront piétonnisés et transformés en un grand show tech gratuit avec robots, IA, mobilité et expériences immersives. + +**🔗 Concept NSI :** Numérique & société — l'écosystème tech français, les startups, l'innovation. Comment une idée devient un produit qui transforme un secteur entier. + +**Source :** [France Info – VivaTech 2026](https://www.franceinfo.fr/partenariats/evenement-viva-tech-le-rendez-vous-startup-et-tech-n-1-en-europe-revient-pour-ses-10-ans-a-paris-porte-de-versailles-du-17-au-20-juin-2026_8014112.html) + +--- + +## 🕰️ ANECDOTE HISTORIQUE + +### 11 mai 1997 : Deep Blue bat Kasparov — le jour où l'IA a vaincu l'homme aux échecs + +**Contexte** + +En 1997, Garry Kasparov est le champion du monde d'échecs incontesté depuis 12 ans. IBM a conçu **Deep Blue**, un supercalculateur capable d'analyser 200 millions de positions par seconde grâce à des puces dédiées. Il ne "comprend" pas les échecs — il explore un arbre de possibilités en profondeur grâce à l'algorithme **minimax** avec élagage alpha-bêta. + +**Ce qui s'est passé** + +Le 11 mai 1997, à New York, après un match en 6 parties, Deep Blue bat Kasparov 3,5 - 2,5. C'est la première fois dans l'histoire qu'un ordinateur bat le meilleur joueur humain du monde en conditions officielles. Kasparov, sous le choc, accuse IBM de triche. IBM refuse une revanche et… démantèle Deep Blue aussitôt. + +> *"On sentait qu'on changeait de civilisation."* — Bruno Nahon, producteur présent au match + +**Lien avec le cours** + +Deep Blue n'utilise pas d'apprentissage automatique (Machine Learning) — c'est de la **force brute algorithmique** : parcourir un arbre de décision avec des heuristiques (règles d'évaluation d'une position). C'est l'opposé de l'IA moderne qui apprend de millions de parties. Cet événement a posé une question fondamentale : *l'intelligence, c'est quoi exactement ?* + +**Lien INA** 📺 + +👉 [Vidéo INA — "1997 : l'ordinateur bat Garry Kasparov"](https://www.ina.fr/ina-eclaire-actu/1997-l-ordinateur-deep-blue-bat-garry-kasparov-un-tournant-dans-l-histoire-des-echecs) + +**Extrait de l'algorithme Minimax (Python simplifié)** + +```python +def minimax(position, profondeur, maximise): + if profondeur == 0: + return evaluer(position) # score de la position + + if maximise: + meilleur = -infini + for coup in coups_possibles(position): + score = minimax(jouer(position, coup), profondeur - 1, False) + meilleur = max(meilleur, score) + return meilleur + else: + meilleur = +infini + for coup in coups_possibles(position): + score = minimax(jouer(position, coup), profondeur - 1, True) + meilleur = min(meilleur, score) + return meilleur +``` + +Deep Blue explorait cet arbre jusqu'à 12 niveaux de profondeur — soit des milliards de positions analysées en quelques secondes. + +--- + +## 📊 TABLEAU RÉCAPITULATIF + +| # | Actu / Anecdote | Concept NSI | Niveau | +|---|---|---|---| +| 1 | Nvidia RTX Spark Superchip | Architecture matérielle — CPU, GPU, mémoire | Chapitre : Arch. & OS | +| 2 | Airbus + Mistral AI | Données, souveraineté numérique, cloud | Chapitre : Données & réseau | +| 3 | Agents IA & cybersécurité | Cybersécurité, permissions, surface d'attaque | Chapitre : Cybersécurité | +| 4 | 85 % des devs utilisent l'IA | Programmation, lecture & vérification du code | Chapitre : Programmation | +| 5 | VivaTech 2026 Paris | Numérique & société, écosystème startup | Transversal | +| 🕰️ | Deep Blue vs Kasparov (1997) | Algorithmes — minimax, récursivité, arbres | Chapitre : Algo | + +--- + +*Sources : [Tom's Hardware](https://www.tomshardware.com/laptops/nvidia-unveils-rtx-spark-superchip-at-computex-2026-new-platform-promises-to-turn-windows-into-an-agentic-ai-os-with-arm-cpu-blackwell-gpu-and-128gb-unified-memory) · [Clubic](https://www.clubic.com/actualite-614539-airbus-choisit-le-francais-mistral-ai-pour-propulser-l-ia-souveraine-dans-ses-avions-et-ses-systemes-de-defense.html) · [Siècle Digital](https://siecledigital.fr/2025/12/30/cybersecurite-et-ia-ce-qui-attend-vraiment-les-entreprises-en-2026/) · [Dark Reading](https://www.darkreading.com/application-security/coders-adopt-ai-agents-security-pitfalls-lurk-2026) · [France Info / VivaTech](https://www.franceinfo.fr/partenariats/evenement-viva-tech-le-rendez-vous-startup-et-tech-n-1-en-europe-revient-pour-ses-10-ans-a-paris-porte-de-versailles-du-17-au-20-juin-2026_8014112.html) · [INA – Deep Blue](https://www.ina.fr/ina-eclaire-actu/1997-l-ordinateur-deep-blue-bat-garry-kasparov-un-tournant-dans-l-histoire-des-echecs)* diff --git a/news/generer-news.sh b/news/generer-news.sh new file mode 100755 index 0000000..b58eb94 --- /dev/null +++ b/news/generer-news.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# Script de génération automatique des news NSI +# Usage: ./generer-news.sh [--auto] +# --auto : mode automatique (pas de confirmation, écrase le fichier existant) + +NEWS_DIR="/Users/florian/Documents/Cours/NSI/Premiere/news" +LOG_DIR="$NEWS_DIR/logs" +DATE=$(date +%Y-%m-%d) +DATE_FR=$(date +%d/%m/%Y) +FICHIER="$NEWS_DIR/$DATE.md" +LOG_FILE="$LOG_DIR/$DATE.log" + +# Crée le dossier logs si nécessaire +mkdir -p "$LOG_DIR" + +# Mode automatique ? +AUTO_MODE=false +if [ "$1" = "--auto" ]; then + AUTO_MODE=true +fi + +# Vérifie si le fichier existe déjà +if [ -f "$FICHIER" ]; then + if [ "$AUTO_MODE" = true ]; then + echo "$(date): Fichier existe déjà, régénération en mode auto" >> "$LOG_FILE" + else + echo "Le fichier $FICHIER existe déjà." + read -p "Voulez-vous le regénérer ? (o/n) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Oo]$ ]]; then + echo "Annulé." + exit 0 + fi + fi +fi + +echo "Génération des news NSI pour le $DATE..." +echo "$(date): Début de la génération" >> "$LOG_FILE" + +# Appel à Claude Code pour générer les news (avec accès web) +claude --print --allowedTools "WebSearch,WebFetch" -- "Tu es un assistant pour un professeur de NSI en Première. Utilise WebSearch pour rechercher les actualités informatiques récentes du jour. IMPORTANT: Affiche UNIQUEMENT le contenu Markdown brut, sans aucun commentaire, question ou méta-texte. Pas de phrase d'introduction ni de conclusion hors du contenu. Génère les news du jour ($DATE_FR) au format Markdown avec : 1. ACTUALITÉS (3-5 news) sur cybersécurité, IA, programmation, tech française. Pour chaque news : titre, description adaptée lycéens 16-17 ans, concept NSI lié, source. 2. ANECDOTE HISTORIQUE (1) : Un fait marquant de l'informatique années 80/90/2000 avec contexte, ce qui s'est passé, lien avec le cours, et si possible lien vidéo INA ou code exemple. 3. TABLEAU RÉCAPITULATIF des concepts NSI abordés. Format : Markdown clair, pédagogique, engageant. Commence directement par # News NSI - [Jour] [Date]" > "$FICHIER" + +if [ $? -eq 0 ]; then + echo "News générées avec succès : $FICHIER" + echo "$(date): Succès - $FICHIER" >> "$LOG_FILE" +else + echo "Erreur lors de la génération." + echo "$(date): ERREUR lors de la génération" >> "$LOG_FILE" + exit 1 +fi