import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.text.Normalizer; import java.text.Normalizer.Form; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.List; import java.util.ArrayList; public class Anagrammes { // programme adapté du Tutorial Java Continued page 52 et 53 // trouve tous les anagrammes des mots d'un fichier (un par line) // table de transformation des caractères private static char [] trfChar = new char[256]; public static void main(String[] args) { // initialisation de la table de transformation // lettre dans elle-même, Majuscule => minuscule for (char c='a';c<='z';c++)trfChar[c]=c; for (char c='A';c<='Z';c++)trfChar[c]=Character.toLowerCase(c); // enlève les accents trfChar['à']=trfChar['â']=trfChar['À']=trfChar['Ä']='a'; trfChar['é']=trfChar['è']=trfChar['ê']=trfChar['ë']= trfChar['É']=trfChar['È']=trfChar['Ê']=trfChar['Ë']='e'; trfChar['ï']=trfChar['î']=trfChar['Ï']=trfChar['î']='i'; trfChar['ö']=trfChar['ô']=trfChar['Ö']=trfChar['Ô']='o'; trfChar['ù']=trfChar['û']=trfChar['Ù']=trfChar['Û']='u'; trfChar['ç']=trfChar['Ç']='c'; // les autres resteront à '\0' donc seront ignorés int minGroupSize = Integer.parseInt(args[1]); // lire les mots du fichiers et en faire une "multimap" Map> m = new HashMap>(); try { BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(args[0]),"UTF-8")); String word; while((word = in.readLine()) != null) { String alpha = alphabetize2(word); List l = m.get(alpha); if (l==null) m.put(alpha, l=new ArrayList()); l.add(word); } } catch(IOException e) { System.err.println(e +"sur fichier" + args[0]); } // Imprimer toutes les permutations ayant plus de minGroupSize elements for (Listl:m.values() ) { if (l.size() >= minGroupSize) System.out.println(l.size() + ": " + l); } } private static String alphabetize(String s) { int count[] = new int[256]; int len = s.length(); for (int i=0; i=256) System.out.println("pos:"+i+":"+s.charAt(i)+":"+s); else count[trfChar[s.charAt(i)]]++; } StringBuffer result = new StringBuffer(len); for (char c='a'; c<='z'; c++) for (int i=0; i java Anagrammes francaisfondamental 3 3: [ruse, rusé, user] 3: [noter, notre, nôtre] 4: [geler, grêle, léger, règle] 3: [en, ne, né] 3: [voter, votre, vôtre] les 25912 mots de moins de 6 lettres => java Anagrammes les6lettres 10 10: [bouter, boutre, brouet, broute, brouté, obture, obturé, rebout, tourbe, tourbé] 10: [esters, restes, restés, sertes, stérés, stères, terses, tersés, tresse, tressé] 15: [aviser, ravies, ravise, ravisé, revais, rêvais, révisa, sévira, sevrai, vairés, varies, variés, versai, visera, vraies] 15: [étiras, itéras, raites, resait, restai, satire, serait, sériât, starie, stérai, taries, tersai, tiares, tisera, traies] 11: [acter, caret, carte, carté, cérat, créât, écart, recta, terça, trace, tracé] 13: [acres, âcres, arecs, caser, césar, crase, créas, races, racés, sacre, sacré, scare, sérac] 16: [ancre, ancré, caner, carne, carné, cerna, crane, crané, crâne, crâné, créna, écran, encra, nacre, nacré, rance] 10: [resu, rues, rués, ruse, rusé, suer, sure, sûre, ures, user] 11: [entais, étains, niâtes, sainte, satine, satiné, tanise, tanisé, tenais, ténias, tisane] 12: [airent, entrai, naître, raient, ratine, ratiné, renaît, reniât, rentai, riante, traîne, traîné] 12: [âniers, aniser, ariens, arsine, inséra, nieras, raines, rainés, renais, renias, résina, serina] 10: [étiers, étires, étirés, itérés, itères, sertie, setier, striée, tirées, triées] 11: [rites, rîtes, serti, strie, strié, tiers, tires, tirés, tiser, tries, triés] 11: [carets, cartes, cartés, castre, castré, cérats, écarts, sacret, terças, traces, tracés] 10: [casser, césars, crases, crasse, crassé, ressac, sacres, sacrés, scares, séracs] 11: [aster, astre, âtres, rates, ratés, resta, stéra, tares, tarés, tarse, tersa] 10: [épris, péris, pires, pries, priés, prise, prisé, ripes, ripés, spire] 13: [érines, inséré, insère, reines, renies, reniés, résine, résiné, serein, serine, seriné, sérine, sirène] 10: [après, âpres, épars, espar, pares, parés, râpes, râpés, repas, saper] 12: [amures, amurés, amuser, masure, maures, mauser, mesura, mueras, musera, remuas, résuma, ruâmes] 13: [cantre, carnet, centra, cernât, crante, cranté, créant, crénât, encart, encrât, nectar, tancer, tanrec] 15: [ancres, ancrés, carnes, carnés, cernas, cranes, cranés, crânes, crânés, crénas, écrans, encras, nacres, nacrés, rances] 10: [enlies, enliés, enlise, enlisé, ensile, ensilé, lésine, lésiné, sénile, silène] 10: [alpes, asple, lapes, lapés, lapse, pales, palés, pâles, pelas, salep] 11: [désire, désiré, diéser, eiders, rédies, redise, réside, résidé, ridées, sidéré, sidère] 11: [âpreté, aptère, arpète, épater, étrape, étrapé, patère, pétera, répéta, retape, retapé] 10: [canier, cernai, crénai, encira, encrai, racine, raciné, rancie, ricane, ricané] 12: [céruse, césure, creuse, creusé, curées, écrues, écures, écurés, reçues, récuse, récusé, sucrée] 10: [autres, ruâtes, sature, saturé, sauret, sauter, surate, taures, tueras, urates] */