Herausforderung
Schreiben Sie das kürzestmögliche Codefragment, sodass bei Verkettung von N Kopien N 2 Zeichen ausgegeben werden . N wird eine positive ganze Zahl sein.
Wenn das Snippet zum Beispiel war soln();
, soln();
würde das Ausführen genau 1 Zeichen und das Ausführen soln();soln();
genau 4 Zeichen und das Ausführen soln();soln();soln();
genau 9 Zeichen usw. ausgeben.
Es können beliebige Zeichen ausgegeben werden, solange die Gesamtzahl der Zeichen korrekt ist. Um \r\n
betriebssystemübergreifende Verwechslungen zu vermeiden, werden Zeilenumbrüche als ein Zeichen gezählt.
Programme lesen möglicherweise nicht ihre eigene Quelle oder ihre Dateigröße oder verwenden andere solche Lücken. Behandle dies wie eine strenge Herausforderung für Quine .
Die Ausgabe kann an stdout oder eine Datei oder eine ähnliche Alternative gehen. Es erfolgt keine Eingabe.
Kommentare im Code sind in Ordnung, ebenso wie die Beendigung der Ausführung.
Beliebige Zeichen dürfen im Programm sein. Die kürzeste Übermittlung in Bytes gewinnt.
quelle
Antworten:
TECO, 4 Bytes
V
druckt den Inhalt der aktuellen Zeile im Textpuffer.1\
Fügt die Zeichenfolgendarstellung der Nummer 1 an der aktuellen Position ein.Bei der N- ten Iteration des Programms werden also zuerst N - 1 Kopien des Zeichens
V
ausgegeben , dann ein weiteres zum Text hinzugefügt und dann N s ausgegeben .1
1
1
quelle
Brainfuck,
1716 BytesSie können es hier testen . Nutzen Sie einfach die Tatsache, dass .
n2+2n+1=(n+1)2
quelle
Brainfuck, 11
Ich habe die erste Antwort von Brainfuck gesehen und fand sie viel zu lang :)
Die Ausgabe ist möglicherweise einfacher zu erkennen, wenn Sie das Pluszeichen durch viel mehr Pluszeichen ersetzen.
Bei der n-ten Iteration gibt jede Schleife N - 1 Kopien des Zeichens mit dem ASCII-Wert 1 und dann eine weitere mit aus
+.
.quelle
Python 2, 22
Druckt die leere Zeichenfolge, dann zwei
x
, dannx
vier und so weiter. Mit dem Zeilenumbruch nach jeder Zeichenfolge werden dien*n
Zeichen ausgegeben .Eine Kopie:
"\n"
(1 Zeichen )Zwei Kopien:
"\nxx\n"
(4 Zeichen)Drei Kopien:
"\nxx\nxxxx\n"
(9 Zeichen)Um zu verhindern, dass die ursprüngliche Variable
a
bei jedem Durchlauf erneut initialisiert wird, beende ich den Code mit einem;a
, das für sich genommen harmlos ist, aber mit der nächsten Schleife kombiniert wird, um den Sündenbockaa
zu erstellen, der stattdessen zugewiesen werden soll. Dieser Trick gehört mir nicht. Ich habe es in einer früheren Antwort gesehen. Ich würde mich freuen, wenn mir jemand einen Hinweis geben könnte, damit ich ihn würdigen kann.quelle
,
After entfernenprint a
sollte funktionieren.print a
druckt nach jedem Druck eine neue Zeile.CJam, 6 Bytes
Nutzt die Tatsache, dass .
n2 + n + (n+1) = (n+1)2
quelle
:L..1+
ist die gleiche Idee in GolfScript...n+
in GolfScript, aber das nervtötende Newline ... :(:L
weil es nicht verwendet wird./// , 21 Bytes
Ich bin mir sicher, dass es einen sehr kurzen und verdrehten Weg gibt, dies in /// zu lösen, aber ich konnte noch nichts finden, außer dem "einfachen" Weg:
Dies basiert auf dem Ansatz, fortlaufende ungerade Zahlen zu drucken. Das Snippet besteht aus einem
1
zu Beginn gedruckten und zwei Ersetzungen, die1
dem ersten Teil jeder aufeinanderfolgenden Kopie des Snippets zwei weitere s hinzufügen . Lassen Sie uns das durchgehenN = 3
. Das Folgende sollte in Gruppen von 3 oder mehr Zeilen gelesen werden: 1. der aktuelle Code, 2. das verarbeitete Token (s), 3. (und folgende) ein Kommentar, was das obige Token tut.Interessanterweise funktioniert es genauso gut, wenn wir das
1
zum Ende verschieben:quelle
> <> , 14 Bytes
Verwendet die Idee "Summe aufeinanderfolgender ungerader Ganzzahlen ab 1". Es beginnt mit 1 und multipliziert es jedes Mal mit 100, wobei die Länge der Ausgabe schrittweise in Schritten von 2 erhöht wird.
Zum Beispiel gibt das Anhängen von 5 Kopien
Ich habe getestet, indem ich die Ausgabe in eine Datei umgeleitet habe, und keine nachgestellte Newline gesehen.
Nervenzusammenbruch
quelle
CJam,
109 BytesDies druckt N 2 Leerzeichen, wobei
N
die Anzahl der Kopien des Codes ist.Code eexpansion :
Probieren Sie es hier online aus
quelle
Python 2, 20 Bytes
quelle
Java - 91 Bytes
This solution is equivalent to this other one in Python. It surely won't win, but it was fun :)
quelle
Perl, 14 bytes
This needs to be run with Perl's
-l
command switch, which causesprint
to append new lines.It prints the default variable
$_
, then prepends two underscores via substitution.Example:
quelle
say
?-E
instead.Brainfuck, 10 chars
Both previous Brainfuck solutions were waaay too long (16 and 11 chars) so here is a shorter one:
In the
n
-th block it prints out2*n-1
characters (with codepoints from2*n-1
to1
)quelle
Prelude,
1812 bytesThis prints N2 tabs. It assumes a standard-compliant interpreter which prints characters instead of numbers, so if you use the Python interpreter you'll need to set
NUMERIC_OUTPUT
toFalse
.The idea is simply to use the top of the stack (which is initially 0) as
2(N-1)
, and print2N-1
tabs, then increment the top of the stack by 2. Hence each repetition prints the next odd number of tabs.quelle
Java - 59 / 44 (depending on requirements)
Apparently we're allowed to assume code runs in a class.
If it can go inside a main method:
quelle
C, 87 bytes
This uses two magic macros.
__COUNTER__
is a macro that expands to0
the first time it is used,1
the second, etc. It is a compiler extension, but is available in both gcc, clang, and Visual Studio at least.__FILE__
is the name of the source file. Including a file in C/C++ is literally the same as pasting it directly into your source code, so it was a little tricky to make use of.It would still be possible to use this technique without
__COUNTER__
. In that case, the standard guard against using code twice could be used for the#if
statement, and__LINE__
could be used to count the number of characters needed.quelle
Dyalog APL,
20 bis19 BytesEine matrixbasierte Lösung.
Probieren Sie es hier aus . Gibt eine Folge von Wiederholungen von zurück . Erklärung durch Explosion für :
N2
a
N = 2
quelle
STATA 20
Es wird eine neue Zeile nachgestellt, um sicherzustellen, dass die display (di) -Anweisung funktioniert. Zeigen Sie zuerst die aktuelle Zahl in Zeilenumbrüchen an (und eine weitere in der Standardeinstellung der Anzeige). Dann addiere 2 zu $ a.
Verwendet die Annäherung an gerade Zahlen (dh Annäherung an ungerade Zahlen minus 1) mit jeder neuen Zeile.
quelle
T-SQL 117
Beachten Sie das nachstehende Leerzeichen, um sicherzustellen, dass die if-Bedingung jedes Mal ordnungsgemäß überprüft wird.
Verwendet den Ansatz mit ungeraden Zahlen. Ich bin nicht sicher, ob in ausgewählten Anweisungen ein Zeilenumbruch steht.
Ich bin mir nicht sicher, ob es eine kürzere Möglichkeit gibt, eine Tabelle zu erstellen, wenn sie nicht existiert.
quelle
PostScript, 35 Zeichen
Jeder Durchgang "leckt" eine Sache auf dem Stapel, so
count
erhöht sich jedes Mal um 1. Dann wird nur der Trick mit der Summe der ungeraden Zahlen verwendet.Die Bytes werden alle ausgegeben,
\000
da dies der Anfangswert von Zeichenfolgen ist.quelle
Haskell, 72
Erläuterung
Der Apply-Operator
$
verhält sich so, als würden Sie umgebende Klammern um den Rest der Zeile setzen (es gibt Ausnahmen, aber in diesem Fall funktioniert dies).aputStr
ist eine Funktion, die einen String mit dem Format "abc ..." annimmt, wobei "abc" die Quadratwurzel der Länge des Strings ist, einschließlich abc. Die Zeichenfolge wird als Ganzzahl analysiert und es wird eine Zeichenfolge zurückgegeben, die mit abc + 1 beginnt und deren Länge zum Quadrat passt. Aufgrund des$
Operators wird dies bei "1" N-mal rekursiv aufgerufen.quelle
Pyth, 8 Bytes
Dies beruht auf der Tatsache, dass N 2 gleich der Summe von
N
ungeraden Zahlen ist. Jetzt druckt Pyth automatisch eine neue Zeile, sodass ichZ * 2
in jedem Code nur noch Zeichen ausgeben mussZ
aus0
nachN - 1
.Code-Erweiterung :
Probieren Sie es hier online aus
quelle
Golflua, 23 Bytes
gibt eine Kombination von
&
und aus\n
.Äquivalenter Lua-Code
Jedes Mal, wenn das Code-Snippet ausgeführt wird, werden 2 Zeichen mehr ausgegeben als beim letzten Mal, beginnend mit 1 Zeichen. Die
print
Funktion hängt eine neue Zeile an, also initialisiere ich X auf 0 anstatt auf 1.quelle
ActionScript - 27/26 Byte
oder
Wie es funktioniert:
Es kommentiert einfach die erste Zeile aus. Hinweis:
trace
Fügt eine neue Zeile hinzu. Oder vielleicht machen das alle IDEs, die ich benutze, automatisch.quelle
GML, 27
quelle