Da Halloween ansteht, dachte ich, ich könnte eine lustige kleine Code-Golf-Herausforderung starten!
Die Herausforderung ist ganz einfach. Sie müssen ein Programm schreiben, das entweder trick
oder ausgibt treat
.
"Die Wendung?" du darfst fragen. Nun lassen Sie mich erklären:
Ihr Programm muss Folgendes tun:
- In zwei verschiedenen Sprachen kompilierbar / lauffähig sein. Verschiedene Versionen derselben Sprache zählen nicht.
- Wenn Sie das Programm in einer Sprache ausführen, sollte es ausgegeben werden
trick
und die andere sollte ausgegeben werdentreat
. Der Fall ist irrelevant und das Auffüllen der Zeichenkette mit Leerzeichen ist erlaubt (siehe Beispiele). - Das ist Code-Golf , also gewinnt die Lösung mit den wenigsten Bytes.
Ein paar Erklärungen:
Gültige Ausgaben (Nur für die Wörter, die nicht zum Ausführen des Codes in den beiden Sprachen verwendet werden. Fügen Sie auch Anführungszeichen hinzu, um den Anfang oder das Ende der Ausgabe zu kennzeichnen. Nehmen Sie sie nicht in Ihre Lösung auf!):
"trick"
"Treat"
" TReAt"
"
tRICk "
Ungültige Ausgaben :
"tri ck"
"tr
eat"
"trck"
Ich bin gespannt, was Sie sich einfallen lassen können! Viel Spaß beim Golfen!
Ich möchte darauf hinweisen, dass dies meine erste Herausforderung ist. Wenn Sie Vorschläge zu dieser Frage haben, hinterlassen Sie diese bitte in Form eines Kommentars.
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
Antworten:
2sable / pl , 8 Bytes
Beide Programme wurden lokal mit derselben 8-Byte-Datei getestet, daher handelt es sich um eine korrekte Mehrsprachigkeit.
2sable: trick
Dies ist das Programm auf Codepage 1252 .
Probieren Sie es online!
pl: behandeln
Dies ist das Programm auf Codepage 437 .
Probieren Sie es online!
Wie es funktioniert
2sable: trick
pl: behandeln
quelle
Python / Windows Batch, 25 Bytes
Alles nach dem # wird von Python als Kommentar interpretiert, während das || ist ein ODER im Stapel, das besagt, dass, da der vorherige Befehl fehlgeschlagen ist, dieser ausgeführt wird.
Ich mag auch die Verwendung eines OP, da es fast "Süßes oder Saures" liest :)
quelle
2>nul
.Whitespace / Starry, 135 Bytes
Auf einen klaren Nachthimmel an Halloween!
Beachten Sie, dass Leerzeichen in leeren Zeilen möglicherweise nicht beibehalten werden, wenn Sie aus dem obigen Code kopieren
Whitespace gibt "TRICK" aus. Probieren Sie es online!
Sternausgänge "BEHANDLUNG". Probieren Sie es online!
Erläuterung
Sternenhimmel
Starry ignoriert alle Tabulatoren und neuen Zeilen, so dass der gelesene Code der folgende ist
Außerdem ist das Verschieben von Werten im Vergleich zu Stapel- und Rechenoperationen in Starry sehr teuer. Der Code beginnt mit dem Drücken und Duplizieren von 4 und führt eine Reihe von Operationen darauf aus. Wenn 2 und 1 später gedrückt werden, werden alle erforderlichen ASCII-Werte erzeugt.
Kommentierter Code
Leerzeichen
Wie der Name vermuten lässt, werden bei Whitespace nur die drei Whitespace-Zeichen analysiert: Leerzeichen, Tabulator und Zeilenvorschub. Im Gegensatz zu den Sternen drückt die Leer einfach die ASCII - Werte von
T
,R
,I
,C
, undK
und den Druck sie.Kommentierter Code
Die Verflechtung von Pushs und Prints wurde ausschließlich aus ästhetischen Gründen gewählt, da sie die Byteanzahl nicht beeinflusst.
quelle
Linux ELF x86 / DOS .COM-Datei, 73 Byte
NASM-Quelle:
Dies beruht auf der Tatsache, dass der ELF-Header mit 7F 45 beginnt, was, als x86-Code interpretiert, ein Sprung ist.
Die relevanten Teile für die DOS .COM:
quelle
Übel / ZOMBIE , 109 Bytes
Noch eine gruselige Antwort!
Der
ZOMBIE
Code definiert einenvampire
Namen,xf
dessen einzige Taskf
zur Zeit aktiviert ist undtrick
einmal ausgegeben wird, bevor er von deaktiviert wirdstumble
. Der anderesay
Anruf ist tot Code (wie angemessen!)ZOMBIE
, Enthält aber den größten Teil desevil
Codes.Denn
evil
derxf
Name ist ein Aufruf, zum nächsten zu springenj
, der demzuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeaw
Zombie-Stöhnen vorausgeht, das fertigt und ausgibttreat
. Der folgende Code wird entweder ausgeführt (Kleinbuchstaben) oder ignoriert, aber da es keine gibt, solltew
keine Ausgabe erzeugt werden.quelle
Python / Perl, 28 Bytes
Erläuterung
Da
[]
es sich in Perl um ein ArrayRef handelt, ist es wahr, in Python ist es jedoch ein leeres Array, daher falsch.quelle
print({}and"trick"or"treat")
in Python / Lua.{}
es sich um ein HashRef handelt!print ([]and"trick"or"treat")
print({}and"trick"or"treat")
!PHP / JavaScript,
32-30BytesAnzeige
trick
in PHP undtreat
in JS.Die unbekannte
NaN
Konstante wird von PHP implizit in einen String konvertiert, wodurch sie wahr ist. Es ist falsch in JS.Alternative Methode, 38 Bytes
Der ternäre Operator ist in JS rechtsassoziativ:
Und linksassoziativ in PHP:
quelle
HTML / HTML + JavaScript, 53 Byte
treat
ist der Textinhalt des Dokuments in HTML.Wenn JS aktiviert ist, wird der HTML-Inhalt durch ersetzt
trick
.quelle
document.write()
stattdessen verwenden. -8 Bytesdocument.write
würde die HTML-Ausgabe nicht ersetzen, sondern an sie anhängen.C / Java 7,
165155128123122120103 Bytes// \ macht die nächste Zeile auch zu einem Kommentar in C, ist aber in Java ein regulärer einzeiliger Kommentar, sodass Sie C dazu bringen können, für Java bestimmten Code zu ignorieren, und indem Sie in der zweiten Zeile / * hinzufügen, können Sie einen Kommentar für Java machen von C. als Code geparst
Bearbeiten: Ich habe es ein wenig verbessert, indem ich die Zeilen und Kommentare neu organisiert habe.
Edit2: Ich habe noch einiges reorganisiert und es noch mehr verkürzt.
Edit3: Ich habe Korrekturen hinzugefügt, die von BrainStone vorgeschlagen wurden, um 5 Bytes zu entfernen, danke :)
Edit4: Eine neue Zeile hat sich als unnötig herausgestellt und ich habe sie entfernt.
Edit5: Ich habe printf in puts geändert.
Edit6: Ich habe eine Korrektur hinzugefügt, die von Ray Hamel vorgeschlagen wurde.
quelle
#include<stdio.h>
mit#include<cstdio>
. Nicht viel außer einem Byte ist ein Byte. Und zusätzlich werden durch das Entfernen vonint
infront ofmain
will 4 Bytes gespart .int
wird durch C und C ++ impliziertString[]s
.Jolf + Chaîne, 12 Bytes
Da Chaîne keine Datei zum Hochladen mit einer Kodierung akzeptieren kann, gehe ich von UTF-8 aus. (Wenn ich von ISO-8859-7 ausgehen könnte, wären das 11 Byte, aber das wäre unfair.)
In Chaîne
«
beginnt ein Kommentar, und der Rest wird wörtlich gedruckt. In Jolf«
beginnt eine Zeichenfolge. Zum Glück isttrick
nichts (im10; range(input, parseInt(input))
Grunde) schädlich undtreat
wird gedruckt.Probieren Sie Jolf hier aus!
Probieren Sie Chaîne hier!
Beide funktionieren mit meinem Browser (Firefox, neueste Version), aber das Gleiche gilt nicht für andere Browser.
quelle
tr
.tr
dies in jedem Golfspiel wiederverwendet werden kann - es handelt sich um eine kleine Information, für deren Codierung mindestens ein Bediener in Golfsprachen und dann eine sprachspezifische Bedingung erforderlich ist. Es würde wahrscheinlich entweder gleich lang oder länger sein. Das ist jedoch nur meine Vermutung;)#hell / Agony , 43 Bytes
So viel
><>
überall, was ist das für eine Aprilscherz-Herausforderung? Hier ist eine Antwort mit angemessenen Themensprachen.#hell
ist eine Untermenge, vonLUA
der glücklicherweiseio.write
Ausgabeaufrufe angenommen werden. Wir verwendenLUA
die--
Kommentare von, damit nur dieses Fragment ausgeführt wird.Agony
ist eineBrainfuck
Ableitung, die die Besonderheit hat, dass sich Code und Arbeitsspeicher auf demselben Band befinden. Die erste Zeile gibt nur 5 Zeichen (10 Zellen) ab dem Ende des Codesegments aus, in dem ichtreat
alsAgony
Befehle codiert habe .LUA
Durch das Öffnen--
des Kommentars wird der Wert einer Zelle geändert, die nicht verwendet wird.quelle
Cubix / Hexagony , 31 Byte
Probieren Sie es aus! Gönnen Sie es online!
Halloween unter dem Motto ? Beachten Sie die schrecklichen Fakten über diese Sprachen und den Code:
=v=
Lächeln bei Ihnen, das bei No-Ops im Code handeltLassen Sie uns in das Geheimnis des 31-Byte-Kommunikationsprotokolls von Dimensionen und Terror eintauchen ...
Trick
Wenn der Code sich selbst faltet oder entfaltet
cubified
, sieht das Layout folgendermaßen aus:Und der Hauptteil ist dieser Teil in der Mitte:
Es schiebt sich
k,c,i,r,t
auf den Stapel undo
gibt aus und;
knallt innerhalb einer von Reflektoren begrenzten Schleife,?
die Sie abhängig vom Wert auf der Oberseite des Stapels führt ...behandeln
Plötzlich verwandelt sich der Code von einem Würfel in ein Hexagon. (Stell dir das vor)
Und der Hauptteil ist dieser Teil:
Es läuft
t;
, drucktt
und trifft auf den Spiegel und dreht seine Richtung von der SE-Ecke nach NW und trifft auf einen anderen Spiegel. Dies läuftr;
und wickelt aufe;_a
und]
bringt es auf die Instruction Pointer 1 , die an der Ecke NE beginnt SE und Hits zeigen ,/
die horizontal zu reflektieren;
dannt
.Dann wickelt es auf
=
,;
und@
beendet das Chaos.Also ... Was
_
macht man dort?Warum steht es innerhalb der
t
e
a
(die ersten 3 Buchstaben im Code)?Hier kommt das Ende der Geschichte -
es macht nichts .
Klingt es nach dem Ende einer Horrorgeschichte?quelle
SQL / Javascript, 54 Bytes
Gleicher Ansatz wie bei meiner QB / JS-Antwort : In der ersten Zeile steht die SQL-Anweisung, in der zweiten Zeile steht ein Kommentar für SQL und eine NOP für JS. Dann definieren wir die SQL-
select
Anweisung als eine gültige JS-Funktion.quelle
/Brainf..k/, 143 + 3 = 146 Bytes
Für diese Antwort muss das
-A
Flag in ASCII für Brain-Flak ausgegeben werden, und glücklicherweise kümmert sich Brainfuck nicht um dieses Flag, sodass es die Ausgabe in Brainfuck nicht beeinflusst.Probieren Sie es online!
Probieren Sie es online!
Wie das geht
Die einzige Überschneidung zwischen der Syntax von Brain-Flak und Brainfuck sind die Zeichen
<>[]
. Für Brain-Flak bedeutet dies meist, dass das Programm eine gerade Anzahl von Stack-Switches sicherstellen muss<>
. Und für Brainfuck bedeutet dies, dass wir Endlosschleifen vermeiden müssen, die durch die Verwendung der[]
Monade verursacht werden.Der Brain-Flak-Code lautet wie folgt:
Abgesehen vom
[<<...>>]
Bit in der Mitte und<[<>]<>[<>]<>>
am Ende ist dieser Code für Brain-Flak-Programme ziemlich normal. Das Negativ um die Null ([<...>]
) dient dazu, eine Schleife für Brainfuck zu erstellen. Das Innere<...>
wird verwendet, um den Brainfuck in eine leere Zelle zu bewegen, bevor er auf die trifft,[][][][]
die sich andernfalls in einer Endlosschleife befinden würden.Der Brainfuck-Code lautet wie folgt:
Abgesehen von den oben genannten Punkten ist dies auch ein ziemlich normales Programm, so dass ich Ihnen die Details ersparen werde.
quelle
/brainf..k/
, daher sollten Sie dasselbe Kopfzeilenformat wie alle anderen verwenden.For brain-flak this mostly means the program has to ensure an even number of stack switches
Bist du dir da sicher? Es sollte keine Rolle spielen, da<>
es ein NOP in Brainfuck ist> <> / Angeln , 38 Bytes
Um ein
><>
/Fishing
polyglot zu machen.Es ist mein erster
Fishing
Code, nachdem ich lange mit ihm gespielt habe><>
.Mein erster Eindruck: Wie in der Natur hat der Fischer weniger körperliche Fähigkeiten als sein Gebet, macht dies aber mit seinem Werkzeug wieder wett!
Hier ist der Code extrem einfach:
><>
Führt nur die erste Zeile aus, in der_
sich ein vertikaler Spiegel befindet, und hat keine Auswirkung, da der Fisch beginnt, horizontal zu schwimmen. Es drückt nurtrick
auf den Stapel und druckt ihn dann aus, bevor es anhält.Denn
Fishing
der_
befiehlt runter zu gehen. Der Fischer folgt dem Deck, das die zweite Zeile ist, und fängt die Zeichen der dritten Zeile. Diese drückentreat
auf das Band und drucken es dann aus, bis es das Ende des Decks erreicht.Wenn erroring out erlaubt ist, können Sie mit dem folgenden Code zu 35 Bytes nach unten gehen , die einen Fehler auslösen , wenn ausgeführt , wie
><>
einmal dertrick
den Stapel ausgedruckt wird:Sie sollten auch meine themenbezogenen Sprachantworten überprüfen, #hell / Agony und evil / ZOMBIE !
quelle
05AB1E / Eigentlich 10 Bytes
Erläuterung
05AB1E
Probieren Sie es online aus
Tatsächlich
Probieren Sie es online aus
quelle
trick
, aber wie ist’®Â
das?Haskell / Standard ML , 56 Bytes
Haskell-Ansicht
Die Semikolons erlauben mehrere Deklarationen in einer Zeile und verhalten sich wie Zeilenumbrüche
Ein Haskell-Programm wird durch Aufrufen der
main
Funktion ausgeführt, so dass in der letzten ZeileputStr"trick"
das gerade ausgegebene Programm ausgeführt wirdtrick
.Die ersten beiden Zeilen werden als Funktionsdeklarationen interpretiert, die dem Muster folgen
<functionName> <argumentName1> ... <argumentNameN> = <functionBody>
. In der ersten Zeile wird eine Funktion namensfun
deklariert, die zwei Argumente namensputStr
undx
und den Funktionsrumpf enthältprint"treat"
. Dies ist eine gültige Haskell-Funktion mit Typfun :: t -> t1 -> IO ()
, dh es wird ein Argument eines beliebigen Typst
und ein zweites Argument eines bestimmten Typs verwendet undt1
anschließend eine E / A-Aktion zurückgegeben. Die Typent
undt1
keine Rolle, da die Argumente im Funktionskörper nicht verwendet werden. Der IO-Aktionstyp ergibt sich ausprint"treat"
, der"treat"
auf StdOut gedruckt wird (beachten Sie"
, das ist der Grund)putStr
stattprint
wird verwendet inmain
). Da es sich jedoch nur um eine Funktionsdeklaration handelt, wird tatsächlich nichts gedruckt, wasfun
nicht aufgerufen wirdmain
.Das gleiche passiert in der zweiten Zeile
val main=();
, eine Funktionval
wird deklariert, die ein beliebiges Argument namens annimmtmain
und die Einheit , das leere Tupel, zurückgibt()
. Der Typ istval :: t -> ()
(sowohl der Wert als auch der Einheitentyp sind mit gekennzeichnet()
).Probieren Sie es auf Ideone.
Standard-ML-Ansicht
Standard ML ist eine hauptsächlich funktionale Sprache mit einer Syntax, die mit Haskell verwandt ist, aber nicht mit dieser identisch ist. Insbesondere wird Funktionsdeklarationen das Schlüsselwort vorangestellt,
fun
wenn sie Argumente annehmen, und das Schlüsselwort,val
wenn sie dies nicht tun. Es ist auch möglich, einen Ausdruck auf oberster Ebene (dh nicht in einer Deklaration) zu haben, der ausgeführt wird, wenn das Programm ausgeführt wird. (In Haskell1+2
wirft das Schreiben außerhalb einer Deklaration einennaked expression at top level
-Fehler). Schließlich wird das Symbol für die Prüfung Gleichheit=
statt==
in Haskell. (Es gibt viel mehr Unterschiede, aber dies sind die einzigen, die für dieses Programm von Bedeutung sind.)Daher sieht SML zwei Deklarationen
gefolgt von einem Ausdruck
welches dann ausgewertet wird. Um zu bestimmen, ob
main
Gleichheit vorliegtputStr"trick"
, müssen beide Seiten ausgewertet werden und beide müssen denselben Typ haben, da SML (wie auch Haskell) statisch typisiert ist. Schauen wir uns zunächst die rechte Seite an:putStr
ist keine Bibliotheksfunktion in SML, aber wir haben eineputStr
in der Zeile genannte Funktion deklariertfun putStr x=print"treat";
- es wird ein Argumentx
("trick"
in unserem Fall der String ) verwendet und sofort wieder vergessen, wie es ist kommt im Funktionskörper nicht vor. Dann wird der Körperprint"treat"
ausgeführt, der druckttreat
(ohne ihn einzuschließen"
, unterscheiden sich SMLsprint
von Haskellsprint
).print
hat den Typstring -> unit
,putStr
hat also den Typa -> unit
und hat daherputStr"trick"
nur Typunit
. Um gut getippt zu sein,main
muss auch Typ vorhandenunit
sein. Der Wert für unit ist in SML der gleiche wie in Haskell()
, daher deklarieren wirval main=();
und alles ist gut typisiert.Probieren Sie es auf Codingground.
Hinweis: Die Ausgabe in der Konsole lautet
weil in SML \ NJ der Wert und Typ jeder Anweisung nach jeder Deklaration angezeigt wird. So wird zuerst die Art der
putStr
undmain
gezeigt ist, dann bekommt die Ausdrücke ausgewertet verursachttreat
gedruckt wird, dann wird der Wert des Ausdrucks (true
wie beide Seiten=
sind()
) mit dem impliziten Ergebnisvariable gebunden ,it
die ebenfalls angezeigt wird , dann.quelle
fun ... ... =
sei syntaktischer Zucker fürval rec ... = fn ... =>
. Andererseits ist es Jahrzehnte her, dass ich ML verwendet habe.fun
ist syntaktischer Zucker für anonyme Funktionen gebundenval
(rec
wird nur benötigt, wenn die Funktion rekursiv ist) und daher ist die Formulierung "muss vorangestellt werden" schlecht gewählt, ich bearbeite die Antwort. Im Allgemeinen ist die Verwendung vonfun
empfohlen, insbesondere im Codegolf, da sie viel kürzer ist.Ruby / C,
64625148 BytesWas Ruby sieht:
Die
tap
Methode nimmt einen Block und führt ihn einmal aus. Es ist ein kurzer Bezeichner, für den wir#define
in C ein Makro erstellen können . Es ermöglicht uns auch, einen in geschweiften Klammern eingeschlossenen Block in den gemeinsam genutzten Code einzufügen, obwohl Ruby{}
in den meisten Kontexten s nicht zulässt .Die einzigen falschen Werte in Ruby sind
false
undnil
. Insbesondere ist 0 wahr. So wird Ruby "Trick" drucken.Was C sieht (nach dem Pre-Prozessor):
0 ist in C falsch, daher gibt C "treat" aus.
2 Bytes gespart dank daniero.
quelle
puts
anstelle vonprintf
zwei Bytes speichernprintf
in C zu verwenden, ich habe vergessen, dass es auch eineputs
Funktion hat.tap
? Und warum bist du die Räume nicht losgeworden?p ? "trick":"treat"
=>p?"trick":"treat"
tap
dient eigentlich zwei Zwecken. Es ist eine Kurzbezeichnung für#define
das Einrasten, aber ich kann die geschweiften Klammern auch direkt in den Ruby-Code einfügen.{}
Blöcke in Ruby nicht funktionieren wie sie in C und ähnlichen Sprachen, abertap
tun einen Block zu nehmen, und führt sie einmal.p
.?<character>
ist ein Zeichenliteral, daher wird nach dem ein Leerzeichen benötigt?
.QBasic / JavaScript,
5144 BytesIn QBasic wird die zweite Zeile gedruckt und die erste Zeile nicht ausgeführt, da angenommen wird, dass es sich um einen Kommentar handelt (danke). In JS ruft es die Funktion PRINT auf, die in der ersten Zeile direkt nach der JS-NOP definiert ist
'';
.quelle
ShapeScript / Foo , 13 Byte
Probieren Sie es online! Trick | behandeln
Wie es funktioniert
ShapeScript wird zeichenweise analysiert. Wenn EOF getroffen wird, ohne ein abschließendes Zitat zu finden, wird nie etwas auf den Stapel geschoben.
'trick'
Verschiebt die Zeichenfolge in die Anführungszeichen, die implizit an STDOUT ausgegeben werden.Foo hat keine Befehle, die den Charakteren zugeordnet sind
'trick'
, so dass dieser Teil stillschweigend ignoriert wird. Es wird jedoch alles zwischen doppelten Anführungszeichen sofort an STDOUT ausgegeben, auch wenn das schließende Anführungszeichen fehlt.quelle
Ruby / Perl, 21 Bytes
Perl
Errechnet
"trick" % 1
das ist0 % 1
so die||
sendettreat
anprint
statt, da Perl Barewords akzeptiert.Rubin
Formatiert die Zeichenfolge
"trick"
mit dem Argument1
, was dazu führt"trick"
, dass die Zeichenfolge wahr ist, sodass die Zeichenfolge||
nicht verarbeitet wird.quelle
MATL / CJam , 17 Bytes
In MATL diese ausgibt
TRICK
. In CJam es gibtTREAT
.Erläuterung
MATL
CJam
quelle
Gelee / pl , 12 Bytes
Dies ist das Programm, das mit Jellys Codepage angezeigt wird .
Probieren Sie es online!
Dies ist das Programm, das mit der Codepage 437 angezeigt wird .
Probieren Sie es online!
Beide Programme wurden lokal mit derselben 12-Byte-Datei getestet.
Wie es funktioniert
In Jelly definiert jede Zeile eine Verknüpfung (Funktion); Die letzte Zeile definiert den Hauptlink , der beim Ausführen des Programms automatisch ausgeführt wird. Sofern der Code vor dem letzten
7f
Byte (der Zeilenvorschub in Jellys Codepage) keinen Parserfehler enthält (der die Ausführung sofort abbrechen würde), werden sie einfach ignoriert. Die letzte Zeile“¡ṾI»
indiziert einfach in Jellys Wörterbuch, um den Worttrick abzurufen , der implizit am Ende des Programms gedruckt wird.Ich weiß nicht viel über pl, aber es scheint, dass der Interpreter nur eine Codezeile abruft und alles ignoriert, was danach kommt. Barewords werden wie in Perl als Zeichenfolgen behandelt, also wird
treat
genau das gedruckt.quelle
Objective-C / C, 50 Bytes
Objective-C hat Bonbons und Drucke bekommen , C aber nicht und druckt Trick .
Wie es funktioniert
Ich weiß nicht viel über Objective-C , aber es macht das, was wir in dieser Situation vernünftigerweise erwarten würden. Die Neudefinition
puts
nicht den Ausgang beeinflussen , da wir nie die Funktion aufrufen, undmain
druckt behandeln und ein Zeilenvorschub zu STDOUT.Sie können erwarten, dass C dasselbe tut, aber mindestens gcc 4.8, gcc 5.3 und clang 3.7 tun es nicht.
Da wir das echte printf (das eine Formatzeichenfolge und zusätzliche Argumente benötigt) nicht benötigen und die zu druckende Zeichenfolge mit einem Zeilenvorschub endet, können wir stattdessen Puts verwenden. Puts ist etwas schneller als printf (das seine Argumente vor dem Drucken analysieren muss). Wenn wir also die Funktion printf nicht ebenfalls neu definieren , optimiert der Compiler den Aufruf von printf und ersetzt ihn durch einen Aufruf von Puts . Wenig tut der Compiler weiß , dass Aufruf
puts
mit Argument"treat"
druckt Trick statt!Das Nichteinbeziehen von stdio.h ist hier von entscheidender Bedeutung, da für die Definition von Puts derselbe Typ verwendet werden müsste, der in der Header-Datei (
puts(const char*)
) enthalten ist.Schließlich ist es bemerkenswert, dass der Aufruf von printf in puts eine Zeichenfolge ohne nachfolgenden Zeilenvorschub übergibt . Andernfalls würde der Compiler auch diesen Aufruf "optimieren", was zu einem Segmentierungsfehler führen würde.
quelle
Batch / sh, 30 Bytes
Erläuterung. Batch sieht die erste Zeile als Etikett, das ignoriert wird, und führt die zweite Zeile aus, in der Trick gedruckt wird. Das @ unterdrückt Batch's Standard-Echo des Befehls auf stdout. (Beschriftungen werden nie wiedergegeben.) In der Zwischenzeit sieht sie Folgendes:
Die erste Zeile macht nichts (es ist ein Alias von
true
), die zweite Zeile gibt Treat aus und die dritte Zeile verlässt das Skript, sodass der @echo-Trick nie erreicht wird.quelle
sed / Hexagony 32 Bytes
sed
Probieren Sie es online!
Die erste Zeile wird gedruckt,
trick
wenn sich am Ende der Eingabe eine leere Zeichenfolge befindet. (sed macht nichts, wenn es keine Eingabe gibt, aber in diesem Fall ist eine Leerzeile auf stdin erlaubt)Beispiellauf:
Hexagonie
Probieren Sie es online!
Beim ersten
/
Befehl wird der Anweisungszeiger nach oben und beim linken nach links umgeleitet, sodass der Text für sed übersprungen wird. Das r aus dem sed-Code wird wiederverwendet und einige andere werden ohne Wirkung ausgeführt. Das erweiterte Hex sieht folgendermaßen aus:Ausgabe:
quelle
A
, obwohl Sie das weniger hässlich machen könnten, indem Sie alle Buchstaben in Großbuchstaben ändern): hexagony.tryitonline.net/…C # / Java
Dies ist wahrscheinlich nicht qualifiziert, da es nicht von alleine ausgeführt wird, aber die Herausforderung hat mich an eine Eigenart erinnert, wie unterschiedlich C # und Java mit dem Zeichenfolgenvergleich umgehen, mit dem Sie Spaß haben können, wenn Sie Code verschleiern.
Die folgende Funktion ist in C # und Java gültig, gibt jedoch einen anderen Wert zurück ...
quelle
Brain-Flak / Brain-Flueue,
265 253 219 165 139 115 113101 BytesBeinhaltet +1 für
-A
Vielen Dank an Wheat Wizard für das Hin- und Hergehen und das Spielen mit ein paar Bytes weniger Code.
Brain-Flak: Probieren Sie es online!
Brain-Flueue: Probieren Sie es online!
Erläuterung:
Der erste Abschnitt listet die Werte auf, die Brain-Flak sieht.
Wenn es auf Brain-Flueue umschaltet, fange ich an, die Werte so aufzulisten, wie Brain-Flueue sie sieht.
quelle
PowerShell / Foo, 14 Byte
In
'trick'
PowerShell wird eine Zeichenfolge erstellt und in der Pipeline belassen. Das#
beginnt einen Kommentar, so dass das Programm beendet und die implizitenWrite-Output
druckttrick
.In Foo, (Online ausprobieren!) , Die
'trick'
ignoriert wird, die#
das Programm Ursache für den Schlaf0
Sekunden (da gibt es nichts an dem Zeiger Array), dann"treat
beginnt eine Zeichenfolge. Da EOF erreicht ist, muss"
die Zeichenfolge implizit geschlossen und auf stdout gedruckt werden.quelle
#
ist die Kopierfunktion, und es werden nur nicht negative komplexe linke Argumente verwendet, keine Zeichenfolgen. Das Kommentarsymbol istNB.
#
PHP / Perl, 28 Bytes
defined&x
Gibt etwas Wahres in PHP (keine Ahnung warum, aber es tut).
In Perl wird geprüft, ob eine Funktion
x
definiert ist - was nicht der Fall ist.->
trick
in PHP,treat
in Perl.quelle
CLS
?`
ist der wahrheitswert von definiert & x oder d & x frag mich nicht welches d du bekommst