Code Golf für die Faulen


10

Ihr Ziel bei diesem Code Golf ist es, zwei Zeichenfolgen languageund code (wenn der Golfcode, den Sie dafür geschrieben haben, mehrzeilig ist, dann wäre diese Variable mehrzeilig.) Und eine ganze Zahl bytes. Sie repräsentieren die Variablen für eine Programmiersprache, die Anzahl der benötigten Bytes und den Code selbst.

Danach formatieren Sie es wie ein Code-Golfer.

Die Ausgabevariable ist eine mehrzeilige Zeichenfolge mit dem Namen answer.

Sie können mehrzeilige Zeichenfolgen verwenden für:

Wenn Sie nach Stapelüberlauf suchen , sollten Sie in der Lage sein, weitere Programmiersprachen zu finden, die dies unterstützen.

Hier ist eine Vorlage für den Ausgabe-Markdown. Die codeVariable befindet sich in einem Codeblock und es gibt einen Header der zweiten Ebene.

## {language}, {bytes} bytes

     {code}

So würde die Ausgabe aussehen, wenn sie in einen Markdown-Parser eingefügt wird.

{Sprache}, {Bytes} Bytes

    {code}

Es wird davon ausgegangen, dass Variablen bereits als die Sprache ausgefüllt sind, in der Sie Ihren Code Golf-Eintrag codiert haben, die Anzahl der benötigten Bytes und der tatsächliche Code dafür.

Hier ist ein weiteres Beispiel für die Ausgabe als Code, diesmal mit ausgefüllten Variablen:

## JavaScript, 1337 bytes

document.getElementById("foo").innerHTML = bar;

Hier ist die Version als Blockquote:

JavaScript, 1337 Bytes

    document.getElementById("foo").innerHTML = bar;

Bytes können aus Ihrem Code entfernt werden, wenn Sie den Text eines <p>Elements in HTML anhand der ID festlegen result, z. B. den folgenden JavaScript-Code:

document.getElementById("result").innerHTML = answer;

Stellen Sie sicher, dass dies auch <p id="result"></p>im HTML-Abschnitt von JSFiddle enthalten ist, damit dies funktioniert.

Wertung

Wie bei allen Fragen ist der Code, der die geringste Anzahl von Bytes verwendet, der beste.


3
Wird es {code}jemals einen mehrzeiligen Code geben?
Adnan

8
"Variablen werden als die Sprache ausgefüllt, in der Sie Ihren Code-Golf-Eintrag codiert haben, die Anzahl der benötigten Bytes und der tatsächliche Code dafür." Bin ich der einzige, der dies als eine Quine-Variante interpretiert?
Primo

2
Da die Antworten zwei völlig unterschiedliche Probleme lösen, halte ich dies für unklar. Bitte klären , ob language, bytesund codeeingegeben werden oder ob dies eine quine Variante , wo diese Dinge sollen sich den Lösungscode entsprechen. (Und wenn ja, ob direkt oder indirekt das Lesen dieses Quellcodes erlaubt ist und ob eingebaute Quine erlaubt sind.)
Martin Ender

2
Könnten Sie auch Adnans Frage klären, ob die Eingabe codeselbst Zeilenvorschübe enthalten kann?
Martin Ender

2
@ Erdnuss Ich bin verwirrt. Können wir davon ausgehen, dass codees nicht mehrzeilig sein wird, oder können wir nicht? Bitte geben Sie an, dass im Herausforderungstext
Luis Mendo

Antworten:



8

Java, 70 Bytes

String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}

Angenommen, es b[0]handelt sich um den Sprachnamen, b[1]die Anzahl der Bytes und b[2]den Code.

Die Kompilierbarkeit kostet 9 Byte, was zu einem nicht eigenständigen 79-Byte-Programm führt:

class a{String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}}

Das entsprechende monolithische Programm ist 103 Byte lang:

interface a{static void main(String[]A){System.out.print("## "+A[0]+", "+A[1]+" bytes\n\n    "+A[2]);}}

Das monolithische arbeitet mit Befehlszeilenargumenten, wobei diese genau wie das nicht eigenständige Programm angenommen werden:

  • Das erste Argument ist der Name der Sprache
  • Das zweite Argument ist die Anzahl der Bytes
  • Das dritte Argument ist der Code

Java (Lambda-Ausdruck), 56 48 Bytes

(b)->"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];

Dies ist ein java.util.function.Function<String[], String>.


Keines dieser Programme / Funktionen verarbeitet mehrzeilige Zeichenfolgen. Dazu einfach ersetzen b[2]und A[2]durch b[2].replace("\n","\n ")und A[2].replace("\n","\n ")- dabei 23 Bytes hinzufügen.


Ich bin gerade nicht in der Nähe eines Computers, um dies zu bestätigen, aber können Sie \tdie 4 Leerzeichen nach den beiden Zeilenumbrüchen nicht verwenden oder etwas anderes ersetzen?
R. Kap

@ R.Kap Manchmal führt die Verwendung von Tabulatoren anstelle von Leerzeichen zu einem Durcheinander bei SE.
user8397947

Ah ich sehe. Berücksichtigt also die Anzahl der Bytes \tund nicht 4 Leerzeichen?
R. Kap

3
Verliere die Parens auf dem Lambda; Sie können zwei Bytes mit nur speichern b->.
Brian McCutchon

2
Was passiert, wenn mehr als eine Codezeile vorhanden ist?
Neil

5

V , 24 Bytes

Beachten Sie, dass am Ende ein Leerzeichen steht.

Dieses Programm geht davon aus, dass {code}es sich nicht um mehrere Zeilen handelt.

Op hat klargestellt, dass "Code" eine mehrzeilige Zeichenfolge sein kann. Diese 24-Byte- Version funktioniert:

2é#á $á,JA bytes
vGî4é 

Da dies ein nicht druckbares Zeichen enthält, ist hier die lesbare Version:

2é#á $á,JA bytes
<esc>vGî4é<space>

Wo <esc>ist der wörtliche Fluchtcharakter, z 0x1B.


1
Es scheint immer wie ein ständiger Kampf zwischen Jolf und V ...: 3
Conor O'Brien

4

Python 3.5, 40 33 Bytes:

( -7 Bytes dank einiger Klarstellungen von Mego )

lambda*f:'## %s, %s bytes\n\n\t%s'%f

Eine anonyme Lambda-Funktion, die Eingaben als Positionsargumente im Format verwendet <function name>(String, Number, String)und eine mehrzeilige Zeichenfolge ausgibt.

Probieren Sie es online aus! (Ideone)


2
Sie können mehrere Bytes sparen, wenn Sie die Parameterliste erstellen *fund den tupleAufruf beenden.
Mego

@ Mego Leider funktioniert das nicht, da ich TypeError: not enough arguments for format stringimmer dann bekomme, wenn ich es so laufen lasse .
R. Kap

Funktioniert gut, wenn ich es versuche - Sie müssen Positionsargumente anstelle eines Listenarguments verwenden. Außerdem können Sie den Abstand zwischen dem #und dem löschen %.
Mego

@ Mego Wow, das ist so komisch, denn wenn ich es in PyCharm mit Python 3.5.1 versuche, bekomme ich eine Fehlermeldung. Das hat mich so verwirrt. Auch der Raum zwischen dem #und dem Lambda wird benötigt, denke ich.
R. Kap

@ Mego Es ist aktualisiert.
R. Kap

4

JavaScript (ES6), 56 Byte

(l,b,c)=>`## ${l}, ${b} bytes

`+c.replace(/^/gm,`    `)

Zum Lachen gibt es hier eine Antwort, die sich für mich selbst formatiert:

JavaScript (ES6), 68 Byte

f=_=>`## JavaScript (ES6), ${`${f}`.length+3} bytes\n\n    f=${f};`;

Drucken Sie das Ergebnis von f().


@PatrickRoberts Ups, ich habe die Länge nicht wirklich überprüft, sondern nur kopiert und eingefügt und später 6 Bytes für die hinzugefügt (ES6). (Warum hat sich Cᴏɴᴏʀ O'Bʀɪᴇɴ nur die Mühe gemacht, die Länge zu ändern?)
Neil

4

C #, 40 38 Bytes

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c;

C # Lambda, wobei Ein- und Ausgabe Zeichenfolgen sind.


C #, 59 Bytes

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c.Replace("\n","\n\t");

Mit der Behandlung einer mehrzeiligen Antwort.


C #, 71 Bytes

Die 38-Byte-Lösung, die sich selbst druckt

()=>$"## C#, 38 bytes\n\n\t"+@"(a,b,c)=>$""## {a}, {b} bytes

\t""+c;";

Probieren Sie sie online aus


3

Mathematica, 40 Bytes

Print["## ",#,", ",#2,"bytes

    ",#3]&

Anonyme Funktion. Nimmt die Sprache, die Anzahl der Bytes und das Programm als Eingabe und druckt den Text in STDOUT.


2

Jolf, 24 22 Bytes

"## ¦i, ¦j Ξ/u3

    ¦

Hier gibt es nicht viel zu erklären. ¦bedeutet interpolierte Eingabe.

Probieren Sie es hier aus! Die Ausgabe für die Eingabe im Link ist:

## Jolf, 24 bytes

    some filler code I think

Eingabe ist wie folgt:

name

number

"code"

1

MATL , 28 27 Bytes

1 Byte dank @ NinjaBearMonekys Vorschlag gespeichert

35tOj', 'j' bytes'10t4Z"j&h

Probieren Sie es online aus!

Der Codeblock muss in einer einzelnen Zeile stehen.

Erläuterung

35t           % Push 35 (ASCII for '#') twice
0             % Push 0. When converted to char, it will be displayed as a space
j             % Input string (language name)
', '          % Push this string
j             % Input string (byte count)
' bytes'      % Push this string
10t           % Push 10 (ASCII for linefeed) twice
4Z"           % Push string containing four spaces
j             % Input string (code)
&h            % Concatenate everything into a string. Implicitly display

0

Common Lisp, 57 Bytes

(lambda(L b c)(format()"## ~A, ~A bytes~%~%    ~A"L b c))

Zum Spaß finden Sie hier unten einen Codeausschnitt, der einen Header für sich selbst druckt.

Common Lisp, 146 Bytes

#1=(PROGN
(SETF *PRINT-CIRCLE* T)
(LET ((S (FORMAT NIL "~S" '#1#)))
  (FORMAT NIL "## Common Lisp, ~A bytes~%~%    ~A" (LENGTH S) S)))


0

Hashmap , 29 Bytes.

"## "i", "h" bytes.\n\n    "i

(Ich habe diesen Beitrag mit dem Programm geschrieben, musste aber \ n in \\ n entkommen.)
Erläuterung:

"## "                         Push string
     i", "                    Push input and string
          h" bytes.\n\n    "i Push input as number and string, then the input.

0

CJam , 26 23 Bytes

Vielen Dank an @NinjaBearMonkey für das Entfernen von 3 Bytes!

'#_Sl',Sl" bytes"N_S4*l

Der Codeblock muss in einer einzelnen Zeile stehen.

Probieren Sie es online aus!

Erläuterung

'#_S       e# Push character "#" twice, then a space
l          e# Read line from input
',S        e# Push a comma, then a space
l          e# Read line from input
" bytes"   e# Push this string
N_S4*      e# Push newline twice, then four spaces
l          e# Read line from input. Implicitly display 

23 Bytes:'#_Sl',Sl" bytes"N_S4*l
NinjaBearMonkey

@ NinjaBearMonkey Danke! Bearbeitet. Diese Idee sparte ein Byte auch für meine andere Antwort
Luis Mendo

0

Pyke, 25 Bytes

"##"Q", "z" bytes"skd4*z+

Probieren Sie es hier aus!

Oder

Pyke, 0 Bytes

Probieren Sie es hier aus! - Klicken Sie auf die Schaltfläche Antwort kopieren;)

BEARBEITEN - Es ist nur eine Funktion der Website, es betrügt (oder zumindest würde ich es so betrachten), weil es niemals einen AST analysiert und das Webprogramm wahrscheinlich nicht als Teil der Sprache betrachtet wird, da es nicht viel mit der Sprache interagiert (obwohl der Pyke-Interpreter ausgeführt wird)


Wie funktioniert die 0-Byte-Version?
Haykam

Können Sie das der Antwort hinzufügen? Ich zähle das nicht, aber du kannst es trotzdem dort oben behalten.
Haykam

Hey @muddyfish, kannst du diese in zwei Antworten trennen?
Haykam

@ Haykam, wenn dies zum Zwecke der Annahme einer Antwort dient, würde ich es lieber nicht tun, da ich nicht denke, dass die 0-Byte-Lösung tatsächlich Pyke verwendet und sich zu brustig anfühlt
Blue

Ich werde diese Antwort nicht akzeptieren.
Haykam

0

Perl 5, 35 Bytes

Bei einem vollständigen Programm werden Eingaben als Befehlszeilenargumente in umgekehrter Reihenfolge verwendet. Es erfordert -M5.01, was kostenlos ist.

say pop.', '.pop.' bytes

    '.pop

0

Emacs Lisp, 97 Bytes

(lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))

Da es manchmal schwierig sein kann, Anführungszeichen zu umgehen und was nicht, ein Verwendungsbeispiel, das die Zeichenfolge in die Zwischenablage kopiert. (Region markieren und verwenden M-:)

Emacs Lisp, 184 Bytes

(kill-new ((lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))"Emacs Lisp"(buffer-substring-no-properties(region-beginning)(region-end))))
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.