Einführung
Diese Seite baut schnell einen riesigen Datensatz von Code-Schnipsel auf, also lasst uns etwas damit anfangen!
Hier ist eine Datendatei . Es enthält 9.066 eindeutige Sprach- und Snippet-Paare für 113 Sprachen, die alle von dieser Site stammen. Das Format ist durch Tabulatoren getrennt (Language-TAB-Snippet), wobei alle Zeilenumbrüche in den Snippets durch <LF>
und alle Tabulatoren durch 4 Leerzeichen ersetzt werden. Es gibt mindestens 5 Ausschnitte für jede Sprache.
[Update: Ich habe eine kleine Änderung an der Datendatei vorgenommen, um einige Python- und RegExp-Versionen zusammenzuführen, die ich zuvor verpasst habe - der obige Link wurde aktualisiert]
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die ein Codefragment nimmt und die Sprache ausgibt, in der es geschrieben ist (Einzelheiten siehe unten). Die Gesamtgröße Ihrer Quelle + aller benötigten Daten darf maximal 300 Byte betragen, und Ihr Programm muss die richtige Sprache ausgeben, wenn es einen eigenen Quellcode erhält. Höchste Genauigkeit (richtigste Antworten auf den obigen Datensatz) gewinnt.
Regeln
- Die Gesamtgröße Ihres Quellcodes, Ihrer Ressourcen und aller erforderlichen Kompilierungs- / Laufzeitflags darf 300 Byte nicht überschreiten.
- Ihre Antwort wird anhand des obigen Datensatzes getestet. Es wird einer der "Snippet" -Werte als Eingabe zugewiesen und seine Ausgabe wird mit der "korrekten" Ausgabe gemäß der Datenmenge verglichen. Dies wird für alle Einträge im Datensatz wiederholt und die endgültige Anzahl der richtigen Antworten ist Ihre Punktzahl.
- Sie können die Eingabecodierung auswählen - ich gehe von UTF-8 aus. Wenn Sie also eine andere Codierung benötigen, geben Sie diese in Ihrer Antwort an.
- Sie müssen den
<LF>
Ersatz nicht für Zeilenumbrüche verwenden. Wenn Ihr Eintrag erwartet, dass Zeilenumbrüche als wörtliche Zeilenumbrüche (Zeichen 10) empfangen werden, geben Sie dies in Ihrer Antwort an. - Ihr Eintrag muss die Sprache ausgeben, in der er denkt, dass das Eingabefragment geschrieben ist. Um zu vermeiden, dass viele Sprachzeichenfolgen komprimiert werden müssen, erlaube ich Zuordnungen (Wenn Sie 3 für "Java" ausgeben möchten, ist das in Ordnung). Beachten Sie einfach die Zuordnungen in Ihrer Antwort.
- Sie können nur 1 Ausgabe-Mapping für jede Sprache haben (dh wenn 3 "Java" bedeutet, können Sie nicht auch 4 "Java" bedeuten).
- Wenn Ihr Programm über einen eigenen Quellcode verfügt, muss es die richtige Antwort liefern (es muss die Sprache ausgeben, in der es geschrieben ist).
- Sie müssen nicht alle Sprachen in der Datenmenge unterstützen, und Sie können zusätzliche Sprachen unterstützen, wenn Sie möchten (z. B. wenn Ihr Eintrag nicht in einer der Sprachen in der Datenmenge vorliegt).
- Ihr Programm muss deterministisch sein (das zweimalige Bereitstellen derselben Eingabe muss dieselbe Ausgabe erzeugen).
Binden brechen
- Gleichstand wird durch Reduzieren des Datensatzes entschieden, bis ein Eintrag gewonnen hat. Der Datensatz wird verkleinert, indem alle Ausschnitte für die am häufigsten verwendete Sprache entfernt werden (dh, die Unstimmigkeiten werden durch die Genauigkeit in selteneren Sprachen unterbrochen). Wenn beispielsweise A und B im gesamten Datensatz 70% erreichen, werden alle Python-Snippets entfernt. Wenn A und B jetzt beide 60% erreichen, wird CJam entfernt. Wenn A jetzt 50% erzielt, B jedoch 55%, ist B der Gewinner.
- Wenn eine Genauigkeit von 100% erreicht wird, wird die Bindung anhand eines zweiten (blinden) Datensatzes entschieden, der mehr Stichproben für die gleichen Sprachen enthält.
Beispiel 1
Das Python-Skript:
print("python")
Dieses Skript erzeugt erfolgreich "Python", wenn es über einen eigenen Quellcode verfügt. Daher ist es gültig. Auf dem Datensatz erhält es 1008/9066 = 11,1%.
Beispiel 2
Die JavaScript-Funktion:
function f(s){return /function/.test(s)?1:2}
Mit den Zuordnungen 1 → Javascript, 2 → Python. Wiederum produziert es erfolgreich 1 ("Javascript") für seine eigene Quelle, und auf dem Datensatz erhält es 1092/9066 = 12,0%.
Woher kommen die Daten?
Ich habe eine SEDE-Abfrage erstellt , um Beispiele von [Code-Golf] -Herausforderungen auf dieser Site abzurufen. Aus den 10.000 Antworten habe ich ein zusammengebrochenes Python-Skript verwendet, um den Code und den Sprachnamen für jede Sprache zu finden, und dann jede Sprache mit weniger als 5 Beispielen herausgefiltert. Die Daten sind nicht zu 100% sauber (ich weiß, dass es einige Nicht-Code-Snippets gibt, die abgerufen wurden), sollten aber gut genug sein.
Inspiriert von dieser Herausforderung zu Beginn des Jahres: Wer hat das gesagt? Präsidentschaftswahlen 2016
Teilweise auch im Zusammenhang mit What's the Language?