Die Herausforderung
Schreiben Sie ein vollständiges Programm, das doppelt so viele Bytes in die Standardausgabe schreibt wie das Programm.
Regeln
Das Programm muss ASCII-Zeichen in die Standardausgabe schreiben.
Der Inhalt der Ausgabe spielt keine Rolle.
Die in Bytes gemessene Ausgabe muss genau doppelt so lang sein wie das Programm, auch in Bytes, es sei denn, Sie erfüllen den Bonus.
Alle nachfolgenden Zeilenumbrüche sind in der Byteanzahl der Ausgabe enthalten.
Bonus
Ihr Programm kann optional eine Zahl n
als Eingabe verwenden. In diesem Fall muss die Ausgabe genau n * program length
bytes sein. Sie können davon ausgehen, dass n immer eine positive ganze Zahl ist. Wenn keine Eingabe angegeben wird, n
muss der Standardwert 2 sein.
In diesem Fall können Sie 25 Bytes von Ihrer Punktzahl abziehen.
Kürzeste Sendung gewinnt.
Beschränkungen
Keine Standardlücken.
Das Programm muss mindestens 1 Byte lang sein.
Kein unnötiges Leerzeichen zum Quellcode hinzufügen, um dessen Länge zu ändern. Ebenso zählen Kommentare nicht.
Sofern Sie den Bonus nicht erfüllen, darf das Programm keine Eingabe akzeptieren. Wenn Sie den Bonus erfüllen, muss die ganze Zahl die einzige Eingabe sein.
Die niedrigste Punktzahl (Programmlänge in Byte - Bonus) gewinnt.
Die kürzeste Antwort für jede Sprache gewinnt für diese Sprache .
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
quelle
n * program length
Byte sein oder ist das ein Minimum?Antworten:
HQ9 + , 2 Bytes
Ausgänge
Ich denke es ist hier nicht verboten.
quelle
QQ
in einen Dolmetscher.Shakespeare, 768
Ja, Shakespeare ist keine Golfsprache. Gibt 1.536 Leerzeichen aus.
Bearbeiten: 256
Okay, ich werde es tatsächlich Golf spielen. Beachten Sie, dass das oben Genannte in keiner vorhandenen Shakespeare-Implementierung kompiliert wird, da ich es sorgfältig von Hand geschrieben habe (aber bereit bin, seine Richtigkeit zu verteidigen).
Das Folgende übersetzt in C mit einer Warnung in spl-1.2.1 und gibt 512 Leerzeichen aus:
quelle
Rückruf, 17 Bytes
16 NOOPs. Dann wird der Debugger
!
aufgerufen und der Speicher auf der Konsole abgelegt. Der Speicher ist leer, aber der Header ist 34 Byte lang:Probieren Sie es hier aus .
quelle
Mathematica REPL, 1 Byte
Druckt
#1
.quelle
CJam, -17 Bytes
Der Quellcode ist 8 Bytes lang und qualifiziert sich für den Bonus von -25 Bytes .
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Python 2.6, 10
Druckt
-0.10000000000000001
, was 20 Zeichen entspricht.Beachten Sie, dass die Zeichenfolgenwiedergabe präziser ist.
print-.1
gibt gerade-.1
undprint.1/3
gibt0.0333333333333
für nur 13 Stellen Genauigkeit.quelle
print`+.1`
?Startwert , 10 Bytes
Kompiliert zum Befunge-Programm (gefunden mit Brute Force)
Dies erzeugt die folgenden 20 Bytes, wenn es ausgeführt wird (getestet in CCBI, beachte den folgenden Leerraum):
Da ich mit Befunge 98 nicht vertraut war, musste ich die Spezifikation einige Male überprüfen:
k
scheint mir ziemlich kaputt zu sein, einmal mehr auszuführen als beabsichtigt, da die IP in den wiederholten Befehl übergeht.
Ausgänge als Zahl, gefolgt von einem Leerzeichenquelle
R,
32 BytesCode
Ausgänge
Wow, endlich R, endlich.
Es scheint so, als würde es auch
{}
funktionierenNULL
Bonus
3316 Bytes:Code
Ausgänge
quelle
Matlab,
75 Bytes2 Bytes weniger dank @flawr!
Ausgabe:
Die Ausgabe enthält also 10 Bytes.
newline
ans =
newline
newline
3
newline
quelle
format compact
Standardeinstellung hat :)format loose
ist die Standard - Präferenz123;4
? Ist drei Bytes kürzer =)JavaScript, 2 Bytes!
Noch kürzer als die 3-Byte-Lösung:
Kehrt
true
nach dem Laufen zurück.quelle
Python 2, 11
Drucken Sie die Zeichenfolgendarstellung des integrierten
id
Zeichensatzes aus, dh 22 Zeichen:Das
*1
ist, um den Code auf 11 Zeichen zu bringen. Das könntest du auch tunprint id;00
.Langweiligere Alternative 11 sind:
quelle
print.8/-9j
print id,;1
reicht aus, sie zu ändern , um die nachgestellte Zeile zu unterdrücken. Es wird auch kein Leerzeichen hinzugefügt.print 9**21
funktioniert nicht. Es ist 21 Zeichen.print 9**23
funktioniert aberGleichstrom, 10-25 = -15
Nimmt eine leere Zeile für "keine Eingabe".
Berechnet 10 ^ (10 * n) - 1, wobei n die Eingabe ist, oder 2, wenn die Eingabe leer ist. Druckt eine Zeichenfolge
9
mit der erforderlichen Länge.2
Drücken Sie 2 auf den Stapel, falls die Eingabe leer ist?
Schieben Sie die Eingabe auf den StapelA
Drücke 10 auf den Stapel (dc hat AbkürzungenA
-F
für 10 - 15)*
Pop zweimal und multiplizieren (Eingabe mit 10 multiplizieren)A
Drücke 10 auf den Stapelr
Reverse Top zwei Stack-Elemente^
Potenziere 10 ^ (10 * Eingabe)1-
1 von der Oberseite des Stapels abziehenn
Ohne Zeilenvorschub drucken.quelle
n
anstelle von verwendenp
.TI-Basic, 3 Bytes
Druckt
100000
.quelle
0
für 1 Byte machen.ᴇ3
? Und @lirtosiast, da TI-Basic keine Zeilenumbrüche hat, bin ich skeptisch.Brainfuck, 14 Bytes
Dies ist eine kleine mathematische Übung. Wir bezeichnen die Anzahl der
+
Zeichen im Code mita
und die Anzahl der.
Zeichen mitb
.Der Code gibt
a*b
Bytes mit Werten vona
bis aus1
(dies sind Nicht-ASCII-Bytes, aber es scheint gemäß der Spezifikation in Ordnung zu sein). Die Länge des Codes ista+b+3
. Also haben wirWenn wir verschiedene Werte für
a
und versuchenb
, sehen wir, dass das Minimum für füra+b+3
erreicht wirdquelle
+[[>....]-<<+]
Option erkennen.gs2 , -18 bytes
CP437 :
W↕0!↨.2
Hex-Dump:
57 12 30 21 17 2e 32
W
liest Zahlen aus STDIN in eine Liste.↕0
Fügt der Liste eine 2 hinzu und!
extrahiert das erste Element. Dann wird↨.
(die Liste ) so oft[0,1,2,3,4,5,6]
wiederholt (2
).Dies ist sehr ähnlich zu Dennis 'CJam-Antwort - gs2 kombiniert nur
r
undi
in einem Byte.Hinweis : Ich musste einen Fehler in der
gs2
Implementierung beheben , damit dies funktionierte: Zuvor hatte jedes Programm eine versteckte Newline an die Ausgabe angehängt, was völlig unbeabsichtigt war. Es ist erst aufgetaucht, nachdem ich versucht habe, dieses Programm zu lösen (die Sprache wurde für Anarchy Golf entwickelt, bei der alle Zeilenumbrüche ignoriert werden) Salz.quelle
Perl 5, 16 Bytes - 25 = -9
Dies ist eine merkwürdige Herangehensweise an das Problem.
Führen Sie mit dem
-p
Befehlszeilenargument aus.Ich sah eine Perl-Antwort darunter, die eine spezielle Variable verwendete, um mehr Text zu drucken - und damit ihre Byteanzahl zu verkürzen. Also habe ich eine viel ausführlichere Spezialvariable verwendet. Es werden 8 Zeichen mit einem 2-stelligen Variablennamen ausgegeben. Somit kann mit einer Byte - Anzahl von 16 (aufgefüllt mit einem Leerzeichen zu machen, 16), druckt er
2 * $]
, wo$]
die als gedruckte Perl - Version ist5.xxxxxx
, hängt von Ihrer Perl - Version. Ohne Eingabe wird es viermal ausgegeben, gleich8*4
oder32
, was der doppelten Bytezahl des Codes entspricht.Ich liebe Perl.
quelle
pop
und Sie können daranshift
arbeiten@ARGV
(in einem, an demsub
sie arbeiten@_
), so dass Sie so etwas wie$n=pop||2
den ersten Codeblock nach unten bekommen und;}
am Ende haben , das kann fast immer nur sein}
, um einen anderen zu retten. Etwas, das Ihnen helfen könnte, mehr Zeichen zu sparen, ist der Operatorx
für die String-Wiederholung ,print 1x20
oder etwas in dieser Richtung ... :) Ich hoffe, das hilft!print"n"x(21*pop||42)
. Führen Sie mitperl -e'print"n"x(21*pop||42)' 3 | wc -c
Pyth ,
109 - 25 = -16-1 von Dennis
Druckt [Eingabe] * 9 Anführungszeichen oder 2 * 9, wenn die Eingabe leer ist.
isaacg hat hier eine kürzere antwort
Pyth , 1 Byte
Druckt
10
. Es ist eine eingebaute Variable, die auf 10 initialisiert wird.quelle
Q
dass Pyth die Eingabe auswertet, bevor der eigentliche Code ausgeführt wird.**N9.xvz2
funktioniert wie erwartet, ist aber nicht kürzer als**N9?zvz2
.T
Ausgänge10
und eine Newline. Verwenden Sied
, es ist ein Raum, der eine neue Zeile angehängt wirdMakkaroni 0.0.2 , 23 Zeichen
Druckt 32 9 in binärer
1000000000000000000000000000000000000000000000
Form , was sich in der Regel als 46 Zeichen lang herausstellt , ohne nachfolgende Zeilenumbrüche.quelle
JavaScript, 4 Bytes
Ich denke, das ist die kürzest mögliche JS-Lösung ohne ES6: P
quelle
v0.10.40
druckt überhaupt nichts, weil es keinen Druckbefehl gibt. Haben Sie eine andere Version von Node.js oder funktioniert dies nur in einer Shell, die die Auswertung einer Zeile ausgibt? (In diesem Fall glaube ich nicht, dass diese Antwort gültig wäre).C,
2725• Vielen Dank an @Titus, dass Sie 2 Bytes abgeschlagen haben
Und für meine nicht konkurrierende 16-Byte- Lösung in C gehen Sie hier: https://codegolf.stackexchange.com/a/111330/16513
^ Ich sage nicht konkurrierend, da der Fehlercode möglicherweise von Ihrem Compiler abhängt. Beachten Sie auch, dass ich in dieser Lösung GCC verwende. Ich bin mir auch nicht sicher, ob es gegen Regel 1 verstößt oder nicht. Ich denke, es ist wahrscheinlich so, dass ich es als nicht konkurrierend bezeichnet habe
quelle
main(){printf("%0.XXf",0);}
funktioniert.#include
. Der Compiler gibt eine Warnung aus, die manchmal abstürzt, in der Regel jedoch funktioniert sie .V , 2 Bytes
Dies gibt aus
Probieren Sie es online!
Erläuterung
Dies ist eine wirklich knifflige Antwort, die durch Missbrauch der Interna von V funktioniert. Im Grunde genommen
ÿ
ist dies ein Befehl in V, der signalisiert, dass das Programm beendet ist und alle ausstehenden Befehle ausgeführt werden müssen. Andernfalls würden einige implizite Endungen nicht funktionieren und die Interpretation würde häufiger hängen bleiben. Dieser Befehl wird am Ende des Programms automatisch mehrmals gesendet und hat die meiste Zeit keine Auswirkung auf die Ausgabe.é
ist ein Befehl, der ein einzelnes Zeichen einfügt. Dies geschieht jedoch, indem ein unformatiertes Byte abgerufen wird, sodass es nichtÿ
als "Ende" interpretiert wird, sondern als "Dies ist das Zeichen, das Sie einfügen müssen".4é
Lässt es dieses Zeichen viermal anstelle von einem einfügen.quelle
Bash, 11 Bytes
Hier ist eine erfreulich ironische Verwendung eines Datenkomprimierungstools :) ...
gzip -f<<<2
Hier ist ein Hex-Dump der Ausgabe (22 Bytes) ...
quelle
DC, 19-25 = -6
Nimmt eine Zahl (2 wird als Backup auf den Stapel gelegt) und multipliziert sie mit 19.
1
Druckt eine (keine neue Zeile) und dekrementiert die Zahl. Schleifen, während die Zahl größer als 0 ist.quelle
C ++, 80 Bytes
Beachten Sie, dass das Zeilenumbruchzeichen zwei Zeichen umfasst. (Wenn Sie dies nicht möchten, ändern Sie i <20 in i <= 19, um zur gleichen Byteanzahl zurückzukehren.)
Beispielausgabe (ändert sich jedes Mal)
gleiche 8-stellige Speicheradresse 20 mal.
quelle
for
Schlaufe ist kürzer als einewhile
Schlaufe und ermöglicht das Ablegen der Hosenträger. Sie ist etwas billiger zu verwendencstdio
und benötigt nurprintf
eine Schnur. Sie müssen nichts zurückgeben.#include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}
Es gibt jedoch bereits eine kürzere Antwort mit einem etwas anderen Ansatz.CJam, -9
Erläuterung
q_,
Liest die gesamte Eingabe und drückt sie und drückt dann die Länge.
{i}{;2}?
Wenn die Länge der Eingabe über Null liegt, konvertieren Sie sie in eine Ganzzahl. Andernfalls öffnen Sie den Eingang und drücken Sie 2.
G*
Drückt 16 (die Programmlänge) und multipliziert sie dann mit 2, wenn keine Eingabe vorhanden ist, oder mit der Eingabe.
'X*
Drückt X und multipliziert es mit der Oberseite des Stapels.
quelle
q2e|i
geben Sie die Nummer , die Sie wollenr_{i}2?SB**
.> <> , 19 + 2 (-v Flag) - 25 = -4 Bytes
Teste es hier!
Danke Cole und Sp3000
Überprüft zuerst die Stapellänge, ob es 0 ist, und legt 2 auf den Stapel. Multipliziert es mit 21 (Codelänge), gibt dann die Unicode-Darstellung dieser Zahl aus und dekrementiert es um 1. Schleifen bis 0. (Sie müssen die Ausgabe überprüfen, um die Zeichen zu sehen, da der Browser sie nicht anzeigt.)
quelle
l0=?2f6+*v
die erste Zeile und1-::0=?;o>
die zweite es richtig machen.?!
ist in der Regel besser als0=?
JavaScript (ES5), 68 Byte - 25 Bonus = 43
(Falls Ihr Browser aus Sicherheitsgründen nicht zulässt, dass das Snippet ausgeführt wird, versuchen Sie es unter http://jsfiddle.net/thePivottt/c3v20c9g/. )
Dieses Skript funktioniert nur in einem Browser, der mindestens DOM3 (mit
Node.textContent
) und ECMAScript 5 (oder möglicherweise eine ältere Version) unterstützt. Ich habe versucht, es so standardkonform und kompatibel wie möglich zu machen. Es wird außerdem davon ausgegangen, dass sich das Skript im erstenscript
Element des Dokuments befindet.Tatsächlich werden mehrere Kopien des Skripts selbst verkettet, was ziemlich beeindruckend ist . Beachten Sie, dass das Snippet-Tool in SE dem Skript zusätzliche Leerzeichen hinzufügt. Wir könnten dieses Leerzeichen ignorieren,
.trim()
aber ich halte es nicht für notwendig, da das Programm perfekt ist, ohne dass sich SE einmischt. Speichern Sie einfach diese HTML5-Datei, wenn Sie möchten, dass sie einwandfrei funktioniert.Dieses Skript verwendet
prompt
undalert
weilconsole.log
es nicht Teil eines Standards ist, auch wenn die meisten modernen Browser es verwenden. Wenn die Anzahl der übergebenen Wiederholungen nicht gültig oder leer ist, wird standardmäßig 2 verwendet. Wenn die Eingabe eine Dezimalzahl ist, stürzt das Programm aufgrund der ungültigen Arraylänge ab.Der Code verwendet einige interessante Funktionen von JavaScript:
Array(1+(+prompt()||2))
Array(INT)
Erstellt ein Array von INT-Zellen.+prompt()
Nimmt eine Eingabe und verwandelt sie in eine Zahl. Wenn wir die Eingabe als Zeichenfolge übergeben würden, würde dieArray
Funktion sie einfach in ein Array mit einem Element einschließen.+prompt()||2
Gibt die Eingabe zurück, wenn sie wahr ist , andernfalls wird 2 zurückgegeben.Dieser gesamte Code erzeugt ein Array von N leeren Elementen, wobei N um eins größer ist als die Anzahl der angeforderten Wiederholungen.
.join(document.scripts[0].textContent)
Die
join(STRING)
Methode des Arrays erstellt eine Zeichenfolge, indem alle Zellen verkettet werden und die bereitgestellte Zeichenfolge zwischen Werte gesetzt wird. In diesem Programm befinden sich N + 1 leere Elemente im Array oder genau N zwischen den Punkten. Das Ergebnis ist eine Zeichenfolge, die das N-fache der angegebenen Zeichenfolge enthält.document.scripts[o]
ist das erste<script>
Element des Dokuments.Die
textContent
ofNode
-Instanzen geben den gesamten darin enthaltenen Text und die zugehörigen untergeordneten Knoten einschließlich der Skripte zurück.quelle
str.repeat
und trotzdem den Code selbst ausgeben, verringert sich die Punktzahl auf 26, aber es ist etwas zu langweilig: PJavaScript ES6, 33 - 25 = 8
Probieren Sie es online!
quelle
33
ist eigentlich die Länge des Codes. Es erstellt ein neues Array mit der Länge,33*a
wobeia
der Eingabeparameter gemäß OP standardmäßig 2 ist, füllt es und gibt eine verknüpfte Zeichenfolge zurück.Arrary(1+a*<length>)
undjoin`0`
Julia, 42 Bytes - 25 = 17
Dies liest eine Zeile aus STDIN mit
readline()
. Wenn es leer ist, dh keine Eingabe bereitgestellt wurde, wird n als die Eingabe definiert, die in eine Ganzzahl konvertiert wurde. Ansonsten n ist 2. Wir haben dann 42 drucken n@
s zu STDOUT.quelle
Perl, 18-25 = -7
Die spezielle Variable
$=
, auch bekannt als$FORMAT_LINES_PER_PAGE
, beginnt ihre Lebensdauer mit60
und muss daher nur halb so oft dupliziert werden, wie die Byte-Ausgabe erfordert.quelle
print$=x9x(pop||2)
nett!