Votre défi est de prendre du code source en entrée et de sortir dans quel langage de programmation il est écrit.
Par exemple, vous pourriez avoir l'entrée
class A{public static void main(String[]a){System.out.println("Hello, World!");}}
Et sortie
Java
Vos deux objectifs principaux sont la diversité (combien de langages de programmation vous pouvez détecter) et la précision ( votre capacité à détecter ces langages).
Pour les polyglottes (programmes valables dans plusieurs langues), vous pouvez décider quoi faire. Vous pouvez simplement générer le langage que votre programme pense être le plus probable, ou vous pouvez générer une erreur, ou vous pouvez générer un tableau de choix possibles (ce qui entraînerait probablement plus de votes positifs qu'une simple erreur!).
Il s'agit d'un concours de popularité , car il serait très difficile de spécifier un critère de gain objectif différent. Électeurs, veuillez voter sur le nombre de langues qu'il peut détecter et sa précision.
la source
print("")
peut être utilisé dans de nombreuses langues.class A{public static void main(String[]a){System.println.out("Hello, World!");}}
invalide.<!DOCTYPE html>
suivie des balises<html>
,<body>
et autres (commemeta
) dans leur ordre correct?Réponses:
234 formats de texte - Unix Shell
(pas toutes les langues - je dois les compter soigneusement)
J'hésite à publier cette réponse quelque peu intelligente, mais je ne vois rien dans les règles qui l'interdisent et l'
file
utilitaire shell fait vraiment du bon travail. par exemple:De plus, vous pouvez utiliser l'
-k
option pour "continuer" lors du test d'un polyglotte:En outre, l'
-l
option vous donnera une idée de la qualité de l'algorithme pour différentes langues:C'est
file-5.09
(sur Ubuntu 12.04)la source
ln -s /usr/bin/file /usr/local/bin/myspecialtool
. Si votre réponse compte, cela ne compte-t-il pas aussi bien? (Ne vous inquiétez pas, je ne suis pas sérieux.)Bash - à propos
5035 octets par langue compilableL'astuce consiste à simplement compiler, alors vous n'avez pas à vous soucier de lier les erreurs des bibliothèques manquantes, et c'est plus indulgent si vous n'avez que des extraits de code.
Merci à Shahbaz pour les formes plus courtes!
etc...
la source
gcc -c $1 && (echo C; exit 0)
&&
et||
dans bash sont vraiment utiles et aident beaucoup à nettoyer le code. Ils ne sont en aucun cas utilisés pour l'obscurcissement, vous feriez donc bien de les apprendre.-fsyntax-only
pour vérifier uniquement la syntaxe et ignorer la compilation réelle.18 langages de programmation, 1002 octets, précision: testez par vous-même :)
(ouais je sais que ce n'est pas du golf de code, mais pour le plaisir)
Le programme recherche des extraits de code emblématiques, les vérifications sont ordonnées de manière à ce que les vérifications les plus claires soient en haut et les langages de programmation intégrés dans d'autres langages de programmation sont en dessous (par exemple HTML en PHP).
Cela échoue évidemment pour des programmes comme
System.out.println('<?php');
Utilisation sur le nœud:
coffee timwolla.coffee < Example.java
Démo (Démo en ligne sur JSFiddle ):
la source
coffee
des arguments? Je venais juste d'essayer de rediriger des fichiers vers celui-ci, mais simplement l'exécuter et aller^D
ne fait rien non plus.npm install coffee-script && node_modules/.bin/coffee timwolla.coffee < timwolla.coffee
dans un dossier temporaire, cela devrait cracherAPL
. (en supposant que vous avez une version récente du nœud et de npm installés)Cette réponse est une preuve de concept, qui ne recevra probablement plus de travail de ma part.
Il échoue de plusieurs manières:
L'idée est de définir une liste de mots-clés / caractères / phrases qui peuvent identifier une langue spécifique et attribuer un score à ce mot-clé pour chaque langue. Vérifiez ensuite le (s) fichier (s) source (s) pour ces mots clés et faites le pointage des scores pour chaque langue pour laquelle vous trouvez des mots clés. En fin de compte, la langue avec le score le plus élevé est le gagnant probable. Cela s'adresse également aux programmes polyglottes, car les deux (ou toutes) les langues pertinentes obtiendront un score élevé.
La seule chose pour ajouter plus de langues est d'identifier leurs "signatures" et de les ajouter au mappage.
Vous pouvez également attribuer différents scores à différents mots clés par langue. Par exemple, si vous pensez qu'il
volatile
est plus utilisé en Java qu'en C, définissez le score duvolatile
mot-clé sur 2 pour Java et 1 pour C.la source
Juste quelques grandes généralisations.
Je pense que c'est assez précis.
Voici Ruby btw. Prend l'entrée (multiligne) de stdin.
la source
ini
fichiers etphp
\$\w+
après le perl pour détecter PHP. Est également(\w+)::~\1
généralement un destructeur C ++Javascript - 6 langues - haute précision
Langues actuelles: Java, C, HTML, PHP, CSS, Javascript
Je travaille sur le principe que chaque fois qu'une entrée satisfait à un critère, elle reçoit un score, et sur la base de ce score, les résultats sont donnés.
Fonctionnalités:
x
langue en voyant un mot-clé.Si vous pensez que vos entrées des programmes (que j'ai faites jusqu'à présent) ne sont pas prises ou n'obtiennent pas de résultats invalides, veuillez le signaler et je serais heureux de les corriger.
Exemple d'entrée 1:
Exemple de sortie 1:
Explication:
Cela aurait dû faire échouer le programme et j'aurais imprimé
PHP
, mais comme mon programme fonctionne sur la base des scores, rien n'échoue et il identifie facilement Java en premier lieu, suivi d'autres résultats possibles.Exemple d'entrée 2:
Exemple de sortie 2:
Exemple d'entrée 3:
Exemple de sortie 3:
Le code:
la source