Trick or Treat polyglot

161

Comme Halloween approche, j'ai pensé que je pourrais commencer un défi amusant avec un code de golf!

Le défi est assez simple. Vous devez écrire un programme qui affiche soit trickou treat.
"La torsion?" tu peux demander. Eh bien, laissez-moi vous expliquer:

Votre programme doit faire ce qui suit:

  • Être compilable / runnable en deux langues différentes. Différentes versions d'une même langue ne comptent pas.
  • Lorsque vous exécutez le programme dans une langue, il doit générer tricket l’autre doit générer treat. La casse est sans importance et le remplissage de la chaîne avec des espaces est autorisé (voir exemples).
  • C'est du , donc la solution avec le moins d'octets gagne.

Quelques explications:

Valeurs valides (juste pour les mots ne servant pas à exécuter le code dans les deux langues. Ajoutant également des guillemets pour signaler le début ou la fin de la sortie. Ne les incluez pas dans votre solution!):

"trick"

"Treat"

"    TReAt"

"
     tRICk          "

Sorties non valides :

"tri ck"

"tr
eat"

"trck"

Je suis intéressé de voir ce que vous pouvez trouver! Bon golf!

Je voudrais noter que ceci est mon premier défi, donc si vous avez des suggestions sur cette question, laissez-les sous la forme d'un commentaire.

Classements

Voici un extrait de pile permettant de générer un classement régulier et un aperçu des gagnants par langue.

Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:

# Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:

# Perl, 43 + 2 (-p flag) = 45 bytes

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

BrainStone
la source
21
Cette méta-réponse indique que les quasi-doublons peuvent être tolérés s'il existe une bonne raison. Je pense que la popularité de cette question en raison de sa proximité avec Halloween est une bonne raison en soi, je vais donc voter pour la réouverture. Cela ne me dérangerait pas de le fermer après Halloween (mais je ne sais pas si ce serait une bonne chose non plus).
Aaron
2
@ mbomb007. Ceci est une copie de quoi ?
TRiG
3
certainement pas un doublon. La seule chose la même chose à propos de cet autre est que c'est aussi un défi polyglotte avec une sortie spécifiée.
Brian Minton
3
... 3 pages ... Je pense vraiment que cela génère beaucoup d'activité en fonction de la valeur actuelle de la variante saisonnière.
wizzwizz4
2
Quelle belle question! J'aime la façon dont certaines des réponses éclairent et exploitent la manière dont des fragments de code simples signifient différentes choses dans différentes langues, par exemple la véracité / falsification et l'associativité de l'opérateur ternaire.
Don Hatch

Réponses:

146

2sable / pl , 8 octets

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

Les deux programmes ont été testés localement avec le même fichier de 8 octets. Il s’agit donc d’un fichier polyglotte approprié.

2sable: astuce

Ceci est le programme dans la page de codes 1252 .

treat“ÐË

Essayez-le en ligne!

pl: traiter

Ceci est le programme en page de code 437 .

treatô╨╦

Essayez-le en ligne!

Comment ça fonctionne

2sable: astuce

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

treat     Bareword; push the string "treat" on the stack.
     ô    Unimplemented. Does nothing.
      ╨   Flatten the stack. This doesn't affect the output.
       ╦  Unimplemented. Does nothing.
Dennis
la source
15
Mais je dois admettre que cette réponse est ridicule! Et après? Une réponse plus courte que les mots eux-mêmes?
BrainStone
45
Cette réponse est extrêmement impressionnante. C'est incroyable que vous ayez réussi à écrire un programme plus court que la longueur des deux mots.
DJMcMayhem
1
Hein? Ce sont 2 programmes
FireCubez
1
@FireCubez C'est le même code, octet par octet. La représentation visuelle varie cependant avec la page de code.
Dennis
201

Lot Python / Windows, 25 octets

print"trick"#||echo.treat

Tout ce qui suit le # est interprété comme un commentaire par python, tandis que le || est un OU en batch, en disant que comme la commande précédente a échoué, exécutez celle-ci.

J'aime aussi l'utilisation d'un OU car il se lit presque "truc ou friandise" :)

Néphi12
la source
33
TBH J'ai voté ceci juste pour le commentaire sur le bloc opératoire.
Jmons
7
TBH Je ne m'attendais jamais à ce que mon premier message reçoive 65 votes positifs :)
nephi12
11
TBH ne laisse pas que parler des votes positifs. Ce n'est pas Quora
S Andrew
3
@SAndrew en tant que tout nouveau membre de cette communauté, je ne m'attendais pas à publier un message aussi bien reçu si tôt, et je suis heureux d'avoir pu contribuer. Je ne cherche pas à me vanter, s'il vous plaît, ne vous méprenez pas. Je suis vraiment heureux d'être si bien reçu en tant que nouveau. merci pour votre commentaire :)
nephi12
2
Le consensus de la communauté @YotamSalmon indique que STDERR est ignoré par défaut; seul STDOUT est pris en compte. Relancez la commande avec 2>nul.
Conor O'Brien
154

Espace blanc / étoilé, 135 octets

Voici un ciel dégagé pour Halloween!

  + + + + + 
    +

* + + * + *

   + *           
     + +        

 + * +   



 + * +. + + + * + + *. . .

Notez que les espaces sur les lignes vides peuvent ne pas être préservés si vous copiez à partir du code ci-dessus.

Les espaces blancs sortent "TRICK". Essayez-le en ligne!
Sorties étoilées "TREAT". Essayez-le en ligne!

Explication

Étoilé

Starry ignore tous les onglets et les nouvelles lignes, donc le code lu est le suivant

         + + + + + +  * +   +*   +  *   +  *       + +   +* +   +* + .  + .   +      +* +   +* . . .

Par ailleurs, pousser des valeurs est très coûteux par rapport aux opérations de pile et arithmétiques dans Starry. Le code commence en poussant et en dupliquant 4 et effectue un certain nombre d'opérations dessus. Avec 2 et 1 poussés plus tard, toutes les valeurs ASCII requises sont générées.

Code annoté

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)

Espace blanc

Comme son nom l'indique, les espaces ne traitent que les trois caractères d'espacement: espace, tabulation et nouvelle ligne. Contrairement à la Starry, le pousse simplement les espaces blancs valeurs ASCII T, R, I, C, et Ket les estampes eux.

Code annoté

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

L’imbrication des empreintes et des empreintes a été choisie uniquement pour des raisons esthétiques car elle n’affecte pas le nombre d’octets.

0 '
la source
12
si beau ciel
lois6b
9
c'est de loin la meilleure réponse, tellement créative. Je suis choqué par l'ingéniosité. et la compétence. Bravo!
Nephi12
137

Fichier .COM Linux ELF x86 / DOS, 73 octets

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

Source NASM:

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

Ceci utilise le fait que l'en-tête ELF commence par 7F 45, qui, interprété comme un code x86, est un saut.

Les parties pertinentes pour le 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$
Ninjalj
la source
4
Bravo, monsieur. Bravo.
Draconis
9
Mon coeur a sauté un battement.
John Keates
muppetlabs.com/~breadbox/software/tiny/teensy.html est une bonne lecture pour ceux qui sont intéressés par l'astuce de chevauchement d'en-tête ici.
Sparr
4
C'est l'une des meilleures réponses que j'ai jamais vues sur ce site. Codegolf se transforme un peu trop souvent en langages ésotériques spécialement conçus pour le golf, plutôt que des réponses intelligentes. C'est beau.
Knetic
C'est génial.
Gooseman
104

evil / ZOMBIE , 109 octets

Une autre réponse fantasmagorique!

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

Le ZOMBIEcode définit un vampirenommé xfdont la seule tâche fest activée à l’instanciation et sortira une trickfois avant d’être désactivé par stumble. L'autre sayappel concerne le code mort (à quel point!) ZOMBIE, Mais contient la plupart du evilcode.

Car evil, le xfnom est un appel à sauter au suivant j, qui précède le zuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeawgémissement de zombie qui fabrique et produit treat. Le code suivant est soit exécuté (lettres minuscules), soit ignoré, mais comme il n’ya wpas de sortie, aucune sortie ne doit être produite.

Aaron
la source
1
@KevinCruijssen merci, j'ai apprécié cette occasion d'entrer dans des langues ésotériques moins connues :)
Aaron
Eh bien, parmi les quatre que vous avez utilisés, j'ai déjà vu Agony à quelques reprises et je me souviens vaguement d'avoir déjà vu ZOMBIE. Jamais entendu parler de HashHell ou du mal avant, cependant. :)
Kevin Cruijssen
le thème de Halloween est impressionnant! Je n'avais jamais entendu parler de ces deux langues
ejfrancis
95

Python / Perl, 28 octets

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

Explication

Depuis []est un ArrayRef en Perl, c'est une vérité, mais c'est un tableau vide en Python, donc faux.

Dom Hastings
la source
7
De même, print({}and"trick"or"treat")en Python / Lua.
utilisateur200783
1
@ user200783 Cela aurait également le même effet en Perl, puisqu'il {}s'agit d'un HashRef!
Dom Hastings
2
Est également presque identique pour Python / Ruby, mais nécessite un espace supplémentaire:print ([]and"trick"or"treat")
Value Ink
2
Aimer! Ceci est un excellent commentaire sur ce que la conversion implicite fait pour la lisibilité.
Don Hatch
Cela pourrait être un polyglotte en Lua, Perl et Python si c'était print({}and"trick"or"treat")!
ckjbgames
48

PHP / JavaScript, 32 à 30 octets

Affiche tricken PHP et treaten JS.

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

La NaNconstante inconnue est convertie implicitement en chaîne par PHP, ce qui en fait une vérité. C'est de la fausseté dans JS.

Méthode alternative, 38 octets

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

L'opérateur ternaire est à droite associative dans JS:

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

Et gauche-associative en PHP:

                1 ? 0 : 1 ? 0 : 1
 is parsed as:  (1 ? 0 : 1) ? 0 : 1
 which equals:  1
Arnauld
la source
1
Tu as raison, mon mauvais
Gareth Parker
alert () est JavaScript en HTML, cependant, pas en JavaScript depuis la console.
Peter Ferrie
1
Méthode alternative: '\ 0' == "\ 0"? Die (astuce): alert ('traiter'); `.
Ismael Miguel
3
Déboguer des opérateurs ternaires chaînés en PHP doit être tellement amusant.
Robert Fraser
3
@Robert Déboguer quoi que ce soit en PHP est tellement amusant.
Commentaires
39

HTML / HTML + JavaScript, 53 octets

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

treatest le contenu textuel du document en HTML.
Si JS est activé, il remplacera le contenu HTML par trick.

Titus
la source
3
Solution intéressante. Je l'aime bien
BrainStone
1
Vous devriez utiliser à la document.write()place. -8 octets
darrylyeo
@darrylyeo document.writene remplacerait pas la sortie HTML, mais s'y ajouterait.
Titus
1
Testé en Chrome. Entièrement fonctionne. L'activation et la désactivation de javascript modifie le contenu lors de l'actualisation.
Tatarize
@Tatarize: Testé sous Firefox 49, Opera 41, Safari 5.0, Chrome 54, Edge 38 sous Windows, Firefox 5.3 et Safari 5.0 sur iOS, Firefox 49 et Dolphin 11.5 sur Android. Seul Firefox sous Windows remplace; tous les autres ajoutent.
Tite
33

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

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

// \ fait de la ligne suivante également un commentaire en C mais est un commentaire régulier d'une ligne en Java. Vous pouvez donc faire en sorte que C ignore le code destiné à Java et en ajoutant / * à la deuxième ligne, vous pouvez faire un commentaire pour Java qui est: analysé comme code par C.

Edit: je l’ai un peu amélioré en réorganisant les lignes et les commentaires.

Edit2: J'ai encore réorganisé et raccourci encore plus.

Edit3: J'ai ajouté les corrections suggérées par BrainStone pour supprimer 5 octets, merci :)

Edit4: Une nouvelle ligne s'est avérée inutile, je l'ai donc supprimée.

Edit5: j'ai changé printf en met.

Edit6: J'ai ajouté une correction suggérée par Ray Hamel.

I_LIKE_BREAD7
la source
1
Vous pouvez sauvegarder 1 octet en changeant C en C ++ et en le remplaçant #include<stdio.h>par #include<cstdio>. Pas beaucoup, mais un octet est un octet. Et la suppression de plus int Infront de mainvolonté 4 octets de sécurité. intest impliqué par C et C ++
BrainStone
Merci, j'ai modifié le code en fonction de vos suggestions :)
I_LIKE_BREAD7
1
Agréable! J'ai eu du mal à trouver quelque chose pour Java et je me suis retrouvé avec Java 7 + Whitespace . Btw, vous pouvez jouer au golf un octet de plus en supprimant l'espace à String[]s.
Kevin Cruijssen
29

Jolf + Chaîne, 12 octets

Parce que Chaîne ne peut accepter un fichier à télécharger avec un encodage, je suppose que UTF-8. (Si je pouvais supposer ISO-8859-7, ce serait 11 octets, mais ce serait injuste.)

trick«treat

Dans la Chaîne, «commence un commentaire et le reste est imprimé textuellement. Dans Jolf, «commence une chaîne. Heureusement, trickne fait rien de mal ( 10; range(input, parseInt(input))fondamentalement), et treatest imprimé.

Essayez Jolf ici!

Essayez la Chaîne ici!

Ils fonctionnent tous les deux sur mon navigateur (firefox, dernière version), mais on ne peut pas en dire autant des autres navigateurs.

Conor O'Brien
la source
2
Je suppose que l'inventaire de nombreux langages obscurs a ses avantages ...
Conor O'Brien
1
Cela fait plaisir de voir que nous nous approchons des soloutions à peu près uniquement en dehors des mots. Je me demande si quelqu'un peut réutiliser le tr.
BrainStone
1
@BrainStone Personnellement, je doute que cela trpuisse être réutilisé dans n'importe quel golf - c'est une petite information qui prendrait au moins un opérateur pour encoder dans des langues de golf, puis une langue spécifique conditionnelle. Il serait probablement égal à la même longueur ou plus. Cependant, ce n'est que ma conjecture;)
Conor O'Brien
Découvrons-le. Mais je suis d'accord. Un nombre d'octets de 10 ou moins serait fou!
BrainStone
@BrainStone, 8 octets: codegolf.stackexchange.com/a/97580/5011
SeanC
27

#hell / Agony , 43 octets

Tellement ><>partout, qu'est-ce que c'est, un défi du poisson d'avril? Voici une réponse avec des langues à thème approprié.

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

#hellest un sous-ensemble LUAqui accepte heureusement io.writeles appels de sortie. Nous utilisons LUAles --commentaires pour qu’il n’exécute que ce fragment.

Agonyest un Brainfuckdérivé qui a la particularité d'avoir son code et sa mémoire de travail sur la même bande. La première ligne n'imprime que 5 caractères (10 cellules) à partir de la fin du segment de code, où I est codé en treattant que Agonycommande. LUAL'ouverture de commentaire --modifie la valeur d'une cellule non utilisée.

Aaron
la source
Je dois dire que vos thèmes sur le thème de Halloween sont le meilleur imho. Très créatif!
BrainStone
@BrainStone Merci, je me suis amusé à les fabriquer!
Aaron
27

Cubix / Hexagony , 31 octets

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

Trick it out! Traitez-le en ligne!

Halloween à thème ? Notez les faits horribles sur ces langues et le code:

  1. Si et même si vous ne faites rien (ne mettez que des no-ops), vous ne pourrez jamais vous échapper de la boucle dont la détermination est de courir pour toujours ...
  2. Et être coincé au milieu d'un langage de programmation 3D et 2D (Oh Agony ...)
  3. À l'intérieur des dimensions, vous allez progressivement perdre où vous êtes ... où vous étiez ...
  4. Et il y a un =v=sourire à vous qui agit en no-ops dans le code

Nous allons creuser dans le mystère du protocole de communication caché de 31 octets de dimensions et de terreur ...

tour

Quand le code se plie ou se déplie tout seul ... C'est-à- cubifieddire que la disposition ressemble à ceci:

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

Et la partie principale est cette partie au milieu:

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

Il appuie k,c,i,r,tsur la pile et ogénère des sorties et des ;sauts dans une boucle délimitée par des réflecteurs et ?qui vous guide en fonction de la valeur située en haut de la pile ...

traiter

Soudain, le code se transforme en cube en hexagone. (Imagine ça)

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

Et la partie principale est cette partie:

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

Il exécute t;ce qui imprime tet frappe le miroir et tourne sa direction vers le nord-ouest à partir du coin SE et frappe un autre miroir. Cela va r;et enveloppe pour e;_aet ]apporte au pointeur d'instruction 1 qui commence au coin NE SE pointant et frappe /qui reflète horizontalement ;alors t.

Ensuite , il enveloppe à =, ;et se @termine le désordre.

Alors ... Que _fait-il là?

Pourquoi est-ce à l'intérieur du t e a(les 3 premières lettres du code)?

Voici la fin de l'histoire -

ça ne fait rien .

Cela ressemble-t-il à la fin d'une histoire d'horreur?

Sunny Pun
la source
Bien, très bien! Il est difficile de créer un polyglotte à partir de deux langages 2D. J'aime l'histoire d'horreur qui va avec;)
ETHproductions
Je ne sais pas si cette réponse ou ELF / .COM est plus impressionnante. Bon travail!
val
24

SQL / Javascript, 54 octets

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

Même approche qu'avec ma réponse QB / JS : la première ligne contient l'instruction SQL, la seconde dispose d'un "commentaire" pour SQL et d'un NOP pour JS. Ensuite, nous définissons l’instruction SQL selectcomme une fonction JS valide.

Steenbergh
la source
3
C'est une façon très intelligente de combiner ces deux langues. Avoir un +1!
ETHproductions
22

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

Cette réponse nécessite que l' -Aindicateur apparaisse en ASCII pour Brain-Flak et, heureusement, Brainfuck ne s'en soucie pas, il n'affecte donc pas la sortie dans Brainfuck.

(((((()(()()()){})({}){}){}){})+++++++[<+++<(((()()()())((((({}){}){}){}){}()))[][][][]())>>-])<[<++++>-]<.--.---------.------.>++[<++++>-]<.>>

Essayez-le en ligne!

Essayez-le en ligne!

Comment ça marche

Le seul chevauchement entre la syntaxe de Brain-Flak et Brainfuck concerne les caractères <>[]. Pour brain-flak, cela signifie principalement que le programme doit assurer un nombre pair de commutateurs de pile <>. Et pour Brainfuck, cela signifie que nous devons éviter les boucles infinies causées par l'utilisation de la []monade.

Le code Brain-Flak est le suivant:

(((((()(()()()){})({}){}){}){})[<<(((()()()())((((({}){}){}){}){}()))[][][][]())>>])<[<>]<>[<>]<>>

Mis à part le [<<...>>]bit au milieu et <[<>]<>[<>]<>>à la fin, ce code est assez semblable au cours pour les programmes Brain-Flak. Le négatif autour du zéro ( [<...>]) est là pour créer une boucle pour Brainfuck. L'intérieur <...>est utilisé pour déplacer le Brainfuck dans une cellule vide avant qu'il ne rencontre le [][][][]qui bouclerait infiniment sinon.

Le code Brainfuck est comme suit:

+++++++[<+++<[][][][]>>-]<[<++++>-]<.--.---------.------.>++[<++++>-]<.>>

En plus des éléments susmentionnés, il s’agit également d’un programme assez standard, je vous épargne donc tous les détails.

Sriotchilisme O'Zaic
la source
J'aime celui-ci: D
Conor O'Brien
9
Il y a BEAUCOUP plus de deux langues qui correspondent à l'expression régulière /brainf..k/, vous devriez donc utiliser le même format d'en-tête que tout le monde.
mbomb007
13
@ mbomb007 le seul autre langage que je puisse trouver qui corresponde à cette expression rationnelle est brainfork . Lorsque vous utilisez brainfork, cela affiche commodément "TRICK", je vais donc laisser la regex pour le moment.
Sriotchilism O'Zaic
For brain-flak this mostly means the program has to ensure an even number of stack switchesÊtes-vous sûr de cela? Cela ne devrait pas avoir d'importance car <>c'est un NOP en brainfuck
DJMcMayhem
@DJMcMayhem doit se terminer sur la même pile, nous mettons tout sinon la page ne sera pas imprimée.
Sriotchilism O'Zaic
21

> <> / Pêche , 38 octets

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

Pour faire un ><>/ Fishingpolyglotte.

C'est mon premier morceau de Fishingcode après avoir longtemps joué avec ><>.
Ma première impression: comme dans la nature, le pêcheur a moins de capacités physiques que sa prière, mais le compense avec son outil!

Ici le code est extrêmement simple: ><>n'exécutera que la première ligne, où se _trouve un miroir vertical et n'a aucun effet puisque le poisson commence à nager horizontalement. Il appuie simplement tricksur la pile puis l’imprime avant de s’arrêter.
Pour Fishing, les _instructions pour descendre. Le pêcheur suivra le pont qui constitue la deuxième ligne tout en attrapant les personnages de la troisième ligne. Ceux-ci pousseront treatsur la bande puis l’imprimeront, s’arrêtant au moment où elle atteindra la fin du jeu.

Si l'erreur est autorisée, vous pouvez descendre à 35 octets avec le code suivant, ce qui déclenchera une erreur s'il est exécuté ><>une fois trickimprimé sur la pile:

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

Vous devriez également vérifier mes réponses aux langues thématiques, #hell / Agony and evil / ZOMBIE !

Aaron
la source
Aw, je voulais faire un poisson / pêche polyglotte :) Vous me battez pour cela. Joli!
Emigna
+1 pour " comme dans la nature, le pêcheur a moins de capacités physiques que sa prière, mais le rattrape avec son outil! "
Kevin Cruijssen
20

05AB1E / En fait , 10 octets

"trick"’®Â

Explication

05AB1E

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

Essayez-le en ligne

Réellement

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

Essayez-le en ligne

Emigna
la source
Vous savez, je peux bien lire le trick’®Â
texte
1
Maintenant, les gens ont connu cette fonctionnalité. La prochaine fois, nous aurons des questions telles que " hQq3k ou bvM; p polyglot " ...
jimmy23013
3
@KevinCruijssen: '® est traduit par "prenez le mot avec l'index 3757 du dictionnaire", ce qui est "traiter".
Emigna
@Emigna Ok ... Donc, tous les mots anglais ~ 1.1M sont accessibles dans 05AB1E?
Kevin Cruijssen
1
@KevinCruijssen: Non, il y a 10k au total (chacun pouvant être représenté par 2 caractères). Vous pouvez trouver la liste complète ici .
Emigna
16

Haskell / Standard ML , 56 octets

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

Vue de Haskell

Les points-virgules permettent plusieurs déclarations sur une ligne et agissent comme des sauts de ligne. Nous obtenons donc

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

Un programme Haskell est exécuté en appelant la mainfonction. La dernière ligne putStr"trick"est donc exécutée, elle est simplement imprimée trick.
Les deux premières lignes sont interprétées comme des déclarations de fonction suivant le modèle <functionName> <argumentName1> ... <argumentNameN> = <functionBody>. Ainsi, dans la première ligne, une fonction nommée funest déclarée, qui prend deux arguments nommés putStret xet le corps de la fonction print"treat". Il s'agit d'une fonction Haskell valide avec type fun :: t -> t1 -> IO (), ce qui signifie qu'elle prend un argument d'un type arbitraire tet qu'un second d'un type quelconque t1renvoie ensuite une action IO. Les types tet t1importent peu car les arguments ne sont pas utilisés dans le corps de la fonction. Le type d’action IO résultant de print"treat", qui est imprimé "treat"sur StdOut (remarquez le ", c’est pourquoi,putStrau lieu de printest utilisé dans main). Cependant, comme il ne s’agit que d’une déclaration de fonction, rien n’est réellement imprimé car il funn’est pas appelé main.
La même chose se passe dans la deuxième ligne val main=();, une fonction valest déclarée qui prend un argument arbitraire nommé mainet retourne unit , le tuple vide (). Son type est val :: t -> ()(la valeur et le type d' unité sont indiqués par ()).

Essayez-le sur Ideone.


Vue standard ML

La ML standard est un langage principalement fonctionnel dont la syntaxe est liée à Haskell, mais pas identique. En particulier, les déclarations de fonction sont précédées du mot clé funsi elles prennent des arguments, et du mot clé valsi elles ne le sont pas. Il est également possible d’avoir une expression au plus haut niveau (c’est-à-dire ne figurant dans aucune déclaration) qui est exécutée lors de l’exécution du programme. (En Haskell, écrire en 1+2dehors d’une déclaration jette une naked expression at top levelerreur). Enfin, le symbole pour tester l'égalité est =au lieu de ==Haskell. (Il y a beaucoup plus de différences, mais ce sont les seules qui importent pour ce programme.)
SML voit donc deux déclarations

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

suivi d'une expression

main=putStr"trick"

qui est ensuite évalué. Pour déterminer si les mainégaux sont égaux putStr"trick", les deux côtés doivent être évalués et les deux doivent être du même type, car SML (ainsi que Haskell) est typé de manière statique. Voyons d’abord le côté droit: putStrn’est pas une fonction de bibliothèque dans SML, mais nous avons déclaré une fonction nommée putStrdans la ligne fun putStr x=print"treat";- elle prend un argument x(c’est la chaîne "trick"dans notre cas) et l’oublie immédiatement, car ne se produit pas dans le corps de la fonction. Ensuite, le corps print"treat"est exécuté et imprimé treat(sans inclure ", le format SML printest différent de celui de Haskell print).
printa le type string -> unit, a donc putStrle type a -> unitet a donc putStr"trick"juste tapezunit. Pour être bien typé, il mainfaut aussi avoir le type unit. La valeur de l' unité est la même dans SML que dans Haskell (), nous déclarons donc val main=();et tout est bien typé.

Essayez-le sur le terrain de codage.
Remarque: la sortie dans la console est

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

Car dans SML \ NJ, la valeur et le type de chaque instruction sont affichés après chaque déclaration. Donc, d'abord, les types de putStret mainsont montrés, ensuite les expressions sont évaluées et treatimprimées, puis la valeur de l'expression ( truecomme les deux côtés de =sont ()) est liée à la variable de résultat implicite itqui est également affichée.

Laikoni
la source
1
J'ai toujours pensé que fun ... ... =c'était du sucre syntaxique pour val rec ... = fn ... =>. Mais là encore, cela fait des décennies que j'ai utilisé ML.
Neil
@Neil Vous avez raison, func'est un sucre syntaxique pour une fonction anonyme liée val(qui recn'est nécessaire que si la fonction est récursive) et, par conséquent, la formulation "doit être préfixé" est mal choisie, je vais modifier la réponse. En général, l’utilisation funest la meilleure pratique, en particulier dans le code golf, car elle est beaucoup plus courte.
Laikoni
15

Ruby / C, 64 62 51 48 octets

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

Ce que Ruby voit:

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

La tapméthode prend un bloc et l'exécute une fois. C'est un identifiant court pour lequel nous pouvons créer une #definemacro en C. Cela nous permet également de mettre un bloc entre accolades dans le code partagé, même si Ruby n'autorise pas {}s dans la plupart des contextes.

Les seules valeurs de fausseté dans Ruby sont falseet nil. En particulier, 0 est la vérité. Ainsi, Ruby imprimera "astuce".

Ce que voit C (après le pré-processeur):

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

0 est une fausseté dans C, donc C imprimera "traiter".

2 octets sauvés grâce à daniero.

m-chrzan
la source
1
Agréable. Vous pouvez utiliser putsau lieu de printfpour sauvegarder deux octets
daniero
Merci! Je suis tellement habitué à utiliser toujours printfen C que j'ai oublié qu'il a aussi une putsfonction.
m-chrzan
Deux idées: ne pouvez-vous pas utiliser quelque chose de plus court tap? Et pourquoi ne t'es-tu pas débarrassé des espaces? p ? "trick":"treat"=>p?"trick":"treat"
BrainStone
tapsert réellement à deux fins. C’est un identifiant court #definesur lequel l’accrochage est possible, mais cela me permet également de mettre les accolades directement dans le code Ruby. {}blocs Ruby ne fonctionnent pas comme ils le font en C et langues similaires, mais tap ne prenez un bloc, et exécute une fois.
m-chrzan
Les noms de méthodes en Ruby peuvent se terminer par un point d'interrogation, un espace est donc nécessaire après p. ?<character>est un caractère littéral, il faut donc un espace après ?.
m-chrzan
15

QBasic / JavaScript, 51 44 octets

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

Dans QBasic, il affiche la deuxième ligne et n'exécute pas la première, car il s'agirait d'un commentaire (merci). Dans JS, il appelle la fonction PRINT, définie sur la première ligne, juste après le JS NOP '';.

Steenbergh
la source
1
Une approche très intelligente!
BrainStone
14

ShapeScript / Foo , 13 octets

'trick'"treat

Essayez-le en ligne! astuce | traiter

Comment ça fonctionne

ShapeScript est analysé caractère par caractère. Lorsque EOF est touché sans rencontrer de devis de clôture, rien n'est jamais poussé sur la pile. 'trick'pousse la chaîne à l'intérieur des guillemets, qui est imprimée implicitement dans STDOUT.

Foo n'a aucune commande assignée aux personnages 'trick', donc cette partie est ignorée en silence. Cependant, tout ce qui est entre guillemets doubles est imprimé immédiatement dans STDOUT, même si le guillemet de fermeture est manquant.

Dennis
la source
14

Ruby / Perl, 21 octets

print"trick"%1||treat

Perl

Calcule "trick" % 1qui est 0 % 1donc l' ||envoie treatà la printplace, car Perl accepte barewords.

Rubis

Formate la chaîne "trick"avec l'argument 1, ce qui donne la "trick"vérité, donc le ||traitement n'est pas.

Dom Hastings
la source
14

MATL / CJam , 17 octets

'TRICK'%];"TREAT"

En MATL ce sorties TRICK . En CJAM il émet TREAT .

Explication

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
Luis Mendo
la source
Il vous manque 3 personnages là-bas! (EAT)
Citron destructible
@DestructibleWatermelon Merci! Edité
Luis Mendo
Maintenant, il vous en manque trois dans l'explication MATL!
Citron destructible
@ DestructibleWatermelon Aww. Merci encore :-D
Luis Mendo
12

Gelée / pl , 12 octets

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

C'est le programme affiché en utilisant la page de code de Jelly .

treatµ
“¡ṾI»

Essayez-le en ligne!

C'est le programme affiché à l'aide de la page de code 437 .

treat
⌂■␀║I√

Essayez-le en ligne!

Les deux programmes ont été testés localement avec le même fichier de 12 octets. Il s’agit donc d’un fichier polyglotte approprié.

Comment ça fonctionne

En gelée, chaque ligne définit un lien (fonction); la dernière ligne définit le lien principal , qui est exécuté automatiquement lors de l'exécution du programme. À moins que le code avant le dernier 7foctet (le saut de ligne dans la page de code de Jelly) ne contienne une erreur d'analyse (qui annulerait immédiatement l'exécution), ils sont simplement ignorés. La dernière ligne, “¡ṾI»indexe simplement dans le dictionnaire de Jelly pour récupérer le mot astuce , qui est imprimé implicitement à la fin du programme.

Je ne connais pas grand chose à propos de pl, mais il semble que l'interprète ne récupère qu'une ligne de code et ignore tout ce qui vient après. Comme en Perl, les mots nus sont traités comme des chaînes, donc ils affichent treatexactement cela.

Dennis
la source
12

Objective-C / C, 50 octets

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

Objective-C a obtenu des friandises et des impressions , mais pas C et des astuces .

Comment ça fonctionne

Je ne connais pas beaucoup Objective-C , mais il fait ce à quoi nous nous attendions raisonnablement dans cette situation. La redéfinition de putsn'affecte pas la sortie puisque nous n'appelons jamais la fonction, et mainimprime un traitement et un saut de ligne vers STDOUT.

Vous pourriez vous attendre à ce que C fasse de même, mais pas au moins gcc 4.8, gcc 5.3 et clang 3.7.

Puisque nous n'avons pas besoin du véritable printf (qui prend une chaîne de format et des arguments supplémentaires) et que la chaîne à imprimer se termine par un saut de ligne, nous pouvons utiliser des options de vente. putting est légèrement plus rapide que printf (qui doit analyser ses arguments avant l'impression). Ainsi, à moins de redéfinir la fonction printf , le compilateur optimise et remplace l'appel à printf par un appel à put . Le compilateur ne sait pas très bien que l'appel putsavec un argument "treat"imprimera l' astuce à la place!

Ne pas inclure stdio.h est crucial ici, car définir des options de vente nécessiterait d'utiliser le même type que dans le fichier d'en-tête ( puts(const char*)).

Enfin, il est à noter que l’appel à printf in met une chaîne de caractères sans saut de ligne. Sinon, le compilateur «optimise» également cet appel, ce qui entraîne une erreur de segmentation.

Dennis
la source
10

Batch / sh, 30 octets

:;echo Treat;exit
@echo Trick

Explication. Batch voit la première ligne comme une étiquette, qu’il ignore, et exécute la deuxième ligne, qui affiche Trick. Le @ supprime l'écho par défaut de Batch de la commande sur stdout. (Les étiquettes ne sont jamais rappelées.) En attendant, sh voit ce qui suit:

:
echo Treat
exit
@echo Trick

La première ligne ne fait rien (c'est un alias de true), la deuxième ligne imprime Treat et la troisième ligne quitte le script. Le tour @echo n'est donc jamais atteint.

Neil
la source
10

sed / Hexagony 32 octets

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

sed

Essayez-le en ligne!

La première ligne s'imprime tricks'il y a une chaîne vide à la fin de l'entrée. (sed ne fait rien s'il n'y a pas d'entrée, mais une ligne vide sur stdin est autorisée dans ce cas)

Exemple d'exécution:

$ echo | sed -f TrickOrTreat.sed
trick

Hexagone

Essayez-le en ligne!

Le premier /redirige le pointeur d’instruction vers le haut et le gauche, de sorte qu’il entoure le bas à gauche, en ignorant le texte utilisé pour sed. Il réutilise le code du fichier sed et en utilise quelques autres sans aucun effet. L'hexagone élargi ressemble à ceci:

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

Sortie:

treat
Riley
la source
J'ai vu des publications Hexagony qui ont des images du chemin d'exécution, est-il facile de générer celles-ci?
Riley
1
Votre code Hexagony imprime un octet nul de premier plan. Je ne sais pas si cela compte comme un espace pour les besoins de ce défi.
Martin Ender
@MartinEnder On dirait que c'est permis. Merci de me l'avoir signalé. Celles-ci me manquent toujours pour une raison quelconque ...
Riley
J'ai réussi à résoudre ce problème tout en économisant quelques octets (au prix de l'impression d'une majuscule A, mais vous pourriez rendre cela moins moche en changeant toutes les lettres en majuscules): hexagony.tryitonline.net/…
Martin Ender
10

C # / Java

Cela ne signifie probablement pas qu’il ne fonctionne pas tout seul, mais le défi m’a rappelé une bizarrerie de savoir comment C # et Java gèrent la comparaison de chaînes de caractères différemment avec laquelle vous pouvez vous amuser avec l’obscurcissement de code.

La fonction suivante est valide en C # et en Java, mais retournera une valeur différente ...

public static String TrickOrTreat(){
    String m = "Oct";
    String d = "31";
    return m + d == "Oct31" ? "Trick" : "Treat";
}
Brainfloat
la source
Bizarrerie intéressante en effet.
BrainStone
10

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

Inclut +1 pour -A

Merci à Wheat Wizard d’avoir fait des allers et retours avec moi, jouant quelques octets sur le code de chacun.

((((()()()))([]((({}{}))({}([((({}()())))]([](({}{}){}){}{})))[]))[])[()()])({}()()){}({})({}[][]){}

Brain-Flak: Essayez-le en ligne!
Brain-Flueue: essayez-le en ligne!

Explanation:
La première section répertorie les valeurs visibles par Brain-Flak.
Quand il passe à Brain-Flueue, je commence à lister les valeurs comme Brain-Flueue les voit.

# 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
Riley
la source
Un peu de concurrence
Sriotchilism O'Zaic
9

PowerShell / Foo, 14 octets

'trick'#"treat

Le 'trick'dans PowerShell crée une chaîne et la laisse sur le pipeline. Le #commence un commentaire, ainsi le programme se termine et les Write-Outputimpressions implicites trick.

Dans Foo, (Try it Online!) , Le 'trick'mot est ignoré, le #programme s'endort pendant 0quelques secondes (car il n'y a rien au pointeur du tableau), puis "treatcommence une chaîne. Etant donné que EOF est atteint, il existe un implicite "pour fermer la chaîne, qui est imprimé sur stdout.

AdmBorkBork
la source
Fonctionne également en J / Foo.
Conor O'Brien
@ ConorO'Brien L'explication est-elle la même? Je n'ai jamais utilisé J et je ne le connais pas.
AdmBorkBork
Non, cela ne fonctionne pas dans J. #est la fonction de copie, et cela ne prend que des arguments non-complexes complexes de gauche, pas des chaînes. Le symbole de commentaire est NB.
affiché
@ Adám tu as raison. J'ai oublié le#
Conor O'Brien
9

PHP / Perl, 28 octets

print defined&x?trick:treat;

defined&x
donne quelque chose de vrai en PHP (je ne sais pas pourquoi, mais c'est le cas).
En Perl, il vérifie si la fonction xest définie, ce qui n'est pas le cas.
-> tricken PHP, treaten Perl.

Titus
la source
@jmathews Avez-vous essayé d'insérer un caractère de contrôle de retour arrière dans votre version de Windows? Qu'en est- il CLS?
Titus
`est la valeur de vérité de & x ou d & x définis ne me demandez pas lequel vous obtenez
Jörg Hülsermann