Jetzt mit BONUS zur Laufzeitplatzierung.
Schreiben Sie ein Programm, um ein Textfeld mit den in Ihrem Programm verwendeten Bezeichnern zu füllen, während Sie Ihr Programm klein halten. Füllen Sie mit allen Bezeichnern, die Sie in Ihrem Programm verwendet haben (mit Ausnahme der von Ihnen erstellten), ein 12x6-Feld mit so vielen wie möglich. Sie erhalten zusätzliche Punkte für gekreuzte Bezeichner (Kreuzworträtselstil), die sich jedoch nicht durchgängig verbinden können.
Ausgabe
Ihr Programm sollte ein 12x6-Zeichenfeld mit Ihren gepackten Kennungen und einem #
Rand drucken (um es zu stdouten) . Das Feld sollte Spalten mit dem Buchstaben AL und die Zeilen 1-6 enthalten (wie im folgenden Beispiel beabstandet). Drucken Sie dann eine Zeile für jede verwendete Kennung. Jede Zeile enthält die Position des ersten Buchstabens, die Kennung selbst und die Punktzahl. Die Punktzahl entspricht der Anzahl der Buchstaben in der Kennung, wobei ein möglicher '+ Bonus' hinzugefügt wird. Die Kennung erhält einen Bonus von 5 Punkten für jeden Buchstaben, der mit einer Kreuzungskennung geteilt wird. In der letzten Zeile wird 'TOTAL:' und die Summe der Bezeichnerwerte angezeigt. Eine Beispielausgabe für ein mögliches Python-Programm würde folgendermaßen aussehen:
ABCDEFGHIJKL
##############
1 # pinsert #
2 # o #
3 # print #
4 # not #
5 # #
6 #import #
##############
C1 pop 3+5
D1 insert 6
C3 print 5+10
E3 in 2+10
E4 not 3+5
A6 import 6
TOTAL: 55
Anmerkungen:
- Bezeichner können (wie
import
oben) nicht angehängt werden . - Sie können nicht beitreten
pop
undprint
inline gehenpoprint
. - Die Zeichenfolge im
in
Innereninsert
kann nicht verwendet werden. Das Verbinden von Wörtern muss orthogonal sein. - Bezeichner können nebeneinander platziert werden (wie
pop
undinsert
darüber).
Ihre Antwort sollte Ihre Programmausgabe mit Ihrem Quellcode und einem Titel enthalten, der aus dem Namen der Sprache und Ihrer Punktzahl besteht.
Ergebnis
Ihre Punktzahl für die Herausforderung ergibt sich aus dem Quadrat der Puzzle-Punktzahl geteilt durch die Größe Ihres Quellcodes (in Bytes). Beispiel: Das obige Puzzle mit einem 300-Byte-Programm würde punkten 55*55/300 = 10.08
. Die höchste Punktzahl gewinnt.
Regeln
- Sie können jeden Bezeichner in Ihrem Programm verwenden, der nicht von Ihnen definiert wurde. Schlüsselwörter, Klassennamen, Methodennamen, Bibliotheksnamen und integrierte Funktionsnamen sind Beispiele für geeignete Bezeichner.
- BEARBEITET: Sie dürfen nur Standardbibliotheken verwenden, die in der Mindestversion der Sprache enthalten sind. Erweiterte Sprachpakete und die Verwendung externer Bibliotheken sind (jetzt) verboten. Die große Auswahl an Bibliotheken mit umfangreichen Listen von Kennungen würde diese Herausforderung aus dem Gleichgewicht bringen. Wenn Sie sich nicht sicher sind, wie dies mit Ihrer Sprache funktioniert, hinterlassen Sie bitte eine Frage in den Kommentaren.
- Bezeichner dürfen nur aus [a-zA-Z_] Zeichen bestehen und mindestens 2 Zeichen enthalten.
- Sie dürfen jede Kennung nur einmal im Puzzle verwenden.
- Bezeichner können nur von links nach rechts oder nach unten verwendet werden.
Dynamischer Bonus!
Wenn Ihr Code bestimmt, wo zur Laufzeit Kennungen platziert werden sollen, beträgt der Bonus für gemeinsam genutzte Buchstaben 20 statt 5. Sie können angeben, welche Kennungen verwendet werden sollen, aber Ihr Code muss entscheiden, wo in der Box sie platziert werden sollen. Ihr Code muss auch die Score-Liste berechnen und ausdrucken. Wenn Ihre Platzierungen von der Reihenfolge der Identifikatorliste, fest codierten Paarungen oder anderen nicht dynamischen Platzierungsverknüpfungen abhängen , haben Sie keinen Anspruch auf den dynamischen Bonus.
In der obigen Beispielausgabe würde die Puzzle-Punktzahl für ein Laufzeit-Platzierungsprogramm 145 werden. Wenn der Code dann 800 Bytes wäre, wäre die Punktzahl 145*145/800 = 26.28
.
Der dynamische Bonus wurde entwickelt, um clevere Algorithmen anstelle von statischen fest codierten Lösungszeichenfolgen zu belohnen und die größere resultierende Quellcodegröße zu kompensieren.
EDITS:
- Geänderte Bibliotheken, die nur in der Mindestversion verwendet werden.
- Die dynamische Bonusoption wurde hinzugefügt.
quelle
xyzw
rgba
stpq
Antworten:
STATA, 387 ^ 2/677 = 221,2
Ich wurde faul und wollte nur etwas ausgeben, das funktioniert, bevor ich versuchte, es mit optimaler Punktzahl zu bekommen. Ich werde es wahrscheinlich später aktualisieren, wenn ich mehr Wörter einfüge, und ich bin offen für Vorschläge von allen, die STATA verwenden (was bei CodeGolf nicht sehr beliebt zu sein scheint). STATA ist wirklich gut darin, viele Befehle / Parameter mit zwei Buchstaben zu haben. Außerdem können die meisten normalerweise gekürzt werden, um Zeichen zu speichern / besser anzupassen (dh Anzeige kann Anzeige, Anzeige, Anzeige, Anzeige, Anzeige oder Anzeige sein). Die Erfassung bedeutet auch, dass Ausgabe- und Fehlermeldungen unterdrückt werden. Die gesamte while-Schleife hat also 0 Ausgang.
erzeugt
quelle
Python, 134 2 /349 = 50,02
Wenn ich die Regeln richtig verstanden habe, sollte dies eine gültige Einreichung sein.
Sie können Ihre Punktzahl wirklich einfach weiter erhöhen, indem Sie weitere Bezeichner hinzufügen: Die Größe des Programms nimmt linear zu (um etwa das Doppelte der Bezeichnerlänge), während sich die Punktzahl ungefähr um das Quadrat der Bezeichnerlänge erhöht. Dann wird die Herausforderung mehr darin bestehen, die meisten Schlüsselwörter in das Quadrat zu packen, als ein kurzes Programm dafür zu schreiben .
quelle
stdout.write
eher alsprint
und was ist mit demformat(not False or iter([]))
am Ende? Sie können auch leicht hinzufügen, wie "ist" neben dem "sys" und ein "für" unten "von" ...format
zu leseniter([i for i in [not False is sys]])
Perl,
728 2 /639 = 829,4Na ja, das ist nicht gültig, verpasst, dass ich die Bezeichner in meinem Code haben muss.
Dies erfordert ein Perl-Reflexionsmodul (
B::Keywords
). Kann auf Ubuntu mit installiert werdensudo apt-get install libb-keywords-perl
. Mit dem im obigen Code angegebenen Startwert wird die 728-Antwort generiert:Beachten Sie, dass verschiedene Perl-Versionen möglicherweise unterschiedliche RNG- und Keyword-Listen haben. Es sollte jedoch einfach sein, einen Startwert mit einem vergleichbaren Ergebnis zu finden.
quelle