Ihre Aufgabe - wenn Sie sie akzeptieren - ist es, ein Programm zu schreiben, das hilft, meinen Vorschlag zu Meta zu verstehen, indem Sie den Gewinner eines Code-Golf-umgekehrten Wettbewerbs berechnen . Natürlich werden Antworten auf diese Frage wie vorgeschlagen behandelt, sodass Ihr Programm (falls korrekt) berechnen kann, ob Ihre Antwort zur akzeptierten Antwort wird.
Regeln
- Das Programm liest eine Datei mit mehreren Zeilen des folgenden Formats (siehe Beispiel unten): [Sprache] TAB [NumberOfCharacters] TAB [LinkToAnswer]
- Der Dateiname wird als Argument an Ihr Programm übergeben oder die Datei wird zur Standardeingabe Ihres Programms umgeleitet. Sie haben die Wahl, bitte geben Sie die Methode an, wenn Sie die Antwort geben
- Es wird erwartet, dass das Eingabeformat korrekt ist. Es ist keine Fehlerbehandlung erforderlich.
- Die Anzahl der Zeichen ist positiv. Ihr Programm muss Längen bis zu 65535 verarbeiten können. 64k sollten für jeden ausreichen :-)
- Das Programm gibt die Zeilen in der Standardausgabe aus, die der Idee des Meta-Vorschlags entsprechen
- der kürzeste Code einer bestimmten Programmiersprache gewinnt (Reduktionsphase)
- der längste Code unter allen Programmiersprachen gewinnt (Sortierphase)
- Im Falle eines Unentschieden werden alle Antworten mit der gleichen Länge gedruckt
- Die Reihenfolge der Ausgabe ist nicht wichtig
- Obwohl der längste Code gewinnt, ist dies kein Code-Bowling . Ihr Code muss für Ihre Programmiersprache so kurz wie möglich sein.
- Antworten auf seltene Programmiersprachen, die nicht versuchen, den Code zu verkürzen, verdienen eine Ablehnung, weil sie versuchen, die Absicht dieser Art von Frage zu umgehen. Wenn es nur eine Antwort für eine bestimmte Programmiersprache gibt, wird diese als Gewinnerkandidat gewertet, sodass Sie den Code in die Luft jagen können.
Beispiel-Eingabedatei (durch einzelne Tabulatoren getrennt, falls Probleme mit der Formatierung auftreten sollten):
GolfScript 34 http://short.url/answer/ags
GolfScript 42 http://short.url/answer/gsq
C# 210 http://short.url/answer/cs2
Java 208 http://short.url/answer/jav
C# 208 http://short.url/answer/poi
J 23 http://short.url/answer/jsh
Ruby 67 http://short.url/answer/rub
C# 208 http://short.url/answer/yac
GolfScript 210 http://short.url/answer/210
Erwartete Leistung (Reihenfolge ist nicht wichtig):
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
Aktualisieren
Einige Programme basieren auf der Tatsache, dass es nur ein einziges Maximum gibt (wie das C # 210-Zeichenprogramm). Aus der Realität abgeleitet kann jemand auch ein GolfScript-Programm mit 210 Zeichen schreiben. Die Ausgabe würde gleich bleiben. Ich habe so ein GolfScript zur Eingabe hinzugefügt.
Update 2
Wie vorgeschlagen, habe ich umgetaggt (auch noch Code-Golf) und die Frist ist der 06.03.2014 (was wie ein willkürliches Datum aussieht, aber ich komme dann von meiner Reise zurück nach Deutschland).
Endgültige Ergebnisse
Ich habe beschlossen, wie folgt abzustimmen:
- Antworten, bei denen die Anzahl der Zeichen nicht bestätigt werden kann, erhalten einen Kommentar zur Erläuterung der Anzahl.
- Antworten, die leicht reduziert werden können, erhalten einen Kommentar, einen Bearbeitungsvorschlag und gehen mit dem niedrigeren Zählwert in das Ergebnis ein. (Hoffentlich habe ich das schon mal gesehen).
- Antworten, die nicht kompiliert werden, erhalten eine negative Bewertung. (Eine ziemlich schwere Aufgabe, wie sich herausstellt).
- Antworten, die nicht golfen, erhalten eine negative Bewertung (wie bereits in den Regeln beschrieben).
- Antworten, die zu erwartenden Ergebnissen führen, erhalten eine positive Bewertung. Aufgrund einiger Antworten, die nicht wie erwartet funktionieren, verwende ich 4 verschiedene Eingabedateien und vergleiche sie mit dem erwarteten Ergebnis.
Zum Schluss wird der Gewinner ermittelt, indem die Tabelle mit den qualifizierten Antworten als Eingabe für mein Referenzprogramm bereitgestellt wird (plus manuelle Überprüfung des Ergebnisses). Wenn meine eigene Antwort die beste wäre, würde ich sie von der Liste ausschließen. Bei mehreren Gewinnern müsste ich nur einen auswählen. Daher können einige Boni verdient werden:
- Antworten, die mehr Eingaben als erwartet akzeptieren (zB außerhalb der definierten Bereiche)
- Antworten, die eine clevere Idee haben, es kurz zu machen
Ich habe eine Momentaufnahme der Antworten am 6. März 2014, 19:45 UTC + 1, gemacht. Die Analyse ist noch nicht abgeschlossen. Alle Antworten zu überprüfen ist schwieriger als erwartet ...
quelle
Antworten:
Java - 556
Das Programm liest aus STDIN.
ArrayIndexOutOfBoundsException
wenn eine leere Zeile auftritt oderNoSuchElementException
wenn die Eingabe endet, ohne dass eine neue Zeile nachgestellt wird). Jede gelesene Zeile wird der Zeile hinzugefügt, die wie folgtTreeMap m
definiert sein könnteTreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>
(von links nach rechts: Sprache, Codegröße, URL, Eingabe).TreeSet<Long, TreeSet<String, String[]>> n
(von links nach rechts: Codegröße, URL, Eingabe) erstellt, in dem der Inhalt aller SprachenfirstEntry()
zusammengefasst wird.lastEntry()
der aggregierteTreeMap
enthält unser ergebnis - wir müssen es nur drucken.Versuchen Sie es auf ideone.com (die letzten beiden Eingabezeilen wurden umgeschaltet, um zu zeigen, dass alle Zeilen gelesen wurden)
quelle
Perl, 195 Bytes
Eingabe wird in STDIN erwartet, Ergebnis wird in STDOUT geschrieben:
Ungolfed-Version
quelle
GolfScript 210 http://short.url/answer/210
Zeile zur Eingabe hinzu und prüfen Sie, ob die Ausgabe dieselbe bleibt. Eigentlich glaube ich, dass Ihre nicht betroffen sind, weil Sie maximal [0] verwenden, aber ich habe momentan kein Perl, um es zu versuchen.%l
/%language
die Sprachen und ihre Minimalwerte. Die Datenstruktur%a
/%array
enthält nur die Sprach- / URL-Paare, deren Wert das Minimum für diese Sprache ist. Dann werden die Minimalwerte in absteigender Reihenfolge sortiert und der erste wird als globales Maximum und als Filterbedingung für%a
/ verwendet%array
.Python
378377372Eingabe am stdin:
Und das ist, was ich hatte, bevor ich anfing, es mit 551 Zeichen zu komprimieren:
quelle
C # - 628
Hier ist eine längere Alternative von Ihnen, die Folgendes verwendet
DataTable
:Ursprünglich dachte ich, ich hätte durch die Verwendung von max / min etwas weniger Code erhalten
DataTable
, aber die zum Erstellen derDataTable
(Zeilen / Spalten / Ansicht) erforderlichen Typen sind leider sehr lang. Ich bin neu im Code-Golfen, also könnte es vielleicht jemand weiter reduzieren. Immer noch eine lustige Herausforderung.quelle
dg -
286281260251218 BytesBeispiel:
Ungolfed- Version:
F: Was zum Teufel ist dg?
A: Eine Programmiersprache, die sich zu CPython-Bytecode kompilieren lässt, ähnlich wie Scala zu JVMs. Dies bedeutet im Wesentlichen, dass dg eine alternative Syntax für Python 3 ist. Damit können Sie auch alle vorhandenen Bibliotheken verwenden.
Mehr Infos hier (sogar ein Tutorial!): Https://pyos.github.io/dg
quelle
cat langs.dg | wc -c
bekomme ich 218!Rebol - 314
ungegolft
Anwendungsbeispiel:
quelle
C # - 515
Erwartet einen Dateinamen als Argument
Zuerst habe ich mein C # -Programm so entworfen, dass es einfach ist, weil ich eine Art Referenzprogramm haben wollte. Aber dann habe ich mich entschlossen, auch selbst an Wettbewerben teilzunehmen und Golf zu spielen. Dies ist eine der früheren Versionen des Codes + einige Kommentare:
quelle
C # -
460359Nachdem
DataTable
ich festgestellt hatte , wie umfangreich meine Lösung war, erstellte ich das folgende Beispiel mit Linq. Es verwendet die gleiche Methode wie meine vorherige Lösung.Golf gespielt
Ungolfed
Ich bin noch ziemlich neu in Linq, daher bin ich mir fast sicher, dass diese Ausdrücke weiter reduziert werden können.
Aus Ihrer Frage geht nicht hervor, ob es eine einzige Lösung mit maximaler Länge gibt. Für meine Antworten habe ich die Annahme verwendet, dass es einen einzelnen Maximalpunkt gibt (dh, wenn es auch ein GolfScript-Maximum von 210 gab, kann es aufgrund des zurückgegebenen einzelnen Maximalwerts fehlschlagen). Heikos Lösung hätte das gleiche Problem. Um dies zu beheben, müssten wir einen weiteren Schritt hinzufügen, der eine Liste gebundener Maxima enthält, um die Minima für jede Sprache zu überprüfen.
quelle
namespace System{using Linq;using IO;class p{static void Main(string[]i){var l=(from f in File.ReadAllLines(i[0])let s=f.Split('\t') select new Tuple<string, int, string>(s[0],Convert.ToInt16(s[1]),f)).ToList();foreach(var f in l.Where(a=>a.Item2==l.Where(b=>b.Item1==l.Single(c=>c.Item2==l.Max(d=>d.Item2)).Item1).Min(e=>e.Item2)))Console.WriteLine(f.Item3);}}}
Golfscript 100 ...
,C# 1 ...
,C# 200 ...
. Dies muss wahrscheinlich überarbeitet werdenC ++ - 535
Gibt nur die Antworten für die längste Position aus, nachdem nur die kürzesten Antworten jeder Sprache als potenzielle Gewinner ausgewählt wurden.
Golf (nicht so unleserlich wie manche Sprachen):
quelle