Jeder kann die Ausgabe eines Programms vergrößern, indem er Zeichen hinzufügt. Machen wir also genau das Gegenteil.
Schreiben Sie ein vollständiges Programm, eine innere Funktion oder ein Snippet für eine REPL-Umgebung in einer Sprache Ihrer Wahl, die die folgenden Kriterien erfüllt:
Ihr Code muss mindestens 1 Zeichen lang sein.
Das Ausführen des Originalcodes erzeugt x Zeichen für die Ausgabe an STDOUT (oder die nächstgelegene Alternative), wobei 0 ≤ x <+ ∞ ist .
Wenn Sie ein beliebiges einzelnes Zeichen aus dem ursprünglichen Code entfernen, erhalten Sie erneut einen gültigen Code, der mindestens x + 1 Zeichen für die Ausgabe an STDOUT erzeugt.
Weder der ursprüngliche Code noch die Änderungen dürfen eine Fehlerausgabe nach STDOUT, STDERR, syslog oder anderswo erzeugen. Die einzigen Ausnahmen von dieser Regel sind Compiler-Warnungen.
Ihr Programm benötigt möglicherweise keine Flags oder Einstellungen, um die Fehlerausgabe zu unterdrücken.
Ihr Programm enthält möglicherweise keine schwerwiegenden Fehler, auch wenn keine Ausgabe erfolgt.
Sowohl der ursprüngliche Code als auch die Modifikationen müssen deterministisch sein und eventuell enden (keine Endlosschleifen).
Weder der ursprüngliche Code noch die Modifikationen dürfen Eingaben jeglicher Art erfordern.
Funktionen oder Snippets behalten möglicherweise zwischen den Ausführungen keinen Status bei.
In Anbetracht der Tatsache, dass diese Aufgabe trivial ist, ist dies in einigen Sprachen und in anderen völlig unmöglich. Dies ist ein Beliebtheitswettbewerb .
Bitte berücksichtigen Sie bei der Abstimmung die "relative Kürze" des Codes, dh eine kürzere Antwort ist kreativer als eine längere Antwort in derselben Sprache .
111111111111111111^111111111111111111
(wenn du das niedrigste Verhältnis gemeint hast).k
Anweisung die Ausgabe jedes Programms streng größer ist als die Ausgabe des Originals (weil das andere von da an) Programme würden in jeder Schleife schneller durchlaufen oder mehr ausgeben. Es sah ziemlich interessant aus. Vielleicht werde ich sehen, ob ich es trotzdem beenden und eine weitere Herausforderung stellen kann.Antworten:
Jede REPL mit Caret-XOR-Operation, 5 Bytes
11^11
ist natürlich 0. Die einzigen anderen Möglichkeiten sind1^11
oder11^1
die 10 sind oder1111
die sich selbst produzieren.quelle
99|99
-10
ist länger als0
.TI-BASIC,
31Wenn die letzte Zeile eines Programms ein Ausdruck ist, zeigt der Taschenrechner diesen Ausdruck an. Andernfalls wird der Rechner angezeigt,
Done
wenn das Programm beendet ist. Der Ausdruck hier ist die leere Zeichenfolge, er kann jedoch auch mit einer beliebigen einstelligen Zahl funktionieren.2 Bytes:
Wie oben, jedoch mit einem 2-Byte-Token.
3 Bytes:
Druckt
1
aufgrund impliziter Multiplikation. Kann durch Hinzufügen von Paaren von⁻¹
's auf unbestimmte Zeit verlängert werden . Das unten funktioniert auch.Längere Lösungen:
Es gibt wahrscheinlich auch mehrzeilige Lösungen, aber ich kann keine finden.
quelle
Done
Zeichen; Der Rechner zeigt an,Done
wenn ein Programm ohne Ausdruck in der letzten Zeile (einschließlich des leeren Programms) ausgeführt wurde.CJam, JavaScript, Python usw., 18 Bytes
Die Ausgaben in CJam sind:
JavaScript und Python funktionieren auf ähnliche Weise. Es ist in JavaScript und Python nicht konkurrenzfähig,
aber es ist nicht einfach, in CJam ein kürzeres zu finden.quelle
Oktave, 5 Bytes
(x: y) gibt das Zahlenfeld zwischen x und y in Schritten von 1 an, sodass zwischen 10 und 10 nur das Element 10 vorhanden ist:
Wenn das zweite Argument kleiner als das erste ist, gibt die Oktave die leere Matrix und ihre Dimensionen aus:
Wenn ein Zeichen aus der ersten Zahl entfernt wird, enthält das Array weitere Elemente:
Wenn der Doppelpunkt entfernt wird, gibt die Nummer sich selbst zurück:
quelle
Mikroskript, 1 Byte
Dies erzeugt keine Ausgabe, da
h
das implizite Drucken der Sprache unterdrückt wird. Das Entfernen des einzigen Zeichens erzeugt ein Programm, dessen Ausgabe ist0\n
.Ich werde später versuchen, eine bessere Antwort zu finden.BEARBEITUNG AM 17. NOVEMBER:
Dies funktioniert auch in Microscript II, mit der Ausnahme, dass
0\n
das leere Programm nicht nachgibt , sondern nachgibtnull
.quelle
Pyth, 3 Bytes
G
wird mit den Kleinbuchstaben im Alphabet vorinitialisiert.c
ist die Split-Funktion.cGG
teilt das Alphabet nach Vorkommen des Alphabets auf, das mit['', '']
(8 Byte) endet .Wenn der zweite Parameter fehlt, wird
c
die Zeichenfolge durch Leerzeichen, Tabulatoren oder Zeilenumbrüche getrennt. Da keiner von ihnen in erscheinenG
, für die AusgabecG
ist['abcdefghijklmnopqrstuvwxyz']
(30 Bytes).Und
GG
druckt einfach das Doppelte des Alphabets in zwei separaten Zeilen:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz
(53 Byte).Probieren Sie es online aus: Demonstration
quelle
Python REPL, 6 Bytes
Nicht die kürzeste, aber hier ist eine weitere Antwort auf Fließkomma-Missbrauch:
Aber...
quelle
JavaScript (und vieles mehr), 5 Byte
44/44
oderquelle
CJam, 5
Probieren Sie es online aus
quelle
Sprache , 5 Bytes
Die Länge des Programms beträgt 5, was dem Brainf *** -Programm entspricht, das
,
ein Ende des Eingabezeichens liest und ohne Ausgabe endet.Das Entfernen
0000
von.
Zeichen führt dazu, dass der Code eine Länge von 4 hat, die dem Programm brainf *** entspricht, das ein Zeichen (Codepunkt0
) ausgibt und endet.Das Unary Äquivalent wäre
0000000000000
(13 Nullen) , weil Sie ein führender vorangestellt haben1
auf die binäre Länge des Codes so101
wird1101
.quelle
PHP, 6 Bytes
Ich habe diese Gruppe für ein paar Wochen beobachtet und bin von Ihren Programmiertechniken erstaunt. Jetzt musste ich mich anmelden, es gibt etwas, das ich tun kann, sorry :-) Dies könnte jedoch mein letzter Beitrag hier sein ...
(Beachten Sie das Leerzeichen nach der Sekunde
p
)Dies gibt eine leere Zeichenfolge aus. Wenn Sie ein Zeichen entfernen, wird der Text ohne das Zeichen ausgegeben. Beachten Sie, dass HTML-Fehler auftreten können (z. B. Inhalte, die nicht von Browsern gerendert werden
<?ph
).Ich habe es auch mit dem
echo
Tag versucht . dh z.B.:Dieser gibt aus
1
. Wenn=
weggelassen wird,<? __LINE__;;
ist die Ausgabe. Das Entfernen der magischen Konstanten führt jedoch zu E_NOTICE : Hinweis: Verwendung der undefinierten Konstante LNE - angenommen ' LNE ' in ...Wenn Hinweise nicht als Fehler gelten (Punkt 4 der Regeln), gilt dies auch :-)
quelle
<HTML>
Tag usw.)php test.php
. Der zweite Code ist übrigens ungültig. Die Frage verbietet keine Fehler, sondern Fehlerausgabe , dh Fehler, Warnung, Hinweise usw.#!
in einer Skriptdatei funktioniert auch.Python,
108 BytesArbeitet in Python und bei Freunden. Vielen Dank an Jakube, der gezeigt hat, wie man es 2 Byte kleiner macht.
Von IDLE:
ursprünglich hatte ich das (10 bytes):
Von IDLE:
und in der gleichen Anmerkung:
Funktioniert aufgrund der schönen Rundung von Python in 17 Bytes identisch.
quelle
56...
,26...
und dann56...
wieder, aber es gibt nur einen Weg 56 zu bekommen, so sollte es nur einmal aufgenommen wird, ist es nicht?SWI-Prolog-Dolmetscher
Hinweis: Sie können das Finale nicht entfernen
.
. Prolog-Interpreten suchen immer nach einem letzten Zeitraum, in dem Ihre Abfrage ausgeführt wird. Wenn wir uns also strikt an die Regeln dieses Wettbewerbs halten und uns erlauben, den Zeitraum zu entfernen, in dem sie nicht ausgeführt werden, wird eine Zeile übersprungen und auf zusätzliche Befehle gewartet wird durch einen Punkt beendet.Die ursprüngliche Abfrage
__A=__A.
Ausgängetrue.
.Die Abfrage wird
_A=__A.
ausgegeben_A = '$VAR'('__A')
. Ähnliche Änderungen (dh Entfernen von einem_
oder beidenA
) führen zu ähnlichen Ergebnissen.Schließlich gibt die Abfrage
__A__A.
in SWI-Prolog Folgendes aus:quelle
Sed, 1 Byte
Da
sed
ein Eingabestream erforderlich ist, schlage ich eine Konvention vor, dass das Programm selbst als Eingabe bereitgestellt werden soll.Ein alternatives Programm ist
x
, aber das ändert sich nur1
in2
Bytes der Ausgabe, wenn es gelöscht wird.quelle
K, 3 Bytes
Ausgänge
0
im REPL. Das Entfernen der ersten 2 Ausgaben0 1
, das Entfernen der Ausrufeergebnisse22
und das Entfernen der letzten 2 Ergebnisse führen zu einer Zeichenfolge, die zwischen K Implementierungen variiert, aber immer mindestens 2 Zeichen umfasst (in(2!)
OK laut @Dennis, Kona-Ausgaben2!
).quelle
*
Nur Ausdrucke entfernen 2. Entfernen der 2 Ausdrucke(*!)
(eine unvollständige Funktion) in OK; Ich kenne keine anderen Dolmetscher (z. B. Kona, k2 usw.), obwohl ich glaube, dass Kona drucken würde*[!;]
oder ähnliches. Ich entfernte den Stern, weil er am sichersten schien.MATLAB,
97 BytesEs ist 2 Bytes länger als die andere MATLAB / Octave-Antwort, aber ich mag es trotzdem, da es etwas komplexer ist.
Matlabs
'
Operator ist die komplexe konjugierte Transponierte. Wenn Sie dies auf einer skalaren imaginären Zahl anwenden, erhalten Siei' = -i
. So wie imaginäre Zahlen einfach geschrieben werden2i
können:Das Entfernen eines der Zeichen führt zu einer der folgenden Folgen:
quelle
GolfScript, 2 Bytes
Diese Antwort ist nicht konkurrierend, aber da es der Code ist, der diese Herausforderung inspiriert hat, wollte ich sie trotzdem teilen.
Standardmäßig drucken alle GolfScript-Programme den gesamten Stapel, gefolgt von einem Zeilenvorschub, indem sie
puts
auf dem gesamten Stapel ausgeführt werden. Die Funktionputs
selbst wird wie{print n print}
im Interpreter implementiert. Hierbei handelt es sich um eine integrierte Funktionprint
undn
eine Variable, die"\n"
standardmäßig die Zeichenfolge enthält .Jetzt schiebt ein GolfScript-Programm immer die Eingabe von STDIN auf den Stapel. In diesem Fall wird eine leere Zeichenfolge abgelegt, da keine Eingabe erfolgt. Die Variablenzuweisung
:n
speichert diese leere Zeichenfolge inn
, unterdrückt den impliziten Zeilenvorschub und macht die Ausgabe vollständig leer.Durch das Eliminieren
n
bleibt die unvollständige Variablenzuweisung:
(man könnte meinen, dass dies ein Syntaxfehler ist, aber nein), sodass der implizite Zeilenvorschub wie gewohnt gedruckt wird.Wenn Sie eliminieren
:
, bleibtn
das übrig , was einen Zeilenvorschub auf den Stapel drückt, sodass das Programm zwei Zeilenvorschübe druckt.quelle
APL, J und möglicherweise andere Varianten, 3 Bytes
Es wird
1
in APL ausgegeben.-1
gibt aus¯1
und--
gibt in TryAPL Folgendes aus :quelle
J, 5 Bytes
Größe der komplexen Zahl
5 + 12i
in REPL..
J 9 Bytes
Basierend auf Gleitkommapräzision, Reziprok und Inverse Matrix.
Probieren Sie es hier online aus.
quelle
Mathematica, 3 Bytes
quelle
Dyalog APL , 2 Bytes
⍴0
gibt eine leere Zeichenkette zurück (Länge 0)⍴
Rückgabe⍴
(Länge 1)0
Rückgabe0
(Länge 1)quelle
Schnell (und viel mehr), 8 Bytes
Ausgabe (4 Zeichen):
Beim Entfernen des n-ten Zeichens lautet die Ausgabe:
Es gibt 78 mögliche Lösungen wie diese im Format von
a^b<c
.Ich denke, das Ziel dieser Herausforderung sollte so viele Bytes wie möglich sein, denn je mehr Bytes, desto mehr Bytes können entfernt werden und sind daher schwieriger.
quelle
MathGolf , 2 Bytes
Probieren Sie es online!
Erläuterung
Warum funktioniert das?
Die reguläre Ausgabe ist
9
. Wenn das(
entfernt wird, ist die Ausgabe 10. Wenn das♂
entfernt wird, holt das Programm implizit eine 0 aus dem Stapel, um den(
Operator zu versorgen , der die Ausgabe vornimmt-1
.quelle
Clojure, 11 Bytes
Zuerst dachte ich, nur eine Antwort mit einem Buchstaben in der REPL zu posten, wie die anderen Sprachen, z
Das Problem ist jedoch, dass die REPL beim Drücken der Eingabetaste nichts unternimmt, wenn Sie dieses Zeichen entfernen. Also musste es stattdessen mit einer Funktion umhüllt werden, wie es die Regeln der Frage zuließen. Wenn Sie diese Funktion aufrufen, wird 1 zurückgegeben. Wenn Sie das einzige Zeichen in der Funktion entfernen,
Die Funktion gibt zurück,
nil
was zusätzliche zwei Bytes ausgibt.quelle
1
in diesem Fall (1 Byte) wäre.05AB1E (Legacy), 1 Byte
Jedes einzelne Byte in 05AB1E (Legacy) würde funktionieren, mit Ausnahme von
[
(Endlosschleife).Sehen Sie hier alle möglichen Ausgaben für alle möglichen Einzelbyte-05AB1E-Programme.
Wenn Sie dieses einzelne Byte entfernen, sodass ein leeres Programm übrig bleibt, wird der Inhalt von info.txt standardmäßig an STDOUT ausgegeben.
Probieren Sie es online aus.
05AB1E , 1 Byte
Probieren Sie es online aus.
Leider gibt ein leeres Programm in der neuen Version von 05AB1E standardmäßig nur eine 1-Byte-Zeile aus ( online testen ), sodass fast keines der 1-Byte-Zeichen möglich ist, da sie nichts ausgeben müssen. Das einzig mögliche Programm, das nichts ausgibt (also auch nicht die implizite Newline) ist meines Wissens nach
?
.quelle
Japt , 2 Bytes
Probieren Sie es online!
A
vorinitialisiert wird auf 10,É
subtrahiert 1, und das Ergebnis ist 1 Byte:9
.Das Entfernen von É führt zu dem Programm
A
, das den Wert von A ausgibt10
, sodass das Ergebnis 2 Bytes beträgt.In ähnlicher Weise führt das Entfernen von A dazu , dass nur
É
-1 interpretiert und als ausgegeben wird-1
, sodass das Ergebnis 2 Byte beträgt.quelle
Runenverzauberungen , 6 (veränderbare) Bytes
Probieren Sie es online!
Runic hat keine REPL-Umgebung und das Schreiben eines vollständigen Programms zur Erfüllung der Einschränkungen ist nicht ohne weiteres möglich (was entweder zu ungültigen Programmen oder zu keiner Ausgabe führt). Der Teil des Codes
11-{{B
fungiert also als innere Funktion, und nur dieser Teil kann geändert werden. DieB
Anweisung ist nahe genug an einem Funktionszeiger und einer Return-Anweisung, damit diese Klassifizierung akzeptabel ist (da sie die IP an eine Position im Code springt und eine Return-Position an den Stack schiebt, auf die ein nachfolgenderB
oder verworfener Zugriff möglich ist ). .0
1
s:05
-
:11
{
:Error051
B
:120
Das Finale
\
am Ende der ersten Zeile bildet eine äußere Grenze um die innere Funktion, falls der Rückgabebefehl entfernt wird, damit die IP nicht überall mäandriert (und keine Ausgabe erfolgt).Beachten Sie, dass dies
Error051
nur eine willkürliche Zeichenfolge ist. Ich kann in diesen Teil des Codes alles einfügen, was ich will, und "Fehler" war ein amüsantes Ergebnis, wenn Code die Rückgabekoordinaten und die IP-Teleports an einen beliebigen Ort abfragt.quelle