Ihre Herausforderung besteht darin, einen Quellcode als Eingabe zu verwenden und auszugeben, in welcher Programmiersprache er geschrieben ist.
Beispielsweise könnten Sie die Eingabe haben
class A{public static void main(String[]a){System.out.println("Hello, World!");}}
Und Ausgabe
Java
Ihre beiden Hauptziele sind Vielfalt (wie viele Programmiersprachen können Sie erkennen) und Genauigkeit (wie gut Sie diese Sprachen erkennen).
Bei mehrsprachigen Programmen (Programme, die in mehreren Sprachen gültig sind) können Sie entscheiden, was zu tun ist. Sie könnten einfach die Sprache ausgeben, die Ihr Programm für wahrscheinlicher hält, oder Sie könnten einen Fehler ausgeben, oder Sie könnten eine Reihe möglicher Auswahlen ausgeben (die wahrscheinlich mehr Gegenstimmen als nur einen Fehler erhalten würden!).
Dies ist ein Beliebtheitswettbewerb , da es sehr schwierig wäre, ein anderes objektives Gewinnkriterium festzulegen. Wähler, bitte stimmen Sie ab, wie viele Sprachen es erkennen kann und wie genau es ist.
quelle
print("")
in vielen Sprachen verwendet werden kann.class A{public static void main(String[]a){System.println.out("Hello, World!");}}
die ungültig ist.<!DOCTYPE html>
von der gefolgt<html>
,<body>
und andere Tags (wiemeta
) in der richtigen Reihenfolge?Antworten:
234 Textformate - Unix-Shell
(nicht alle von ihnen Sprachen - ich muss sie sorgfältig zählen)
Ich zögere, diese etwas kluge Antwort zu posten, aber ich sehe nichts in den Regeln, die sie verbieten, und das
file
Shell-Dienstprogramm leistet wirklich gute Arbeit. z.B:Außerdem können Sie die
-k
Option verwenden, um beim Testen eines Polyglots "weiterzumachen":Die
-l
Option gibt Ihnen auch eine Vorstellung davon, wie gut der Algorithmus für verschiedene Sprachen ist:Dies ist
file-5.09
(unter Ubuntu 12.04)quelle
ln -s /usr/bin/file /usr/local/bin/myspecialtool
. Wenn Ihre Antwort zählt, zählt dies dann nicht genauso gut? (Keine Sorge, ichBash - ungefähr
5035 Bytes pro kompilierbarer SpracheDer Trick besteht darin, nur zu kompilieren, dann müssen Sie sich keine Gedanken über das Verknüpfen von Fehlern aus fehlenden Bibliotheken machen, und es ist verzeihender, wenn Sie nur Codeausschnitte haben.
Danke an Shahbaz für die kürzeren Formen!
etc...
quelle
gcc -c $1 && (echo C; exit 0)
&&
und||
in Bash sind sehr nützlich und helfen dabei, den Code viel aufzuräumen. Sie werden auf keinen Fall zur Verschleierung verwendet, Sie sollten sie also gut lernen.-fsyntax-only
um nur die Syntax zu überprüfen und die eigentliche Kompilierung zu überspringen.18 Programmiersprachen, 1002 Bytes, Genauigkeit: Überzeugen Sie sich selbst :)
(Ja, ich weiß, das ist kein Code-Golf, aber zum Spaß)
Das Programm sucht nach ikonischen Codefragmenten, die Überprüfungen sind so angeordnet, dass die klarsten Überprüfungen oben und die in anderen Programmiersprachen eingebetteten Programmiersprachen unten aufgeführt sind (z. B. HTML in PHP).
Dies scheitert offensichtlich bei Programmen wie
System.out.println('<?php');
Verwendung auf Knoten:
coffee timwolla.coffee < Example.java
Demo ( Online-Demo auf JSFiddle ):
quelle
coffee
irgendwelche Argumente übergeben? Ich hatte gerade versucht, Dateien dorthin umzuleiten, aber wenn ich es einfach laufen lasse und gehe,^D
geschieht auch nichts.npm install coffee-script && node_modules/.bin/coffee timwolla.coffee < timwolla.coffee
in einem temporären Ordner sollte dieser ausspuckenAPL
. (vorausgesetzt, Sie haben eine aktuelle Version von Node undDiese Antwort ist ein Proof of Concept, der wahrscheinlich keine Arbeit mehr von mir erhalten wird.
Es fällt in mehrfacher Hinsicht zu kurz:
Die Idee ist, eine Liste von Schlüsselwörtern / Zeichen / Phrasen festzulegen, die eine bestimmte Sprache identifizieren und diesem Schlüsselwort für jede Sprache eine Punktzahl zuweisen können. Überprüfen Sie dann die Quelldatei (en) für diese Schlüsselwörter und zählen Sie die Ergebnisse für jede Sprache auf, für die Sie Schlüsselwörter finden. Am Ende ist die Sprache mit der höchsten Punktzahl der wahrscheinliche Gewinner. Dies ist auch für mehrsprachige Programme geeignet, da beide (oder alle) relevanten Sprachen eine hohe Punktzahl erzielen.
Das einzige, was Sie tun können, um weitere Sprachen hinzuzufügen, ist, ihre "Signaturen" zu identifizieren und sie dem Mapping hinzuzufügen.
Sie können auch verschiedenen Stichwörtern pro Sprache unterschiedliche Bewertungen zuweisen. Wenn Sie beispielsweise der Meinung
volatile
sind, dass in Java mehr als in C verwendet wird, setzen Sie den Score für dasvolatile
Schlüsselwort auf 2 für Java und 1 für C.quelle
Nur ein paar allgemeine Verallgemeinerungen.
Ich denke es ist ziemlich genau.
Das ist übrigens Ruby. Nimmt (mehrzeilige) Eingaben von stdin auf.
quelle
ini
Dateien undphp
\$\w+
nach dem Perl hinzufügen , um PHP zu erkennen. Auch(\w+)::~\1
ist in der Regel ein C ++Javascript - 6 Sprachen - hohe Genauigkeit
Aktuelle Sprachen: Java, C, HTML, PHP, CSS, Javascript
Ich arbeite nach dem Prinzip, dass jedes Mal, wenn eine Eingabe ein Kriterium erfüllt, eine Punktzahl vergeben wird und basierend auf dieser Punktzahl die Ergebnisse vergeben werden.
Eigenschaften:
x
beim Anzeigen eines Schlüsselworts die Sprache ist.Sollten Sie das Gefühl haben, dass Ihre Eingaben in den Programmen (die ich bis jetzt gemacht habe) nicht abgefangen wurden oder ungültige Ergebnisse erhalten, melden Sie sich bitte und ich würde sie gerne korrigieren.
Sample Input 1:
Beispielausgabe 1:
Erläuterung:
Damit hätte das Programm scheitern sollen, und ich hätte gedruckt
PHP
, aber da mein Programm auf der Grundlage von Punktzahlen arbeitet, scheitert nichts und es identifiziert leicht Java an erster Stelle, gefolgt von anderen möglichen Ergebnissen.Sample Input 2:
Beispielausgabe 2:
Beispiel Input 3:
Beispielausgabe 3:
Der Code:
quelle