{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import math\n", "import string\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '.', '?', '!', ',', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n" ] } ], "source": [ "# signes est une chaîne de caractère contenant tous les signes utilisés dans les messages\n", "# on ajoute l'alphabet majuscule et majuscule grâce à string.ascii_uppercase+string.ascii_lowercase\n", "# la commande list transforme une chaîne de caractère en liste\n", "\n", "L=list(' '+string.ascii_uppercase+string.ascii_lowercase+'.?!,0123456789') \n", "print(L)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "67\n" ] } ], "source": [ "nL = len(L) # nombre de caractères dans notre langage\n", "print(nL)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def codage(M):\n", " n = 0\n", " for k in range(len(M)):\n", " n = n + L.index(M[k])*nL**k\n", " return n\n", " " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6772894412117139825371" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = \"Hello world!\"\n", "codage(M)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def Base(n,b): #Ecriture de n en base b (cf TP précédent), on s'en servira plus tard\n", " L=[]\n", " while n>0:\n", " L=L+[n%b]\n", " n=n//b\n", " return L \n", " " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def BaseNb(l,b): # renvoie le nombre à partir de la liste de son écriture en base b\n", " n = 0\n", " for k in range(len(l)):\n", " n = n + l[k]*b**k\n", " return n\n", " " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# On renvoie un couple d, [u,v] où d=pgcd(a,b) et ua+bv = d, cf TP algo d'Euclide\n", "\n", "def Euclide(a,b):\n", " X=np.array([[a],[b]]) # vecteur colonne (a,b)\n", " P=np.array([[1,0],[0,1]]) # Matrice identité\n", " if a