Süßes oder Saures Polyglot


160

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 trickoder 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 trickund die andere sollte ausgegeben werden treat. Der Fall ist irrelevant und das Auffüllen der Zeichenkette mit Leerzeichen ist erlaubt (siehe Beispiele).
  • Das ist , 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 Nist 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


21
Diese Meta-Antwort besagt, dass nahezu doppelte Einträge toleriert werden können, wenn es einen guten Grund gibt. Ich glaube, dass die Popularität, die diese Frage durch die Nähe zu Halloween erfährt, ein guter Grund für sich ist, also werde ich für eine Wiedereröffnung stimmen. Es würde mir nichts ausmachen, es nach Halloween zu schließen (aber ich weiß auch nicht, ob dies eine gute Sache wäre).
Aaron

2
@ mbomb007. Dies ist ein Duplikat von was ?
TRiG

3
definitiv kein Duplikat. Das einzige, was das gleiche an dem anderen ist, ist, dass es auch eine vielsprachige Herausforderung mit spezifizierter Ausgabe ist.
Brian Minton

3
... 3 Seiten ... Ich denke wirklich , dass dies eine Menge Aktivität bekommt, basierend auf dem aktuellen Wert der saisonalen Variante.
wizzwizz4

2
Was für eine tolle Frage! Ich mag es, wie einige der Antworten beleuchten und ausnutzen, wie einfache Codefragmente verschiedene Dinge in verschiedenen Sprachen bedeuten - z. B. Wahrhaftigkeit / Falschheit und Assoziativität des ternären Operators.
Don Hatch

Antworten:


146

2sable / pl , 8 Bytes

0000000: 74 72 65 61 74 93 d0 cb                          treat...

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 .

treat“ÐË

Probieren Sie es online!

pl: behandeln

Dies ist das Programm auf Codepage 437 .

treatô╨╦

Probieren Sie es online!

Wie es funktioniert

2sable: trick

t         Square root. Errors since there is no input. The exception is caught, the
          stack left unaltered, and the interpreter pretends nothing happened.
 r        Reverse stack.
          Reversed empty stack is still empty stack. ;(
  e       Compute nCr. Errors since there is no input.
   a      Alphanumeric test. Errors since there is no input.
    t     Square root. Errors since there is no input.
     “    Begin a lowercase string literal.
      Ð     Excluding ‘, ’, “, and ”, Ð is the 71st non-ASCII character in CP1252.
       Ë    Excluding ‘, ’, “, and ”, Ë is the 66th non-ASCII character in CP1252.
          (implicit) End string literal.
          Both characters together fetch the dictionary word at index
          71 * 100 + 66 = 7166, which is 'trick'.

pl: behandeln

treat     Bareword; push the string "treat" on the stack.
     ô    Unimplemented. Does nothing.
      ╨   Flatten the stack. This doesn't affect the output.
       ╦  Unimplemented. Does nothing.

15
Aber ich muss zugeben, dass diese Antwort einfach lächerlich ist! Was kommt als nächstes? Eine Antwort, die kürzer ist als die Worte selbst?
BrainStone

45
Diese Antwort ist sehr beeindruckend. Es ist erstaunlich, dass Sie es geschafft haben, ein Programm zu schreiben, das kürzer ist als die Länge der beiden Wörter.
DJMcMayhem

1
Huh? Das sind 2 Programme
FireCubez

1
@FireCubez Es ist derselbe Code, Byte für Byte. Die visuelle Darstellung variiert jedoch mit der Codepage.
Dennis

201

Python / Windows Batch, 25 Bytes

print"trick"#||echo.treat

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 :)


33
TBH Ich habe dies nur für den Kommentar zum OP hochgestimmt.
Jmons

7
TBH Ich hätte nie gedacht, dass mein erster Post hier 65 positive
Stimmen

11
TBH lässt nicht nur über Upvotes reden. Es ist nicht Quora
S Andrew

3
@SAndrew als brandneues Mitglied dieser Community hatte ich nicht damit gerechnet, einen Post zu schreiben, der so schnell so gut ankommt, und ich bin froh, dass ich dazu beitragen konnte. Ich versuche nicht zu prahlen, bitte nicht falsch verstehen. Ich bin einfach sehr glücklich, so gut aufgenommen zu werden, wie ich neu bin. danke für
deinen

2
Der @ YotamSalmon-Community-Konsens besagt, dass STDERR standardmäßig ignoriert wird. nur STDOUT wird berücksichtigt. Versuchen Sie den Befehl erneut mit 2>nul.
Conor O'Brien

154

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

Stack (after op)    Code        Operation
4                            +  Push 4
4 4 4 4 4 4          + + + + +  Duplicate top of stack 5 times
4 4 4 4 16            *         Multiply top two items
4 4 4 4 16 16        +          Duplicate top of stack
4 4 4 16 4 16          +        Rotate top three items on stack right
4 4 4 16 20         *           Add top two items
4 4 20 4 16            +        Rotate...
4 4 20 64             *         Multiply...
4 64 4 20              +        Rotate...
4 64 80               *         Multiply...
4 64 80 2                  +    Push 2
4 64 80 2 2          +          Duplicate...
4 64 2 80 2            +        Rotate...
4 64 2 82           *           Add...
4 64 2 82 82         +          Duplicate...
4 64 82 2 82           +        Rotate...
4 64 82 84          *           Add...
4 64 82 84 84          +        Rotate...
4 64 82 84           .          Pop and print as character (T)
4 64 84 82            +         Swap top two items on stack
4 64 84              .          Pop and print... (R)
84 4 64                +        Rotate...
84 4 64 1                 +     Push 1
84 4 65             *           Add...
84 4 65 65           +          Duplicate...
84 65 4 65             +        Rotate...
84 65 69            *           Add...
84 65                .          Pop and print... (E)
84                   .          Pop and print... (A)
                     .          Pop and print... (T)

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, und Kund den Druck sie.

Kommentierter Code

<Space><Space><Space><Tab><Space><Tab><Space><Space><Tab><Space><LF> Push the ASCII value of R
<Space><Space><Space><Tab><Space><Tab><Space><Tab><Space><Space><LF> Push the ASCII value of T
<Tab><LF><Space><Space> Pop and print the T
<Tab><LF><Space><Space> Pop and print the R
<Space><Space><Space><Tab><Space><Space><Tab><Space><Space><Tab><LF> Push the ASCII value of I
<Tab><LF><Space><Space> Pop and print the I
<Space><Space><Space><Tab><Space><Space><Tab><Space><Tab><Tab><LF>   Push the ASCII value of K
<Space><Space><Space><Tab><Space><Space><Space><Space><Tab><Tab><LF> Push the ASCII value of C
<Tab><LF><Space><Space> Pop and print the C
<Tab><LF><Space><Space> Pop and print the K
<LF><LF><LF>            Terminate the program. The following line is not run.
<Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><LF>

Die Verflechtung von Pushs und Prints wurde ausschließlich aus ästhetischen Gründen gewählt, da sie die Byteanzahl nicht beeinflusst.


12
so schöner Himmel
lois6b

9
Dies ist bei weitem die beste Antwort, so kreativ. Ich bin schockiert von dem Einfallsreichtum. und die Fähigkeit. Bravo!
Nephi12

137

Linux ELF x86 / DOS .COM-Datei, 73 Byte

00000000  7f 45 4c 46 01 00 00 00  1a 00 00 00 1a 00 43 05  |.ELF..........C.|
00000010  02 00 03 00 1a 00 43 05  1a 00 43 05 04 00 00 00  |......C...C.....|
00000020  eb 0c b4 09 ba 41 01 cd  21 c3 20 00 01 00 b2 05  |.....A..!. .....|
00000030  b9 3b 00 43 05 cd 80 2c  04 cd 80 74 72 69 63 6b  |.;.C...,...trick|
00000040  00 74 72 65 61 74 24 eb  d9                       |.treat$..|
00000049

NASM-Quelle:

ORG 0x05430000

BITS 32                                         ;
                                                ;   ELF HEADER    --   PROGRAM HEADER
; ELF HEADER                                    ; +-------------+
DB 0x7f,'E','L','F'                             ; | magic       |    +--------------------+
                                                ; |             |    |                    |
; PROGRAM HEADERS                               ; |             |    |                    |
DD 1                                            ; |*class 32b   | -- | type: PT_LOAD      |
                                                ; |*data none   |    |                    |
                                                ; |*version 0   |    |                    |
                                                ; |*ABI SysV    |    |                    |
DD 0x01a        ; offset = vaddr & (PAGE_SIZE-1); |*ABI vers    | -- | offset             |
                                                ; |             |    |                    |
entry:  DD 0x0543001a                           ; |*PADx7       | -- | vaddr = 0x0543001a |
DW 2                                            ; | ET_EXEC     | -- |*paddr LO           |
DW 3                                            ; | EM_386      | -- |*paddr HI           |
DD 0x0543001a                                   ; |*version     | -- | filesz             |
;       inc     ebx     ; STDOUT_FILENO         ; |             |    |                    |
;       mov     eax, 4  ; SYS_WRITE             ; |             |    |                    |
DD 0x0543001a                                   ; | entry point | -- | memsz              |
DD 4                                            ; | ph offset   | -- | flags: RX          |
                                                ; |             |    |                    |
        jmp     short skip                      ; |*sh offset   | -- |*align              |
BITS 16                                         ; |             |    |                    |
treat:  mov     ah, 9                           ; |             | -- |                    |
        mov     dx, trick + 0x100 + 6           ; |*flags ______|    |                    |
        int     0x21                            ; |______/      |    +--------------------+
        ret                                     ; |*ehsize      |
BITS 32                                         ; |             |
DW 32                                           ; | phentsize   |
DW 1                                            ; | phnum       |
skip:                                           ; |             |
        mov     dl, 5   ; strlen("trick")       ; |*shentsize   |
        mov     ecx, trick                      ; |*shnum       |
                                                ; |*shstrndx    |
                                                ; +-------------+
        int     0x80
        sub     al, 4   ; SYS_EXIT
        int     0x80


trick:  DB      "trick/treat$"

BITS 16
        jmp     short treat

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:

-u100 l2
07D2:0100 7F45          JG      0147
-u147 l2
07D2:0147 EBD9          JMP     0122
-u122 l8
07D2:0122 B409          MOV     AH,09
07D2:0124 BA4101        MOV     DX,0141
07D2:0127 CD21          INT     21
07D2:0129 C3            RET
-d141 l6
07D2:0140     74 72 65 61 74 24   -                           treat$

4
Bravo, Sir. Bravo.
Draconis

9
Mein Herzschlag setzte für einen Moment aus.
John Keates

muppetlabs.com/~breadbox/software/tiny/teensy.html ist eine gute Lektüre für alle, die sich hier für den Trick der Header-Überlappung interessieren.
Sparr

4
Dies ist eine der besten Antworten, die ich je auf dieser Website gesehen habe. Ein bisschen zu oft verwandelt sich Codegolf in esoterische Sprachen, die speziell für das Golfen entwickelt wurden, und nicht in clevere Antworten. Das ist schön.
Knetic

Das ist großartiges Zeug.
Gooseman

104

Übel / ZOMBIE , 109 Bytes

Noch eine gruselige Antwort!

xf is a vampire summon task f say "trick" stumble say "jzuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeaw" animate bind

Der ZOMBIECode definiert einen vampireNamen, xfdessen einzige Task fzur Zeit aktiviert ist und trickeinmal ausgegeben wird, bevor er von deaktiviert wird stumble. Der andere sayAnruf ist tot Code (wie angemessen!) ZOMBIE, Enthält aber den größten Teil des evilCodes.

Denn evilder xfName ist ein Aufruf, zum nächsten zu springen j, der dem zuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeawZombie-Stöhnen vorausgeht, das fertigt und ausgibt treat. Der folgende Code wird entweder ausgeführt (Kleinbuchstaben) oder ignoriert, aber da es keine gibt, sollte wkeine Ausgabe erzeugt werden.


1
@ KevinCruijssen danke, ich habe diese Gelegenheit genossen, um in einige weniger bekannte esoterische Sprachen zu kommen :)
Aaron

Nun, von den vier, die du benutzt hast, habe ich ein paar Mal Agony gesehen, und ich erinnere mich vage daran, ZOMBIE einmal gesehen zu haben. Nie zuvor von HashHell oder dem Bösen gehört. :)
Kevin Cruijssen

Das Halloween-Thema ist beeindruckend! Ich hatte noch nie von diesen beiden Sprachen gehört
Ejfrancis

95

Python / Perl, 28 Bytes

print([]and"trick"or"treat")

Erläuterung

Da []es sich in Perl um ein ArrayRef handelt, ist es wahr, in Python ist es jedoch ein leeres Array, daher falsch.


7
Ebenso print({}and"trick"or"treat")in Python / Lua.
User200783

1
@ user200783 Das hätte auch in Perl den gleichen Effekt, da {}es sich um ein HashRef handelt!
Dom Hastings

2
Ist auch für Python / Ruby fast identisch, erfordert jedoch ein zusätzliches Leerzeichen:print ([]and"trick"or"treat")
Value Ink

2
Liebe es! Dies ist ein großartiger Kommentar dazu, was implizite Konvertierung in Bool für die Lesbarkeit bedeutet.
Don Hatch

Dies könnte ein Polyglott in Lua, Perl und Python sein, wenn es so wäre print({}and"trick"or"treat")!
ckjbgames

48

PHP / JavaScript, 32-30 Bytes

Anzeige trickin PHP und treatin JS.

NaN?die(trick):alert('treat');

Die unbekannte NaNKonstante wird von PHP implizit in einen String konvertiert, wodurch sie wahr ist. Es ist falsch in JS.

Alternative Methode, 38 Bytes

(1?0:1?0:1)?die(trick):alert('treat');

Der ternäre Operator ist in JS rechtsassoziativ:

                1 ? 0 : 1 ? 0 : 1
 is parsed as:  1 ? 0 : (1 ? 0 : 1)
 which equals:  0

Und linksassoziativ in PHP:

                1 ? 0 : 1 ? 0 : 1
 is parsed as:  (1 ? 0 : 1) ? 0 : 1
 which equals:  1

1
Du hast recht, mein Böser
Gareth Parker

alert () ist JavaScript in HTML, jedoch kein JavaScript in der Konsole.
Peter Ferrie

1
Alternative Methode: '\ 0' == "\ 0"? Die (trick): alert ('treat'); `.
Ismael Miguel

3
Das Debuggen verketteter ternärer Operatoren in PHP muss so viel Spaß machen.
Robert Fraser

3
@Robert Alles in PHP zu debuggen macht so viel Spaß.
sampathsris

39

HTML / HTML + JavaScript, 53 Byte

treat<script>document.body.innerHTML='trick'</script>

treatist der Textinhalt des Dokuments in HTML.
Wenn JS aktiviert ist, wird der HTML-Inhalt durch ersetzt trick.


3
Interessante Lösung. Ich mag es
BrainStone

1
Sie sollten document.write()stattdessen verwenden. -8 Bytes
Darrylyeo

@darrylyeo document.writewürde die HTML-Ausgabe nicht ersetzen, sondern an sie anhängen.
Titus

1
In Chrome getestet. Funktioniert voll. Durch Aktivieren und Deaktivieren von Javascript wird der Inhalt beim Aktualisieren geändert.
Tatarize

@Tatarize: Getestet in Firefox 49, Opera 41, Safari 5.0, Chrome 54, Edge 38 unter Windows, Firefox 5.3 und Safari 5.0 unter iOS, Firefox 49 und Dolphin 11.5 unter Android. Nur Firefox unter Windows ersetzt; alle anderen hängen an.
Titus

33

C / Java 7, 165 155 128 123 122 120 103 Bytes

//\
class a{public static void main(String[] s){System.out.print("treat"/*
main(){{puts("trick"/**/);}}

// \ 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.


1
Sie können sicher 1 Byte C zu C ++ zu ändern und Ersetzen #include<stdio.h>mit #include<cstdio>. Nicht viel außer einem Byte ist ein Byte. Und zusätzlich werden durch das Entfernen von int infront of mainwill 4 Bytes gespart . intwird durch C und C ++ impliziert
BrainStone

Danke, ich habe den Code gemäß deinen Vorschlägen geändert :)
I_LIKE_BREAD7

1
Nett! Es fiel mir schwer, etwas für Java zu finden, und am Ende hatte ich selbst Java 7 + Whitespace . Übrigens können Sie ein weiteres Byte Golf spielen, indem Sie den Raum an entfernen String[]s.
Kevin Cruijssen

29

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.)

trick«treat

In Chaîne «beginnt ein Kommentar, und der Rest wird wörtlich gedruckt. In Jolf «beginnt eine Zeichenfolge. Zum Glück ist tricknichts (im 10; range(input, parseInt(input))Grunde) schädlich und treatwird 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.


2
Ich nehme an, das Inventar vieler dunkler Sprachen hat seine Vorteile ...
Conor O'Brien

1
Es ist schön zu sehen, dass wir uns den Lösungen so gut wie nur aus den Worten selbst nähern. Ich frage mich, ob jemand das wiederverwenden kann tr.
BrainStone

1
@BrainStone Ich persönlich bezweifle, dass trdies 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;)
Conor O'Brien

Lass es uns herausfinden. Aber ich muss zustimmen. Eine Byteanzahl von 10 oder weniger wäre verrückt!
BrainStone


27

#hell / Agony , 43 Bytes

So viel ><>überall, was ist das für eine Aprilscherz-Herausforderung? Hier ist eine Antwort mit angemessenen Themensprachen.

--<.<.<.<.<.$
io.write("trick")--+<~}~@+{+<

#hellist eine Untermenge, von LUAder glücklicherweise io.writeAusgabeaufrufe angenommen werden. Wir verwenden LUAdie --Kommentare von, damit nur dieses Fragment ausgeführt wird.

Agonyist eine BrainfuckAbleitung, 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 ich treatals AgonyBefehle codiert habe . LUADurch das Öffnen --des Kommentars wird der Wert einer Zelle geändert, die nicht verwendet wird.


Ich muss sagen, Ihre Halloween-Themen sind die besten imho. Sehr kreativ!
BrainStone

@BrainStone Danke, es hat mir Spaß gemacht, sie zu machen!
Aaron

27

Cubix / Hexagony , 31 Byte

t;./e;_a]"kcirt">o?@;=v=./r;\;/

Probieren Sie es aus! Gönnen Sie es online!

Halloween unter dem Motto ? Beachten Sie die schrecklichen Fakten über diese Sprachen und den Code:

  1. Wenn und selbst wenn Sie nichts tun (nur No-Ops setzen), können Sie die Schleife, die für immer laufen soll, nie verlassen ...
  2. Und mitten in einer 3D- und einer 2D-Programmiersprache stecken bleiben (Oh Qual ...)
  3. Innerhalb der Dimensionen wirst du allmählich verlieren, wo du bist ... wo du warst ...
  4. Und es gibt ein =v=Lächeln bei Ihnen, das bei No-Ops im Code handelt

Lassen 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:

      t ; .
      / e ;
      _ a ]
" k c i r t " > o ? @ ;
= v = . / r ; \ ; / . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Und der Hauptteil ist dieser Teil in der Mitte:

" k c i r t " > o ? @ .
. . . . . . . \ ; / . .

Es schiebt sich k,c,i,r,tauf den Stapel und ogibt 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)

   t ; . /
  e ; _ a ] 
 " k c i r t 
" > o ? @ ; = 
 v = . / r ;
  \ ; / . .
   . . . .

Und der Hauptteil ist dieser Teil:

   t ; . /
  e ; _ a ] 
 . . . . . . 
. . . . @ ; = 
 . . . / r ;
  . . . . .
   . . . .

Es läuft t;, druckt tund trifft auf den Spiegel und dreht seine Richtung von der SE-Ecke nach NW und trifft auf einen anderen Spiegel. Dies läuft r;und wickelt auf e;_aund ]bringt es auf die Instruction Pointer 1 , die an der Ecke NE beginnt SE und Hits zeigen , /die horizontal zu reflektieren ;dann t.

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?


Schön sehr schön! Es ist schwierig, aus zwei 2D-Sprachen einen Polyglot zu erstellen. Ich mag die Horrorgeschichte, die dazu gehört;)
ETHproductions

Ich bin nicht sicher, ob diese oder die ELF / .COM-Antwort beeindruckender ist. Gut gemacht!
val

24

SQL / Javascript, 54 Bytes

select('trick')
--a;function select(){alert("treat")}

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- selectAnweisung als eine gültige JS-Funktion.


3
Das ist eine sehr clevere Art, diese beiden Sprachen zu kombinieren. Habe eine +1!
ETHproductions

22

/Brainf..k/, 143 + 3 = 146 Bytes

Für diese Antwort muss das -AFlag 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.


Ich mag dieses: D
Conor O'Brien

9
Es gibt VIELE mehr als zwei Sprachen, die dem regulären Ausdruck entsprechen /brainf..k/, daher sollten Sie dasselbe Kopfzeilenformat wie alle anderen verwenden.
mbomb007

13
@ mbomb007 Die einzige andere Sprache, die ich finden konnte und die zu dieser Regex passt, ist Brainfork . Praktischerweise wird "TRICK" in brainfork gedruckt, so dass ich die Regex für den Moment belasse.
Sriotchilism O'Zaic

For brain-flak this mostly means the program has to ensure an even number of stack switchesBist du dir da sicher? Es sollte keine Rolle spielen, da <>es ein NOP in Brainfuck ist
DJMcMayhem

@DJMcMayhem es muss auf dem gleichen Stapel enden, auf dem wir alles abgelegt haben, sonst wird nichts gedruckt.
Sriotchilism O'Zaic

21

> <> / Angeln , 38 Bytes

_"kcirt"ooooo;
[+vCCCCCCCC
   `treat`N

Um ein ><>/ Fishingpolyglot zu machen.

Es ist mein erster FishingCode, 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 nur trickauf den Stapel und druckt ihn dann aus, bevor es anhält.
Denn Fishingder _befiehlt runter zu gehen. Der Fischer folgt dem Deck, das die zweite Zeile ist, und fängt die Zeichen der dritten Zeile. Diese drücken treatauf 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 der trickden Stapel ausgedruckt wird:

_"kcirt">o<
[+vCCCCCCCC
   `treat`N

Sie sollten auch meine themenbezogenen Sprachantworten überprüfen, #hell / Agony und evil / ZOMBIE !


Oh, ich wollte einen Fisch / Angel-Polyglott machen :) Du hast mich geschlagen. Schön!
Emigna

+1 für " Wie in der Natur hat der Fischer weniger körperliche Fähigkeiten als sein Gebet, macht dies aber mit seinem Werkzeug wieder
wett

20

05AB1E / Eigentlich 10 Bytes

"trick"’®Â

Erläuterung

05AB1E

"trick"     # push the string "trick"
       ’®Â  # push the string "treat"
            # implicitly print top of stack (treat)

Probieren Sie es online aus

Tatsächlich

"trick"     # push the string "trick"
       ’®Â  # not recognized commands (ignored)
            # implicit print (trick)

Probieren Sie es online aus


Weißt du, ich kann das klar lesen trick, aber wie ist ’®Âdas?
Kevin Cruijssen

1
Jetzt kennen die Leute diese Funktion. Das nächste Mal werden wir Fragen wie " hQq3k oder bvM; p polyglot " bekommen ...
jimmy23013

3
@KevinCruijssen: '®' wird übersetzt als "nimm das Wort mit dem Index 3757 aus dem Wörterbuch", was "behandeln" ist.
Emigna

@Emigna Ok ... Also sind alle ~ 1.1M englischen Wörter in 05AB1E verfügbar?
Kevin Cruijssen

1
@ KevinCruijssen: Nein, es gibt insgesamt 10.000 Zeichen (jedes davon kann als 2 Zeichen dargestellt werden). Die gesamte Liste finden Sie hier .
Emigna

16

Haskell / Standard ML , 56 Bytes

fun putStr x=print"treat";val main=();main=putStr"trick"

Haskell-Ansicht

Die Semikolons erlauben mehrere Deklarationen in einer Zeile und verhalten sich wie Zeilenumbrüche

fun putStr x=print"treat"
val main=()
main=putStr"trick"

Ein Haskell-Programm wird durch Aufrufen der mainFunktion ausgeführt, so dass in der letzten Zeile putStr"trick"das gerade ausgegebene Programm ausgeführt wird trick.
Die ersten beiden Zeilen werden als Funktionsdeklarationen interpretiert, die dem Muster folgen <functionName> <argumentName1> ... <argumentNameN> = <functionBody>. In der ersten Zeile wird eine Funktion namens fundeklariert, die zwei Argumente namens putStrund xund den Funktionsrumpf enthält print"treat". Dies ist eine gültige Haskell-Funktion mit Typ fun :: t -> t1 -> IO (), dh es wird ein Argument eines beliebigen Typs tund ein zweites Argument eines bestimmten Typs verwendet und t1anschließend eine E / A-Aktion zurückgegeben. Die Typen tund t1keine Rolle, da die Argumente im Funktionskörper nicht verwendet werden. Der IO-Aktionstyp ergibt sich aus print"treat", der "treat"auf StdOut gedruckt wird (beachten Sie ", das ist der Grund)putStrstatt printwird verwendet in main). Da es sich jedoch nur um eine Funktionsdeklaration handelt, wird tatsächlich nichts gedruckt, was funnicht aufgerufen wird main.
Das gleiche passiert in der zweiten Zeile val main=();, eine Funktion valwird deklariert, die ein beliebiges Argument namens annimmt mainund die Einheit , das leere Tupel, zurückgibt (). Der Typ ist val :: 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, funwenn sie Argumente annehmen, und das Schlüsselwort, valwenn 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 Haskell 1+2wirft das Schreiben außerhalb einer Deklaration einen naked 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

fun putStr x=print"treat";
val main=();

gefolgt von einem Ausdruck

main=putStr"trick"

welches dann ausgewertet wird. Um zu bestimmen, ob mainGleichheit vorliegt putStr"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: putStrist keine Bibliotheksfunktion in SML, aber wir haben eine putStrin der Zeile genannte Funktion deklariert fun putStr x=print"treat";- es wird ein Argument x( "trick"in unserem Fall der String ) verwendet und sofort wieder vergessen, wie es ist kommt im Funktionskörper nicht vor. Dann wird der Körper print"treat"ausgeführt, der druckt treat(ohne ihn einzuschließen ", unterscheiden sich SMLs printvon Haskells print).
printhat den Typ string -> unit, putStrhat also den Typ a -> unitund hat daher putStr"trick"nur Typunit. Um gut getippt zu sein, mainmuss auch Typ vorhanden unitsein. Der Wert für unit ist in SML der gleiche wie in Haskell (), daher deklarieren wir val main=();und alles ist gut typisiert.

Probieren Sie es auf Codingground.
Hinweis: Die Ausgabe in der Konsole lautet

val putStr = fn : 'a -> unit                                   
val main = () : unit                                                    
treatval it = true : bool

weil in SML \ NJ der Wert und Typ jeder Anweisung nach jeder Deklaration angezeigt wird. So wird zuerst die Art der putStrund maingezeigt ist, dann bekommt die Ausdrücke ausgewertet verursacht treatgedruckt wird, dann wird der Wert des Ausdrucks ( truewie beide Seiten =sind ()) mit dem impliziten Ergebnisvariable gebunden , itdie ebenfalls angezeigt wird , dann.


1
Ich dachte immer, es fun ... ... =sei syntaktischer Zucker für val rec ... = fn ... =>. Andererseits ist es Jahrzehnte her, dass ich ML verwendet habe.
Neil

@Neil Du hast recht, funist syntaktischer Zucker für anonyme Funktionen gebunden val( recwird 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 von funempfohlen, insbesondere im Codegolf, da sie viel kürzer ist.
Laikoni

15

Ruby / C, 64 62 51 48 Bytes

#define tap main()
tap{puts(0?"trick":"treat");}

Was Ruby sieht:

tap{puts(0?"trick":"treat");}

Die tapMethode nimmt einen Block und führt ihn einmal aus. Es ist ein kurzer Bezeichner, für den wir #definein 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 falseund nil. Insbesondere ist 0 wahr. So wird Ruby "Trick" drucken.

Was C sieht (nach dem Pre-Prozessor):

main(){puts(0?"trick":"treat");}

0 ist in C falsch, daher gibt C "treat" aus.

2 Bytes gespart dank daniero.


1
Nett. Sie können putsanstelle von printfzwei Bytes speichern
daniero

Vielen Dank! Ich bin es so gewohnt, nur immer printfin C zu verwenden, ich habe vergessen, dass es auch eine putsFunktion hat.
m-chrzan

Zwei Ideen: Können Sie nicht etwas kürzeres verwenden tap? Und warum bist du die Räume nicht losgeworden? p ? "trick":"treat"=>p?"trick":"treat"
BrainStone

tapdient eigentlich zwei Zwecken. Es ist eine Kurzbezeichnung für #definedas 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, aber tap tun einen Block zu nehmen, und führt sie einmal.
m-chrzan

Methodennamen in Ruby können mit einem Fragezeichen enden, daher wird ein Leerzeichen benötigt p. ?<character>ist ein Zeichenliteral, daher wird nach dem ein Leerzeichen benötigt ?.
m-chrzan

15

QBasic / JavaScript, 51 44 Bytes

'';PRINT=a=>{alert("Treat")}
PRINT("Trick")

In 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 '';.


1
Ein sehr kluger Ansatz!
BrainStone

14

ShapeScript / Foo , 13 Byte

'trick'"treat

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.


14

Ruby / Perl, 21 Bytes

print"trick"%1||treat

Perl

Errechnet "trick" % 1das ist 0 % 1so die ||sendet treatan printstatt, da Perl Barewords akzeptiert.

Rubin

Formatiert die Zeichenfolge "trick"mit dem Argument 1, was dazu führt "trick", dass die Zeichenfolge wahr ist, sodass die Zeichenfolge ||nicht verarbeitet wird.


14

MATL / CJam , 17 Bytes

'TRICK'%];"TREAT"

In MATL diese ausgibt TRICK . In CJam es gibt TREAT .

Erläuterung

MATL

'TRICK'         Push this string
%];"TREAT"      Comment: ignored
                Implicit display

CJam

'T              Push character 'T'
R               Push variable R, predefined to empty string
I               Push variable I, predefined to 18
C               Push variable C, predefined to 12
K               Push variable K, predefined to 20
'%              Push character '%'
]               Concatenate stack into an array
;               Discard
"TREAT"         Push this string
                Implicit display

Du vermisst dort 3 Charaktere! (EAT)
Destructible Lemon

@DestructibleWatermelon Danke! Bearbeitet
Luis Mendo

Jetzt fehlen Ihnen drei in der MATL-Erklärung!
Destructible Lemon

@DestructibleWatermelon Aww. Nochmals vielen Dank :-D
Luis Mendo

12

Gelee / pl , 12 Bytes

0000000: 74 72 65 61 74 0a 7f fe 00 ba 49 fb                 treat.....I.

Dies ist das Programm, das mit Jellys Codepage angezeigt wird .

treatµ
“¡ṾI»

Probieren Sie es online!

Dies ist das Programm, das mit der Codepage 437 angezeigt wird .

treat
⌂■␀║I√

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 7fByte (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 treatgenau das gedruckt.


12

Objective-C / C, 50 Bytes

puts(){printf("trick");}main(){printf("treat\n");}

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 putsnicht den Ausgang beeinflussen , da wir nie die Funktion aufrufen, und maindruckt 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 putsmit 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.


10

Batch / sh, 30 Bytes

:;echo Treat;exit
@echo Trick

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:

:
echo Treat
exit
@echo Trick

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.


10

sed / Hexagony 32 Bytes

/$/ctrick
#$@$a</;r;e;/t;....\t;

sed

Probieren Sie es online!

Die erste Zeile wird gedruckt, trickwenn 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:

$ echo | sed -f TrickOrTreat.sed
trick

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:

   / $ / c 
  t r i c k
 # $ @ $ a <
/ ; r ; e ; /
 t ; . . . . 
  \ t ; . .
   . . . .

Ausgabe:

treat

Ich habe Hexagony-Posts gesehen, die Bilder des Ausführungspfads enthalten. Gibt es eine einfache Möglichkeit, diese zu generieren?
Riley


1
Ihr Hexagony-Code gibt ein führendes Null-Byte aus. Ich bin mir nicht sicher, ob dies als Leerzeichen für diese Herausforderung gilt.
Martin Ender

@MartinEnder Klingt wie es erlaubt ist. Vielen Dank für den Hinweis, ich vermisse diese immer aus irgendeinem Grund ...
Riley

Ich habe es geschafft, das zu beheben und gleichzeitig ein paar Bytes zu sparen (auf Kosten des Druckens von Großbuchstaben A, obwohl Sie das weniger hässlich machen könnten, indem Sie alle Buchstaben in Großbuchstaben ändern): hexagony.tryitonline.net/…
Martin Ender

10

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 ...

public static String TrickOrTreat(){
    String m = "Oct";
    String d = "31";
    return m + d == "Oct31" ? "Trick" : "Treat";
}

Eine interessante Eigenheit.
BrainStone

10

Brain-Flak / Brain-Flueue, 265 253 219 165 139 115 113 101 Bytes

Beinhaltet +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.

# Brain-Flak
(
 (((()()()))             # Push 3 twice
  ([]                    # Use the height to evaluate to 2
   (
    (({}{}))             # Use both 3s to push 6 twice
    ({}                  # Use one of those 6s to evaluate to 6
     ([((({}()())))]     # Use the other 6 to push 8 three times and evaluate to -8
      ([](({}{}){}){}{}) # Use all three 8s to push 75
     )                   # The -8 makes this push 67
    )                    # The 6 makes this push 73
   [])                   # Use the height and the 6 to push 82
  )                      # Use the 2 to push 84

# Brain-flueue
 [])     # Use the height and 3 to push 84
[()()])  # Push 82
({}()()) # 67 is at the front of the queue, so use that to push 69
{}       # Pop one from the queue
({})     # 65 is next on the queue so move to the end
({}[][]) # 74 is next, so use that and the height to push 84
{}       # Pop that last value from TRICK


9

PowerShell / Foo, 14 Byte

'trick'#"treat

In 'trick'PowerShell wird eine Zeichenfolge erstellt und in der Pipeline belassen. Das #beginnt einen Kommentar, so dass das Programm beendet und die impliziten Write-Outputdruckt trick.

In Foo, (Online ausprobieren!) , Die 'trick'ignoriert wird, die #das Programm Ursache für den Schlaf 0Sekunden (da gibt es nichts an dem Zeiger Array), dann "treatbeginnt eine Zeichenfolge. Da EOF erreicht ist, muss "die Zeichenfolge implizit geschlossen und auf stdout gedruckt werden.


Funktioniert auch in J / Foo.
Conor O'Brien

@ ConorO'Brien Ist die Erklärung dieselbe? Ich habe J noch nie benutzt und bin damit nicht vertraut.
AdmBorkBork

Nein, das funktioniert in J. nicht, #ist die Kopierfunktion, und es werden nur nicht negative komplexe linke Argumente verwendet, keine Zeichenfolgen. Das Kommentarsymbol istNB.
Adám

@ Adám richtig du bist. Ich habe das vergessen#
Conor O'Brien

9

PHP / Perl, 28 Bytes

print defined&x?trick:treat;

defined&x
Gibt etwas Wahres in PHP (keine Ahnung warum, aber es tut).
In Perl wird geprüft, ob eine Funktion xdefiniert ist - was nicht der Fall ist.
-> trickin PHP, treatin Perl.


@jmathews Haben Sie versucht, ein Backspace-Steuerzeichen in Ihre Windows-Version einzufügen ? Was ist CLS?
Titus

`ist der wahrheitswert von definiert & x oder d & x frag mich nicht welches d du bekommst
Jörg Hülsermann
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.