Bonjour j'ai un code
import java.util.*;
import java.util.stream.IntStream;
import java.io.*;
public class projet{
public int valeur;//valeur de l'occurence
public char nom;//lettre du noeud
public projet pere;//noeud pere
public projet fd;//noeud fils droit
public projet fg;//noeud fils gauche
public int binaire;//vlaur binaire
//mon constructeur de noeud s'appelle 'projet' car le fichier s'appelle projet et je n'ai donc pas pu l'appeler noeud
public projet(int valeur, char nom, projet pere, projet fd, projet fg, int binaire){
this.valeur = valeur;
this.nom = nom;
this.pere = pere;
this.fd = fd;
this.fg = fg;
this.binaire = binaire;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Tapez une phrase : ");
String mot = sc.nextLine();
int arbre;
int car = mot.length();//taille du mot
int petit;//valeur de la plus grande occurence
int tri;//position du caractere avec la plus grande occurence
int n1 = 0;//valeur pour differencier 2 caracteres avec la meme occurence
int n2 = 0;//valeur pour differencier 2 caracteres avec la meme occurence
ArrayList<Character> alpha = new ArrayList(List.of('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',' ','!','?','.',',',';','(',')'));
ArrayList<Character> chaine = new ArrayList();//contient chaque caracteres de la chaine de caracteres passée en entrée
ArrayList<Character> lettres = new ArrayList();//contient les differentes lettres de la chaine de caracteres passée en entrée
ArrayList<Integer> nombres = new ArrayList();//contient le nombre de fois ou chaque caracteres apparait
ArrayList<Integer> nbtri = new ArrayList();
ArrayList<Character> lttri = new ArrayList();
ArrayList<Integer> NB_arbre = new ArrayList();
ArrayList<Character> LT_arbre= new ArrayList();
ArrayList<projet> noeuds = new ArrayList();//contient les noeuds de l'arbre
ArrayList<ArrayList> code = new ArrayList();//contient les codes binaires de chaque lettres du mot
for(int i = 0;i < car; i++){
chaine.add(mot.charAt(i));
}
//regarde les différentes lettres présentes dans le mot ainsi que leur occurence
System.out.println("\nVotre phrase est :\n"+mot);
for(int i = 0; i < alpha.size();i++){
int occurence = 0;
for(int j = 0; j < chaine.size();j++){
if(alpha.get(i) == chaine.get(j)){
occurence++;
}
}
if(occurence > 0){
lettres.add(alpha.get(i));
nombres.add(occurence);
}
}
//trie les lettres par occurence et ordre alphabetique
while(nombres.size() != 0){
petit = 100;
tri = 0;
for(int l = 0; l < nombres.size();l++){
if(nombres.get(l) < petit){//on regarde si l'occurence de la lettre est plus petite que la variable 'petit'
petit = nombres.get(l);//'petit' prend la valeur de l'occurence a la position 'l'
tri = l;//la variable 'tri' prend la valeur 'l'
}
else if(nombres.get(l) == petit){//si l'occurence est égale a 'petit'
for(int n = 0;n < alpha.size();n++){//on regarde dans l'alphabet
if(alpha.get(n) == lettres.get(l)){
n1 = n;
}
if(alpha.get(n) == lettres.get(tri)){
n2 = n;
}
}
if(n1 < n2){//on compare les lettres aux positions 'l' et 'tri'
tri = l;
}
}
}
nbtri.add(nombres.get(tri));
lttri.add(lettres.get(tri));
nombres.remove(tri);
lettres.remove(tri);
//la ligne ci dessous permet d'afficher les différentes étapes du tri
//System.out.println(lttri+"\n"+nbtri);
}
//on peut afficher les tableaux de lettres et d'occurence triés avec la ligne de code ci dessous
//System.out.println("\nLettres tri\u00e9es :\n"+lttri+"\n"+nbtri);
nombres = nbtri;
lettres = lttri;
final ArrayList<Integer> NB = new ArrayList(nombres);
final ArrayList<Character> LT = new ArrayList(lettres);
//création de l'arbre
while(nombres.size() != 1){
arbre = 0;
int transfert = nombres.get(0) + nombres.get(1);//prend la valeur de la somme des 2 premieres occurences
char change = lettres.get(1);//prend la valeur a la 2e position dans le tableau de lettres
//on ajoute les 2 premieres lettres du tableaux de lettres ainsi que leurs occurences dans les tableaux utilisés pour fabriquer l'arbre
NB_arbre.add(nombres.get(0));
LT_arbre.add(lettres.get(0));
NB_arbre.add(nombres.get(1));
LT_arbre.add(lettres.get(1));
//on crée un noeud par lettre ajoutées
projet noeud1 = new projet(nombres.get(0),lettres.get(0),null,null,null,2);
projet noeud2 = new projet(nombres.get(1),lettres.get(1),null,null,null,2);
nombres.remove(nombres.get(0));
lettres.remove(lettres.get(0));
//on définit la position ou seront mises les nouvelles valeurs 'transfert' et 'change' dans les tableaux de lettres et d'occurence
for(int j = 0; j < nombres.size(); j++){
if(nombres.get(j) == transfert){
for(int n = 0;n < alpha.size();n++){
if(alpha.get(n) == change){
n1 = n;
}
if(alpha.get(n) == lettres.get(j)){
n2 = n;
}
}
if(n1 < n2){
arbre = j-1;
}
else{
arbre = j ;
}
}
else if((nombres.get(j) > transfert) && (arbre == 0)){
arbre = j-1;
break;
}
}
//on met a jour les positions dans les tableaux de lettres et d'occurence
if(arbre == 0){
arbre = nombres.size() - 1;
for(int k = 0; k < arbre; k++){
nombres.set(k, nombres.get(k+1));
lettres.set(k, lettres.get(k+1));
}
}
else{
for(int k = 0; k < arbre; k++){
nombres.set(k, nombres.get(k+1));
lettres.set(k, lettres.get(k+1));
}
}
int presence1 = 0;
int presence2 = 0;
//on affecte les bonnes valeurs aux variables 'pere','fg','fd' et 'binaire' pour les noeuds
for(int i = noeuds.size()-1; i > 0; i--){
if(noeuds.get(i).nom == noeud1.nom && presence1 == 0){
noeuds.get(i).pere = noeud1;
noeuds.get(i-1).pere = noeud1;
noeuds.get(i).binaire = 1;
noeuds.get(i-1).binaire = 0;
noeud1.fg = noeuds.get(i-1);
noeud1.fd = noeuds.get(i);
presence1 = 1;
}
else if(noeuds.get(i).nom == noeud2.nom && presence2 == 0){
noeuds.get(i).pere = noeud2;
noeuds.get(i-1).pere = noeud2;
noeuds.get(i).binaire = 1;
noeuds.get(i-1).binaire = 0;
noeud2.fg = noeuds.get(i-1);
noeud2.fd = noeuds.get(i);
presence2 = 1;
}
}
//si le premier noeud n'est jamais apparu, on met son fils droit et son fils gauche a null
if(presence1 == 0){
noeud1.fg = noeud1.fd = null;
}
//si le deuxieme noeud n'est jamais apparu, on met son fils droit et son fils gauche a null
if(presence2 == 0){
noeud2.fg = noeud2.fd = null;
}
noeuds.add(noeud1);
noeuds.add(noeud2);
nombres.set(arbre, transfert);
lettres.set(arbre, change);
}
//on crée un nouveau noeud pour la derniere variable des tableaux de lettres et d'ocurrence
projet noeud = new projet(nombres.get(0),lettres.get(0),null,null,null,2);
noeuds.add(noeud);
NB_arbre.add(nombres.get(0));
LT_arbre.add(lettres.get(0));
lettres.remove(lettres.get(0));
nombres.remove(nombres.get(0));
noeuds.get(noeuds.size()-2).pere = noeud;
noeuds.get(noeuds.size()-3).pere = noeud;
noeuds.get(noeuds.size()-2).binaire = 1;
noeuds.get(noeuds.size()-3).binaire = 0;
noeud.fg = noeuds.get(noeuds.size()-3);
noeud.fd = noeuds.get(noeuds.size()-2);
//affichage code binaire
for(int i = 0; i < NB.size();i++){
for(int j = 0; j < noeuds.size(); j++){
if((LT.get(i) == noeuds.get(j).nom) && (noeuds.get(j).fg == null)){
ArrayList<Integer> bin = new ArrayList();
projet parent = new projet(0,'-',null,null,null,2);//on crée une nouveau noeud
parent = noeuds.get(j);//le nouveau noeud prend la valeur du noeud actuel
while(parent.pere != null){
bin.add(parent.binaire);//on ajoute la valeur binaire (1 ou 0) a la nouvelle arraylist
parent = parent.pere;//le noeud devient le neoud pere
}
code.add(bin);//on ajoute l'arraylist avec le code binaire a l'envers dans le tableau de code binaire
}
}
}
//Les lignes de code ci dessous permettent d'afficher le code binaire de chaque lettres du mot
/*System.out.println("\nCode binaire de chaque lettre :");
for(int i = 0; i < LT.size();i++){
System.out.print(LT.get(i)+" : ");
for(int j = code.get(i).size()-1;j >=0; j--){
System.out.print(code.get(i).get(j));
}
System.out.println();
}*/
System.out.println("\nLe code binaire de votre phrase est :");
for(int i = 0; i < chaine.size(); i++){
for(int j = 0; j < LT.size(); j++){
if(chaine.get(i) == LT.get(j)){
for(int k = code.get(j).size()-1; k >= 0; k--){//on parcourt chaque tableaux de code binaire de la derniere position a la premiere
System.out.print(code.get(j).get(k));//on affiche la valeur de la position et on obtient le code binaire dans le bon ordre
}
System.out.print(" ");
}
}
}
}
}
Je voulais voir si quelqu'un sait le faire modifier le code et le mettre en Python ou n'importe quelle autre langage
Merci d'avance