Je pense que la plus grande distinction entre les langues est leur structure. Mon idée serait donc d'examiner certains éléments communs à toutes les langues et de voir comment ils diffèrent. Par exemple, vous pourriez utiliser des regex pour sélectionner des éléments tels que :
- définitions des fonctions
- déclarations de variables
- déclarations de classes
- commentaires
- pour les boucles
- Boucles "while
- imprimer les déclarations
Et peut-être quelques autres choses que la plupart des langues devraient avoir. Ensuite, utilisez un système de points. Accordez au maximum 1 point pour chaque élément si la regex est trouvée. Évidemment, certains langages utiliseront exactement la même syntaxe (les boucles for sont souvent écrites de la manière suivante for(int i=0; i<x; ++i)
Ainsi, plusieurs langues pourraient chacune marquer un point pour la même chose, mais au moins vous réduisez la probabilité qu'il s'agisse d'une langue totalement différente). Certains d'entre eux pourraient obtenir des 0 sur toute la ligne (le snippet ne contient pas de fonction, par exemple), mais c'est tout à fait normal.
Combinez cela avec la solution de Jules, et cela devrait fonctionner assez bien. Vous pouvez également rechercher les fréquences des mots-clés pour un point supplémentaire.
1 votes
Il existe pratiquement un nombre infini de langues... voulez-vous en détecter une seule ? Ou est-ce qu'on parle seulement des langues les plus populaires ?
0 votes
Seulement les plus populaires (C/C++, C#, Java, Pascal, Python, VB.NET. PHP, JavaScript et peut-être Haskell).
13 votes
Haskell ne doit pas être populaire puisque je n'en ai jamais entendu parler ;-)
23 votes
Vous ne connaissez probablement pas grand-chose aux langages de programmation si vous n'avez pas entendu parler de Haskell.
4 votes
Il y a ce service en ligne qui le fait : algorithmia.com/algorithmes/PetiteProgrammer/
0 votes
Il est clair que la popularité de Haskell ne cesse de croître...