Anti-Golfscript-Anti-Golf: Erstellen Sie eine Aufgabe, bei der GolfScript oder J von Ihrer (konventionellen) Sprache übertroffen wird. [Closed]


29

Sie müssen drei Dinge machen:

  1. Aussage einer Aufgabe, T .
  2. Lösung der Aufgabe in einer Sprache, die normalerweise nicht zum Golfen verwendet wird, ein .
  3. Lösung der Aufgabe in der Sprache typisch für Golf, verwendet B . Versuchen Sie nicht, nur B aufzublähen , um die Punktzahl zu erhöhen , sondern denken Sie, als ob B von Ihrem Konkurrenten geschrieben wurde.

Verwenden Sie gesunden Menschenverstand bei der Definition typically used for golfing und versuchen Sie, den Spaß für andere Benutzer zu maximieren.

Andere Benutzer können bessere Vorschläge machen B s (möglicherweise auch in anderen "Golf" -Sprachen).

Wertung ist (length_in_bytes(B)+5)/(length_in_bytes(A)+5) , mehr ist besser. (Vielleicht sollte die Bewertungsformel geändert werden? ..)

Die Hauptidee ist es, eine Aufgabe zu erfinden, bei der Sprachen, die im Codegolf normalerweise gute Leistungen erbringen, auf ein Problem stoßen. Es kann die plötzliche Stärke einer gewöhnlichen Sprache in der gegebenen Aufgabe oder die plötzliche Schwäche eines Golflangs sein.

Vermeiden Sie Aufgaben, die bestimmte Programmiersprachen erwähnen, wie z Input a string and execute it as a Scheme code.


1
Ich nehme an, dass Sie dies zu einem Beliebtheitswettbewerb machen, anstatt zu einem Code-Golf. Ansonsten wird man sich beschweren, dass es kein "Shortest-Code-Wins" ist.
Victor Stafusa

OK, zum Beliebtheitswettbewerb wechseln. Sie können auch einen besseren Titel oder eine bessere Wertung vorschlagen.
Vi.

Ich gehe davon aus, dass meine vorherige Frage qualifiziert ist. codegolf.stackexchange.com/questions/18633/… Die Perl-Lösung hat 48 Zeichen, während die J-Lösung 54 Zeichen hat
pastebin.com slash 0mr8spkT

1
Können wir Lang B spezifizieren (solange es gut im Golfen ist)? Oder kann jemand sagen "Hier ist ein Programm in der Sprache <Sprachnamen einfügen> und es hat eine sehr kurze Lösung mit der Länge <n>:"?
Justin

1
Übrigens können einige Sprachen wie Perl je nach Kontext sowohl auf der A-Seite als auch auf der B-Seite sein.
Vi.

Antworten:


14

Meine vorherige Frage, Drucken einer Sinuswelle (vertikal), wird in diesem Moment beantwortet. Ich poste es hier als Lösung und hoffe auch, dass ihr ein paar kürzere Lösungen für meine ursprüngliche Frage finden könnt.

Wie von Vi. Gefordert, werde ich eine Zusammenfassung der Frage posten.

Drucken Sie eine kontinuierliche Sinuswelle, die vertikal auf einem Terminal gescrollt wird. Das Programm sollte nicht beendet werden und die Welle kontinuierlich nach unten rollen (außer bis SIGINT). Sie können davon ausgehen, dass ein Überlauf kein Problem darstellt (dh Sie können Endlosschleifen mit inkrementierenden Zählern oder eine Endlosrekursion verwenden).

Die Welle sollte die folgenden Eigenschaften erfüllen:

  • Amplitude = 20 Zeichen (Spitzenamplitude)
  • Periode = 60 bis 65 Zeilen (inklusive)
  • Die Ausgabe sollte nur aus Leerzeichen, Zeilenvorschub und bestehen |
  • Halten Sie nach jeder Ausgabezeile eine Pause von 50 ms ein

Zu meiner ursprünglichen Frage gibt es eine Beispielausgabe, die ich hier jedoch nicht veröffentliche, da meine Antwort dadurch lächerlich lang wird. Meine ursprüngliche Frage ist hier zu sehen: Drucken einer Sinuswelle (vertikal)

Kürzeste Aderzeit: eine Perl-Lösung mit 48 Zeichen: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

Kürzeste Bderzeit: eine J-Lösung mit 54 Zeichen: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Derzeit ist die Punktzahl dieser Antwort 1.113 (eine schrecklich niedrige Punktzahl)


Die aktuelle Punktzahl nach aktueller Formel beträgt ca. 1.113
Vi.

@Vi. Soll ich diese Antwort löschen oder etwas warten, um zu sehen, was passiert? Wenn letzteres, wie lange soll ich warten?
pastebin.com Schrägstrich 0mr8spkT

Die Anweisung gibt Bytes und keine Zeichen an. Die APL-Lösung wurde in UTL-8 konvertiert und umfasste 61 Byte (70 für UTF-16).
Vi.

2
Sie behaupten, dass Perl keine typische Sprache für das Golfen ist, aber es ist die Sprache, die zuerst mit dem Wort Golf in Verbindung gebracht wurde ! Ruby, 56, sieht aus wie die echte Sprache A in den aktuellen Antworten auf Ihre Fragen.
Peter Taylor

8

Addiere zwei Zahlen

Holen Sie sich zwei Zahlen von STDIN und addieren Sie sie. Sie müssen Gleitkommazahlen unterstützen, also muss 0,5 + 1,5 gleich 2 sein.

Perl 5 (mit -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Berechnete Punktzahl als (24+5)/(8+2+5) = 1.9(3). -EWird auch als Programmbyte gezählt.
Vi.

Dieselbe Bemerkung, die ich an Ace gemacht habe: Sie behaupten, Perl sei keine typische Sprache für das Golfen, aber es ist die Sprache, die zuerst mit dem Wort Golf in Verbindung gebracht wurde !
Peter Taylor

Und Ihr GolfScript-Programm funktioniert nicht. Ein Arbeitsprogramm wäre, n%'+'*'"#{ }"'n/\*~wenn das Zeichen dazwischen {}eine wörtliche Newline ist (in Kommentaren nicht unterstützt).
Peter Taylor

@PeterTaylor Im Vergleich zu GolfScript ist Perl eine "übliche" Sprache. Im Vergleich zu Java ist es eine "Golf" -Sprache.
Vi.

1
Die J dafür ist nicht allzu schlecht, eigentlich: +/".1!:1,~1. APL wäre wahrscheinlich noch kleiner.
Algorithmushai


7

Ergebnis 48/37 oder 1. (297)

T: Schreiben Sie ein Code-Snippet, das das Programm nach genau einer Stunde (so nah wie möglich, wie innerhalb einer Sekunde) beendet. Mach dir keine Sorgen über Ausnahmen, sie können unbehandelt bleiben.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: ist für Befunge 98, benötigt den TIME-Fingerabdruck (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Dies dauert die Stunde, Minute und Sekunde zum Zeitpunkt der Ausführung und setzt die at-Zellen 02, 01 und 00. Dann überspringt ;es den zweiten Teil. Der zweite Teil funktioniert wie folgt:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

ähnlich für die Minute und Stunde.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Beachten Sie, dass Befunge automatisch zum Zeilenanfang zurückkehrt, wenn das Zeilenende erreicht ist.


Wie wir sehen können, ist Befunge nicht gut, wenn es darum geht, auf bestimmte Zeiten zu warten. Java ist jedoch nicht schlecht.


9
APL:⎕DL 3600
marinus

14
Java lautet normalerweise class Main{public static void main...
Vi.

3
@Vi. siehe "Code-Schnipsel". Grundsätzlich erfordert es den Code, der die Arbeit tatsächlich erledigt, nicht mehr als das.
Justin

2
Ich kenne Befunge nicht, aber das Java-Snippet "beendet" das Programm nicht, wie es die Spezifikation vorschreibt. Dies würde entweder System.exit(0);eine mainMethode erfordern oder Ihren Schlaf in eine Methode einwickeln .
Peter Taylor

3
@DoorknobofSnow Fehler beim Kompilieren:error: not a statement
Bob

5

Ausgabe einer bestimmten Textdatei (498.388888 Punkte)

Die Zielausgabe ist hier .

Das zu druckende Python 3.4.3-Skript ist 49 Byte groß:

for b in dir(__builtins__):print(eval(b).__doc__)

Das naive CJam-Programm, das der Zielausgabe entspricht, indem es die Ausgabezeichenfolge einschließt "..."und jede "darin vorkommende Zeichenfolge maskiert, würde 26908 Bytes umfassen.


Sehr klug, obwohl es möglicherweise der Einschränkung "bestimmter Sprachen" zuwiderläuft (was zugegebenermaßen vage ist).
BMac

Die naheliegendste Regel lautet "Vermeiden Sie es, eine bestimmte Sprache zu erwähnen". Python wird nicht erwähnt, ist aber klar gemeint.
Vi.

Ja, diese Antwort ist ein bisschen frech, ich wollte nur darauf hinweisen, dass die Regel eine Art rutschiger Hang ist. Stellen Sie sich vor, ich hätte die Ausgabe mehr "entstellt" - zum Beispiel indem ich die SHA1-Prüfsumme jedes Dokuments genommen hätte -, es wäre sehr seltsam zu behaupten, "dieses verstümmelte Bündel von Hexadezimalziffern ist zu sprachspezifisch" :)
Lynn

Wenn ich eine "gerechtere" Antwort geben wollte, würde ich wahrscheinlich Mathematica verwenden. Sie können eine Menge extrem domänenspezifischer Dinge tun, die Tausende von Bytes an CJam / Pyth / allem anderen benötigen. Leider kenne ich die Sprache nicht.
Lynn

Der Link zum Ausgang ist nicht mehr verfügbar.
Paprika

4

Sag "Hallo Welt!" (50/26 ≈ 1,92)

Zeigen Sie ein Meldungsfeld mit der Aufschrift "Hallo Welt!"

JavaScript

alert('Hello world!')

In einem Browser mit Unterstützung für DOM Level 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Laufen auf ActivePerl mit Win32 :: GUI.


alertist nicht von Natur aus Teil von JS, und das GolfScript-Programm ist nur ein Kommentar.
Peter Taylor

Ich habe die Antwort geändert, um einfaches Perl zu verwenden.
Zahnbürste

3

Ausgabe "Hallo Welt!" bis der Benutzer "q" drückt, 1,842 105/44 = 2,386

  1. "Hallo Welt!" (einschließlich Zeilenvorschub).
  2. Der Benutzer drückt eine Taste, die nicht auf dem Bildschirm angezeigt wird.
  3. Wiederholen, bis die gedrückte Taste "q" war.

QBasic ( 52 39 Zeichen)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Seit dem Posten meiner ursprünglichen Antwort habe ich festgestellt, dass ich die automatische Formatierung in QB64 deaktivieren kann. : ^ D Mit der Zeilennummer und? Abkürzung für PRINTsieht dies eher wie ein ternärer Ausdruck in C-ähnlichen Sprachen aus.

Erste Version:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 Zeichen)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

Das obige funktioniert nur auf (bestimmten?) UNIX-Systemen (getestet unter Ubuntu 12.04). Es ist möglich, dass man mit dem Term :: ReadKey- Modul plattformübergreifend auf 91 Zeichen kommt , aber ich habe es nicht getestet:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Hallo Welt (3 1/3 Punkte)

Schreiben Sie ein Programm, das ausgibt Hello World. .

HQ9 + (1 Zeichen)

Dies ist keine "typische" Sprache zum Golfen, daher glaube ich, dass sie hier passt. Funktioniert übrigens in diesem Interpreter .

H

GolfScript (15 Zeichen)

Ich bezweifle, dass es kürzer werden kann, auch wenn es GolfScript ist.

"Hello World."

8
Ich denke nicht, dass HQ9+Anzüge eine Sprache sind. Es ist für Tricks / Rätsel / Spaß ausgelegt. Brainfuck / Unlambda / andere esoterische Sprachen scheinen ebenfalls nicht zu A zu passen .
Vi.

@Vi .: Aber es wird normalerweise nicht zum Golfen verwendet.
Konrad Borowski

4
Sie können versuchen, HQ9+als B- Sprache zu verwenden und es mit Java oder so zu schlagen ...
Vi.

7
Es scheint eine Hierarchie zu geben: Im Vergleich zu Java ist Perl ein Golflang. GolfScript ist im Vergleich zu Perl ein Golflang. Im Vergleich zu GolfScript ist HQ9 + ein Golflang ...
Vi.

@Vi .: Ich habe Ihre Aufgabenbeschreibung sorgfältig geprüft. HQ9 + wird nie zum Golfen verwendet, außer für zwei bestimmte Aufgaben - "99 Flaschen" und "Hallo Welt". Es sei denn, Sie können eine andere Aufgabe zeigen, in der HQ9 + mit einer anderen Programmiersprache gewinnt. Ich denke jedoch, dass sie zur Definition passt, auch wenn sie diese missbraucht (hey, es ist ein Beliebtheitswettbewerb ). HQ9 + wird einfach nicht zum Golfen verwendet, wenn nichts mit diesen beiden Aufgaben zu tun hat. Es wird also normalerweise nicht zum Golfen verwendet. Der zweite ist offensichtlich für CodeGolf konzipiert - es ist GolfScript.
Konrad Borowski

0

Ausgabe "Hallo Welt!", 33/97 = 2,94

Schreiben Sie ein Programm, das ausgibt Hello world!

Arduino oder GML

Serial.print("Hello world!")

oder

show_message("Hello world!")

Beide sind 28 Zeichen.

AGB

Ich benutze GTB viel zum Golfen (zumal ich es selbst erstellt habe und es ist Turing complete). Leider gibt es nur eine eingeschränkte Unterstützung für Kleinbuchstaben (da der TI-84-Rechner damit nicht umgehen kann). Dies ist wahrscheinlich das kürzeste GTB-Programm, das Hello World ausgeben kann!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 Zeichen.


Gibt die GTB-Version sie auch an die serielle Schnittstelle aus?
Vi.

Ist die GTB-Version absichtlich mit verschiedenen coss exprsüberfüllt und kann wirklich nicht einfach etwas auf normale Weise ausgeben? Oder "Charakter ist eigentlich keine Zeichenfolge wörtlich und verwirrt mich ...
Vi.

@Vi. Es ist überhaupt nicht aufgebläht ... es muss e von expr streifen, zwei l von unten, o von cos oder von oder l von unten und d von und.
Timtech

'Andere Benutzer können bessere Bs vorschlagen (möglicherweise auch in anderen "Golf" -Sprachen). '--- lass mich mal golfscript ausprobieren:"Hello world!"
John Dvorak

@ JanDvorak Du hast wahrscheinlich recht.
Timtech
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.