Truco o trato políglota

161

¡Ya que se acerca Halloween, pensé que podría comenzar un pequeño desafío divertido de golf de código!

El desafío es bastante simple. Tienes que escribir un programa que da salida a cualquiera tricko treat.
"¿El giro?" Tu puedes preguntar. Bueno, déjame explicarte:

Su programa tiene que hacer lo siguiente:

  • Ser compilable / ejecutable en dos idiomas diferentes. Las diferentes versiones del mismo idioma no cuentan.
  • Cuando ejecutas el programa en un idioma, debería salir tricky el otro debería salir treat. El caso es irrelevante y se permite rellenar la cadena con caracteres de espacio en blanco (ver ejemplos).
  • Este es el , por lo que gana la solución con la menor cantidad de bytes.

Algunas explicaciones:

Salidas válidas (Solo para las palabras que no son para ejecutar el código en los dos idiomas. También agregue comillas para señalar el comienzo o el final de la salida. ¡No las incluya en su solución!):

"trick"

"Treat"

"    TReAt"

"
     tRICk          "

Salidas inválidas :

"tri ck"

"tr
eat"

"trck"

¡Estoy interesado en ver qué se te ocurre! ¡Feliz golf!

Me gustaría señalar que este es mi primer desafío, así que si tiene sugerencias sobre esta pregunta, déjelas en forma de comentario.

Tablas de clasificación

Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.

Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:

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

BrainStone
fuente
21
Esta meta respuesta indica que se pueden tolerar casi duplicados si hay una buena razón. Creo que la popularidad que recibe esta pregunta por estar cerca de Halloween es una buena razón en sí misma, así que votaré para reabrirla. No me importaría cerrarlo después de Halloween (pero tampoco sé si esto sería algo bueno).
Aaron
2
@ mbomb007. ¿Esto es un duplicado de qué ?
TRiG
3
Definitivamente no es un duplicado. Lo único diferente de ese otro es que también es un desafío políglota con salida especificada.
Brian Minton
3
... 3 páginas ... Realmente creo que esto está obteniendo mucha actividad basada en el valor actual de la variante estacional.
wizzwizz4
2
¡Qué gran pregunta! Me encanta cómo algunas de las respuestas iluminan y explotan cómo los simples fragmentos de código significan cosas diferentes en diferentes idiomas, por ejemplo, veracidad / falsedad y asociatividad del operador ternario.
Don Hatch, el

Respuestas:

146

2sable / pl , 8 bytes

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

Ambos programas han sido probados localmente con el mismo archivo de 8 bytes, por lo que este es un políglota adecuado.

2sable: truco

Este es el programa en la página de códigos 1252 .

treat“ÐË

Pruébalo en línea!

pl: tratar

Este es el programa en la página de códigos 437 .

treatô╨╦

Pruébalo en línea!

Cómo funciona

2sable: truco

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

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
fuente
15
¡Pero debo admitir que esta respuesta es simplemente ridícula! ¿Que sigue? ¿Una respuesta más corta que las palabras mismas?
BrainStone
45
Esta respuesta es extremadamente impresionante. Es sorprendente que hayas logrado escribir un programa más corto que la longitud de las dos palabras.
DJMcMayhem
1
¿Eh? Esos son 2 programas
FireCubez
1
@FireCubez Es el mismo código, byte por byte. Sin embargo, la representación visual varía con la página de códigos.
Dennis
201

Python / Windows Batch, 25 bytes

print"trick"#||echo.treat

Python interpreta todo después del # como un comentario, mientras que el || es un OR en lote, que dice que como el comando anterior falló, ejecute este.

También me gusta el uso de un quirófano, ya que casi dice "truco o trato" :)

nephi12
fuente
33
TBH He votado esto solo por el comentario sobre el quirófano.
Jmons
77
TBH Nunca esperé que mi primera publicación aquí obtuviera 65 votos a favor :)
nephi12
11
TBH no solo hablamos de votos a favor. No es Quora
S Andrew
3
@SAndrew, como miembro nuevo de esta comunidad, no esperaba hacer una publicación que fuera tan bien recibida tan pronto, y estoy feliz de haber podido contribuir. No estoy tratando de presumir, por favor no me malinterpreten. Estoy muy feliz de ser tan bien recibido como soy tan nuevo. gracias por tu comentario :)
nephi12
2
El consenso de la comunidad @YotamSalmon dice que STDERR se ignora por defecto; solo se considera STDOUT. Intente el comando nuevamente con 2>nul.
Conor O'Brien
154

Espacio en blanco / estrellado, 135 bytes

¡Aquí hay un cielo nocturno despejado en Halloween!

  + + + + + 
    +

* + + * + *

   + *           
     + +        

 + * +   



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

Tenga en cuenta que el espacio en blanco en las líneas vacías puede no conservarse si copia del código anterior

Salidas de espacios en blanco "TRUCO". Pruébalo en línea!
Salidas estrelladas "TRATAR". Pruébalo en línea!

Explicación

Estrellado

Starry ignora todas las pestañas y líneas nuevas, por lo que el código que lee es el siguiente

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

Por cierto, empujar valores es muy costoso en comparación con las operaciones de apilamiento y aritmética en Starry. El código comienza presionando y duplicando 4 y realiza varias operaciones en él y con 2 y 1 presionados más adelante produce todos los valores ASCII requeridos.

Código anotado

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)

Espacio en blanco

Como su nombre indica, Whitespace solo analiza los tres caracteres de espacio en blanco: espacio, tabulación y nueva línea. A diferencia de la estrellada, el espacio en blanco simplemente empuja los valores ASCII de T, R, I, C, y Ky las impresiones de ellos.

Código anotado

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

El entretejido de empujes e impresiones se eligió únicamente por razones estéticas, ya que no afecta el recuento de bytes.

0 '
fuente
12
tan hermoso cielo
lois6b
99
Esta es, con mucho, la mejor respuesta, tan creativa. Estoy sorprendido por el ingenio. y la habilidad ¡Bravo!
nephi12
137

Archivo Linux ELF x86 / DOS .COM, 73 bytes

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

Fuente 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

Esto utiliza el hecho de que el encabezado ELF comienza con 7F 45, que, interpretado como código x86, es un salto.

Las partes relevantes para 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
fuente
44
Bravo, señor. Bravo.
Draconis
99
Mi corazón se salto un latido.
John Keates
muppetlabs.com/~breadbox/software/tiny/teensy.html es una buena lectura para cualquier persona interesada en el truco de superposición de encabezados aquí.
Sparr
44
Esta es una de las mejores respuestas que he visto en este sitio. Codegolf con demasiada frecuencia se convierte en lenguajes esotéricos diseñados específicamente para el golf, en lugar de respuestas inteligentes. Esto es hermoso.
Knetic
Esto es genial.
Gooseman
104

evil / ZOMBIE , 109 bytes

Otra respuesta espeluznante!

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

El ZOMBIEcódigo define un vampirenombre xfcuya única tarea fse activa en la instancia y saldrá una trickvez antes de ser desactivado por stumble. La otra sayllamada es código muerto (¡qué apropiado!) Para ZOMBIE, pero contiene la mayor parte del evilcódigo.

Para evil, el xfnombre es una llamada para saltar al siguiente j, que precede al zuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeawgemido de zombie que crea y produce treat. El siguiente código se ejecuta (letras minúsculas) o se ignora, pero como no whay salida, no se debe generar.

Aaron
fuente
1
@KevinCruijssen gracias, disfruté esta ocasión para entrar en algunos idiomas esotéricos menos conocidos :)
Aaron
Bueno, de los cuatro que has usado, he visto Agony varias veces antes, y recuerdo vagamente haber visto a ZOMBIE una vez. Sin embargo, nunca antes había oído hablar de HashHell o el mal. :)
Kevin Cruijssen
¡la temática de Halloween de esto es impresionante! Nunca había oído hablar de esos dos idiomas
ejfrancis
95

Python / Perl, 28 bytes

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

Explicación

Como []es un ArrayRef en Perl, es verdad, pero es una matriz vacía en Python, por lo tanto, es falso.

Dom Hastings
fuente
77
Del mismo modo, print({}and"trick"or"treat")en Python / Lua.
user200783
1
@ user200783 ¡Eso también tendría el mismo efecto en Perl, ya que {}es un HashRef!
Dom Hastings
2
También es casi idéntico para Python / Ruby, pero requiere un espacio en blanco adicional:print ([]and"trick"or"treat")
Value Ink el
2
¡Quiéralo! Este es un gran comentario sobre lo que la conversión implícita en bool hace a la legibilidad.
Don Hatch, el
¡Esto podría ser un políglota en Lua, Perl y Python si lo fuera print({}and"trick"or"treat")!
ckjbgames
48

PHP / JavaScript, 32 30 bytes

Se muestra tricken PHP y treaten JS.

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

La NaNconstante desconocida se convierte implícitamente en una cadena por PHP, lo que la hace verdadera. Es falso en JS.

Método alternativo, 38 bytes.

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

El operador ternario es derecho-asociativo en JS:

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

Y asociativo a la izquierda en PHP:

                1 ? 0 : 1 ? 0 : 1
 is parsed as:  (1 ? 0 : 1) ? 0 : 1
 which equals:  1
Arnauld
fuente
1
Tienes razón, mi mal
Gareth Parker
alert () es JavaScript en HTML, sin embargo, no JavaScript de la consola.
Peter Ferrie
1
Método alternativo: '\ 0' == "\ 0"? Die (truco): alert ('treat'); `.
Ismael Miguel
3
La depuración de operadores ternarios encadenados en PHP debe ser muy divertida.
Robert Fraser
3
@Robert La depuración de cualquier cosa en PHP es muy divertida.
sampathsris el
39

HTML / HTML + JavaScript, 53 bytes

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

treates el contenido de texto del documento en HTML.
Si JS está habilitado, reemplazará el contenido HTML con trick.

Titus
fuente
3
Solución interesante Me gusta
BrainStone
1
Deberías usar document.write()en su lugar. -8 bytes
darrylyeo
@darrylyeo document.writeno reemplazaría la salida HTML, sino que la agregaría.
Titus
1
Probado en cromo. Funciona completamente Activar y desactivar JavaScript cambia el contenido al actualizar.
Tatarize
@Tatarize: Probado en Firefox 49, Opera 41, Safari 5.0, Chrome 54, Edge 38 en Windows, Firefox 5.3 y Safari 5.0 en iOS, Firefox 49 y Dolphin 11.5 en Android. Solo reemplaza Firefox en Windows; todos los demás anexan.
Tito el
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"/**/);}}

// \ hace que la siguiente línea también sea un comentario en C, pero es un comentario regular de una línea en Java, por lo que puede hacer que C ignore el código destinado a Java y agregando / * en la segunda línea puede hacer un comentario para Java que sea analizado como código por C.

Editar: lo mejoré un poco al reorganizar las líneas y los comentarios.

Edit2: Reorganicé un poco más y lo acorté aún más.

Edit3: agregué correcciones sugeridas por BrainStone para eliminar 5 bytes, gracias :)

Edit4: una nueva línea resultó ser innecesaria, así que la eliminé.

Edit5: cambié printf a pone.

Edit6: agregué una corrección sugerida por Ray Hamel.

I_LIKE_BREAD7
fuente
1
Puede proteger 1 byte cambiando C a C ++ y reemplazándolo #include<stdio.h>por #include<cstdio>. No mucho, pero un byte es un byte. Y, además, eliminar int enfrente de mainwill safe 4 bytes. intestá implícito en C y C ++
BrainStone
Gracias, modifiqué el código de acuerdo con sus sugerencias :)
I_LIKE_BREAD7
1
¡Agradable! Tuve dificultades para encontrar algo para Java, y terminé con Java 7 + Whitespace . Por cierto, puedes jugar al golf un byte más eliminando el espacio en String[]s.
Kevin Cruijssen
29

Jolf + Chaîne, 12 bytes

Como Chaîne no puede aceptar un archivo para cargar con una codificación, supongo que UTF-8. (Si pudiera asumir ISO-8859-7, serían 11 bytes, pero sería injusto).

trick«treat

En Chaîne, «comienza un comentario, y el resto se imprime textualmente. En Jolf, «comienza una cuerda. Afortunadamente, trickno hace nada dañino ( 10; range(input, parseInt(input))básicamente), y treatestá impreso.

Prueba Jolf aquí!

Prueba Chaîne aquí!

Ambos funcionan en mi navegador (firefox, última versión), pero no se puede decir lo mismo de otros navegadores.

Conor O'Brien
fuente
2
Supongo que ser el inventario de muchos idiomas oscuros tiene sus beneficios ...
Conor O'Brien
1
Es bueno ver que nos estamos acercando a las soluciones prácticamente solo por las palabras mismas. Me pregunto si alguien puede reutilizar el tr.
BrainStone
1
@BrainStone Personalmente dudo que trpueda reutilizarse en cualquier campo de golf: es una pequeña información que requeriría al menos un operador para codificar en idiomas de golf, luego un condicional específico de idioma. Probablemente se igualaría a la misma longitud o más. Sin embargo, esa es solo mi conjetura;)
Conor O'Brien
Vamos a averiguar. Pero tengo que estar de acuerdo. ¡Un conteo de bytes de 10 o menos sería una locura!
BrainStone
@BrainStone, 8 bytes: codegolf.stackexchange.com/a/97580/5011
SeanC
27

#hell / Agony , 43 bytes

Tanto en ><>todas partes, ¿qué es esto, un desafío de April Fools? Aquí hay una respuesta con lenguajes apropiadamente temáticos.

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

#helles un subconjunto del LUAcual afortunadamente acepta io.writellamadas de salida. Usamos LUAlos --comentarios para que solo ejecute este fragmento.

Agonyes un Brainfuckderivado, que tiene la particularidad de tener su código y memoria de trabajo en la misma cinta. La primera línea solo imprime 5 caracteres (10 celdas) desde el final del segmento de código, donde codifiqué treatcomo Agonycomandos. LUALa apertura de comentarios --modifica el valor de una celda que no se utiliza.

Aaron
fuente
Tengo que decir que tus temas de Halloween son los mejores en mi humilde opinión. ¡Muy creativo!
BrainStone
@BrainStone ¡Gracias, me divertí mucho haciéndolos!
Aaron
27

Cubix / Hexagony , 31 bytes

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

Engañarlo! ¡Trátelo en línea!

Temática de Halloween ? Tenga en cuenta los hechos horribles sobre estos idiomas y el código:

  1. Si e incluso si no hace nada (solo ponga no-ops), nunca podrá salir del ciclo que está determinado a ejecutarse para siempre ...
  2. Y estar atrapado en medio de un lenguaje de programación 3D y 2D (Oh agonía ...)
  3. Dentro de las dimensiones, gradualmente perderás dónde estás ... dónde estabas ...
  4. Y hay una =v=sonrisa en ti que actúa en el código sin operaciones

Profundicemos en el misterio del protocolo oculto de comunicación de 31 bytes de dimensiones y terror ...

truco

Cuando el código se pliega o se despliega ... Es decir cubified, el diseño se ve así:

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

Y la parte principal es esta parte en el medio:

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

Empuja k,c,i,r,ten la pila y sale oy ;aparece dentro de un bucle delimitado por reflectores y ?que lo guía según el valor en la parte superior de la pila ...

tratar

De repente, el código se transforma de un cubo a un hexágono. (Imagina eso)

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

Y la parte principal es esta parte:

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

Ejecuta lo t;que imprime ty golpea el espejo y gira su dirección hacia el NO a partir de la esquina SE y golpea otro espejo. Esto se ejecuta r;y se ajusta e;_ay lo ]lleva al Puntero de instrucción 1 que comienza en la esquina NE apuntando SE y golpea, /que se refleja horizontalmente en ;ese momento t.

Luego se envuelve a =, ;y @termina el desorden.

Entonces ... ¿qué está _haciendo allí?

¿Por qué está dentro de t e a(las primeras 3 letras en el código)?

Aquí llega el final de la historia.

No hace nada .

¿Suena como el final de una historia de terror?

Sunny Pun
fuente
¡Bien, muy bien! Es difícil crear un políglota a partir de dos lenguajes 2D. Me gusta la historia de terror que la acompaña;)
ETHproductions
No estoy seguro si esta o la respuesta ELF / .COM es más impresionante. ¡Buen trabajo!
val
24

SQL / Javascript, 54 bytes

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

El mismo enfoque que con mi respuesta QB / JS : la primera línea tiene la instrucción SQL, la segunda línea tiene un 'comentario' para SQL y un NOP para JS. Luego, definimos la selectdeclaración de SQL como una función JS válida.

Steenbergh
fuente
3
Esa es una forma muy inteligente de combinar estos dos idiomas. Tener un +1!
ETHproductions
22

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

Esta respuesta requiere que el -Aindicador se muestre en ASCII para Brain-Flak y, por suerte, a Brainfuck no le importa ese indicador, por lo que no afecta el resultado en Brainfuck.

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

Pruébalo en línea!

Pruébalo en línea!

Como funciona esto

La única superposición entre la sintaxis de Brain-Flak y Brainfuck son los personajes <>[]. Para Brain Flak, esto significa principalmente que el programa debe garantizar un número par de conmutadores de pila <>. Y para Brainfuck esto significa que debemos evitar los bucles infinitos causados ​​por el uso de la []mónada.

El código Brain-Flak es el siguiente:

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

Aparte del [<<...>>]bit en el medio y <[<>]<>[<>]<>>al final, este código es bastante normal para el curso en lo que respecta a los programas Brain-Flak. Lo negativo alrededor del cero ( [<...>]) está ahí para crear un bucle para Brainfuck. El interior <...>se usa para mover el Brainfuck a una celda vacía antes de que encuentre lo [][][][]que de otra forma se repetiría infinitamente.

El código Brainfuck es el siguiente:

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

Aparte de los bits antes mencionados, este también es un programa bastante estándar, por lo que le ahorraré los detalles.

Sriotchilism O'Zaic
fuente
Me gusta este: D
Conor O'Brien
99
Hay MUCHOS más de dos idiomas que coinciden con la expresión regular /brainf..k/, por lo que debe usar el mismo formato de encabezado que todos los demás.
mbomb007
13
@ mbomb007 el único otro idioma que pude encontrar que se ajusta a esta expresión regular es brainfork . Convenientemente cuando se ejecuta en brainfork, esto imprime "TRUCO", por lo que dejaré la expresión regular por el momento.
Sriotchilism O'Zaic
For brain-flak this mostly means the program has to ensure an even number of stack switches¿Estás seguro de eso? No debería importar ya que <>es un NOP en brainfuck
DJMcMayhem
@DJMcMayhem tiene que terminar en la misma pila donde ponemos todo; de lo contrario, no imprimirá nada.
Sriotchilism O'Zaic
21

> <> / Pesca , 38 bytes

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

En aras de hacer un ><>/ Fishingpolyglot.

Es mi primer Fishingcódigo después de haber jugado durante mucho tiempo con ><>.
Mi primera impresión: como en la naturaleza, ¡el pescador tiene menos capacidades físicas que su oración, pero lo compensa con su herramienta!

Aquí el código es extremadamente simple: ><>solo ejecutará la primera línea, donde _hay un espejo vertical y no tiene ningún efecto ya que el pez comienza a nadar horizontalmente. Simplemente empuja trickla pila y luego la imprime antes de detenerse.
Para Fishing, las _instrucciones para bajar. El pescador seguirá el mazo que es la segunda línea mientras atrapa a los personajes de la tercera línea. Estos presionarán treatla cinta y luego la imprimirán, deteniéndose cuando llegue al final de la plataforma.

Si se permite la eliminación de errores, puede bajar a 35 bytes con el siguiente código que arrojará un error cuando se ejecute ><>una vez que trickse imprima fuera de la pila:

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

También debe consultar las respuestas de mis idiomas temáticos, #hell / Agony and evil / ZOMBIE !

Aaron
fuente
Aw, quería hacer un pez / políglota de pesca :) Me ganaste. ¡Buena esa!
Emigna
¡+1 para " como en la naturaleza, el pescador tiene menos capacidades físicas que su oración, pero lo compensa con su herramienta! "
Kevin Cruijssen
20

05AB1E / En realidad , 10 bytes

"trick"’®Â

Explicación

05AB1E

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

Pruébalo en línea

Realmente

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

Pruébalo en línea

Emigna
fuente
Sabes, puedo leer claramente trick, pero ¿cómo es ’®Âtratar? ..
Kevin Cruijssen
1
Ahora la gente conoce esta característica. La próxima vez recibiremos preguntas como " hQq3k o bvM; p polyglot " ...
jimmy23013
3
@KevinCruijssen: '®Â se traduce como "tomar la palabra con el índice 3757 del diccionario", que es "tratar".
Emigna
@Emigna Ok ... Entonces, ¿todas las palabras en inglés de 1.1M son accesibles en 05AB1E?
Kevin Cruijssen
1
@KevinCruijssen: No, hay 10k en total (cada uno representable como 2 caracteres). Puedes encontrar la lista completa aquí .
Emigna
16

Haskell / ML estándar , 56 bytes

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

Vista de Haskell

Los puntos y comas permiten múltiples declaraciones en una línea y actúan como saltos de línea, por lo que obtenemos

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

Un programa de Haskell se ejecuta llamando a la mainfunción, por lo que putStr"trick"se ejecuta en la última fila que solo se imprime trick.
Las primeras dos filas se interpretan como declaraciones de función que siguen el patrón <functionName> <argumentName1> ... <argumentNameN> = <functionBody>. Así, en la primera fila de una función llamada funse declara que toma dos argumentos con nombre putStry xy el cuerpo de la función print"treat". Esta es una función de Haskell válida con tipo fun :: t -> t1 -> IO (), lo que significa que toma un argumento de un tipo arbitrario ty un segundo de algún tipo t1y luego devuelve una acción IO. Los tipos ty t1no importan ya que los argumentos no se usan en el cuerpo de la función. El tipo de acción IO resulta de print"treat", que se imprime "treat"en StdOut (observe el en" que, por esoputStren lugar de printse usa en main). Sin embargo, como es solo una declaración de función, en realidad no se imprime nada como funno se llama main.
Lo mismo sucede en la segunda línea val main=();, valse declara una función que toma un argumento arbitrario llamado mainy devuelve la unidad , la tupla vacía (). Su tipo es val :: t -> ()(tanto el valor como el tipo de unidad se denotan con ()).

Pruébalo en Ideone.


Vista ML estándar

ML estándar es un lenguaje principalmente funcional con una sintaxis relacionada, pero no es lo mismo que Haskell. En particular, las declaraciones de función tienen como prefijo la palabra clave funsi toman algún argumento, y la palabra clave valsi no lo hacen. También es posible tener una expresión en el nivel superior (es decir, no dentro de ninguna declaración) que se ejecuta cuando se ejecuta el programa. (En Haskell, escribir 1+2fuera de una declaración arroja un naked expression at top levelerror). Finalmente, el símbolo para probar la igualdad está en =lugar de ==en Haskell. (Hay muchas más diferencias, pero esas son las únicas que importan para este programa).
Entonces, SML ve dos declaraciones

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

seguido de una expresión

main=putStr"trick"

que luego se evalúa. Para determinar si maines igual putStr"trick", ambos lados deben ser evaluados y ambos deben tener el mismo tipo, ya que SML (así como Haskell) está estáticamente tipado. Primero echemos un vistazo al lado derecho: putStrno es una función de biblioteca en SML, pero declaramos una función nombrada putStren la línea fun putStr x=print"treat";: toma un argumento x(esta es la cadena "trick"en nuestro caso) e inmediatamente la olvida nuevamente, ya que no ocurre en el cuerpo de la función. Luego print"treat"se ejecuta el cuerpo que imprime treat(sin encerrar ", el SML printes diferente del de Haskell print).
printtiene el tipo string -> unit, también putStrel tipo a -> unity, por lo tanto, putStr"trick"solo tiene el tipounit . Para estar bien escrito,main debe tener type unit. El valor de la unidad está en SML igual que en Haskell (), por lo que declaramos val main=();y todo está bien escrito.

Pruébalo en codingground.
Nota: La salida en la consola es

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

porque en SML \ NJ el valor y tipo de cada declaración se muestra después de cada declaración. Así primero los tipos de putStry mainse muestran, a continuación, las expresiones consigue evaluado causando treata ser impreso, entonces el valor de la expresión ( truecomo ambos lados de =son ()) está unido a la variable de resultado implícito itque después se visualiza también.

Laikoni
fuente
1
Siempre pensé que fun ... ... =era azúcar sintáctica para val rec ... = fn ... =>. Pero, de nuevo, han pasado décadas desde que usé ML.
Neil
@Neil Tienes razón, el funazúcar sintáctico para la función anónima está vinculado val( recsolo es necesario si la función es recursiva) y, por lo tanto, la formulación "debe tener el prefijo" está mal elegida, editaré la respuesta. En general, el uso funes la mejor práctica, especialmente en el golf de código, ya que es mucho más corto.
Laikoni
15

Ruby / C 64 62 62 51 48 bytes

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

Lo que ve Ruby:

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

El tapmétodo toma un bloque y lo ejecuta una vez. Es un identificador corto para el que podemos crear una #definemacro en C. También nos permite poner un bloque entre llaves en el código compartido, aunque Ruby no permite {}s en la mayoría de los contextos.

Los únicos valores falsos en Ruby son falsey nil. En particular, 0 es verdadero. Por lo tanto, Ruby imprimirá "truco".

Lo que ve C (después del preprocesador):

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

0 es falso en C, entonces C imprimirá "tratar".

2 bytes guardados gracias a daniero.

m-chrzan
fuente
1
Agradable. Puede usar en putslugar de printfguardar dos bytes
daniero
¡Gracias! Estoy tan acostumbrado a usar siempre printfen C, que he olvidado que también tiene una putsfunción.
m-chrzan
Dos ideas: ¿no puedes usar algo más corto tap? ¿Y por qué no te deshiciste de los espacios? p ? "trick":"treat"=>p?"trick":"treat"
BrainStone
tapEn realidad tiene dos propósitos. Es un identificador corto para #defineenganchar, pero también me permite poner las llaves directamente en el código Ruby. {}bloques en Ruby no funcionan como lo hacen en lenguajes C y similares, pero tap lo hace tomar un bloque, y ejecuta una vez.
m-chrzan
Los nombres de métodos en Ruby pueden terminar con un signo de interrogación, por lo que se necesita un espacio después p. ?<character>es un carácter literal, por lo que se necesita un espacio después de ?.
m-chrzan
15

QBasic / JavaScript, 51 44 bytes

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

En QBasic, imprime la segunda línea y no ejecuta la primera línea porque se cree que es un comentario (gracias '). En JS, llama a la función PRINT, que se define en la primera línea, justo después de JS NOP '';.

Steenbergh
fuente
1
Un enfoque muy inteligente!
BrainStone
14

ShapeScript / Foo , 13 bytes

'trick'"treat

Pruébalo en línea! truco | tratar

Cómo funciona

ShapeScript se analiza carácter por carácter. Cuando se golpea EOF sin encontrar una cita de cierre, nunca se coloca nada en la pila. 'trick'empuja la cadena dentro de las comillas, que se imprime en STDOUT implícitamente.

Foo no tiene ningún comando asignado a los personajes 'trick', por lo que esa parte se ignora en silencio. Sin embargo, imprime cualquier cosa entre comillas dobles inmediatamente en STDOUT, incluso si falta la comilla de cierre.

Dennis
fuente
14

Ruby / Perl, 21 bytes

print"trick"%1||treat

Perl

Calcula "trick" % 1cuál es 0 % 1el ||envío treata print, ya que Perl acepta palabras vacías.

Rubí

Formatea la cadena "trick"con el argumento 1, lo que resulta en "trick"que es verdadero, por lo ||que no se procesa.

Dom Hastings
fuente
14

MAT / CJAM , 17 bytes

'TRICK'%];"TREAT"

En MATL esto da salida TRICK . En Cjam que da salida TREAT .

Explicación

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
fuente
Te faltan 3 personajes allí! (COMER)
Destructible Lemon
@DestructibleWatermelon ¡Gracias! Editado
Luis Mendo
¡Ahora te faltan tres en la explicación de MATL!
Destructible Lemon
@DestructibleWatermelon Aww. Gracias de nuevo :-D
Luis Mendo
12

Jalea / pl , 12 bytes

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

Este es el programa que se muestra usando la página de códigos de Jelly .

treatµ
“¡ṾI»

Pruébalo en línea!

Este es el programa que se muestra usando la página de códigos 437 .

treat
⌂■␀║I√

Pruébalo en línea!

Ambos programas han sido probados localmente con el mismo archivo de 12 bytes, por lo que este es un políglota adecuado.

Cómo funciona

En Jelly, cada línea define un enlace (función); la última línea define el enlace principal , que se ejecuta automáticamente cuando se ejecuta el programa. A menos que el código anterior al último 7fbyte (el salto de línea en la página de códigos de Jelly) contenga un error del analizador (que anularía la ejecución inmediatamente), simplemente se ignoran. La última línea, “¡ṾI»simplemente se indexa en el diccionario de Jelly para buscar el truco de palabras , que se imprime implícitamente al final del programa.

No sé mucho sobre pl, pero parece que el intérprete solo busca una línea de código e ignora todo lo que viene después. Como en Perl, las palabras vacías se tratan como cadenas, por lo que treatimprime exactamente eso.

Dennis
fuente
12

Objetivo-C / C, 50 bytes

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

Objective-C consiguió golosinas y golosinas , pero C no y truco de impresiones .

Cómo funciona

No sé mucho sobre Objective-C , pero hace lo que razonablemente esperaríamos en esta situación. La redefinición de putsno afecta la salida ya que nunca llamamos a la función, e mainimprime treat y un salto de línea a STDOUT.

Puede esperar que C haga lo mismo, pero al menos gcc 4.8, gcc 5.3 y clang 3.7 no lo hacen.

Como no necesitamos el printf real (que toma una cadena de formato y argumentos adicionales) y la cadena que se va a imprimir termina con un salto de línea, podemos usar put en su lugar. put es ligeramente más rápido que printf (que tiene que analizar sus argumentos antes de imprimir), por lo que, a menos que redefinamos también la función printf , el compilador optimiza y reemplaza la llamada a printf con una llamada a put . ¡Poco sabe el compilador que llamar con argumento imprimirá truco en su lugar!puts"treat"

No incluir stdio.h es crucial aquí, ya que definir put requeriría usar el mismo tipo que tiene en el archivo de encabezado ( puts(const char*)).

Finalmente, es digno de mención que la llamada a printf en put pasa una cadena sin un salto de línea final. De lo contrario, el compilador también "optimizaría" esa llamada, lo que provocaría una falla de segmentación.

Dennis
fuente
10

Lote / sh, 30 bytes

:;echo Treat;exit
@echo Trick

Explicación. Batch ve la primera línea como una etiqueta, que ignora, y ejecuta la segunda línea, que imprime Trick. El @ suprime el eco predeterminado de Batch del comando a stdout. (Las etiquetas nunca tienen eco). Mientras tanto, sh ve lo siguiente:

:
echo Treat
exit
@echo Trick

La primera línea no hace nada (es un alias de true), la segunda línea imprime Treat y la tercera línea sale del script, por lo que nunca se alcanza el truco @echo.

Neil
fuente
10

sed / Hexagony 32 bytes

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

sed

Pruébalo en línea!

La primera línea imprime trick si hay una cadena vacía al final de la entrada. (sed no hace nada si no hay entrada, pero en este caso se permite una línea en blanco en stdin)

Ejemplo de ejecución:

$ echo | sed -f TrickOrTreat.sed
trick

Hexagonia

Pruébalo en línea!

El primero /redirige el puntero de instrucciones hacia arriba y hacia la izquierda, por lo que envuelve la parte inferior izquierda, omitiendo el texto utilizado para sed. Reutiliza el r del código sed y ejecuta algunos otros sin ningún efecto. El hexágono expandido se ve así:

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

Salida:

treat
Riley
fuente
He visto publicaciones de Hexagony que tienen imágenes de la ruta de ejecución, ¿hay alguna forma fácil de generarlas?
Riley
1
Su código de Hexagony imprime un byte nulo inicial. No estoy seguro si eso cuenta como espacios en blanco para los propósitos de este desafío.
Martin Ender
@MartinEnder Parece que está permitido. Gracias por señalar eso, siempre los extraño por alguna razón ...
Riley
Me las arreglé para arreglar eso mientras también ahorraba unos pocos bytes (a costa de imprimir una mayúscula A, aunque podría hacerlo menos feo cambiando todas las letras a mayúscula): hexagony.tryitonline.net/…
Martin Ender
10

C # / Java

Esto probablemente no califica, ya que no se ejecuta por sí solo, pero el desafío me ha recordado una peculiaridad sobre cómo C # y Java manejan la comparación de cadenas de manera diferente con la que puede divertirse para ofuscar el código.

La siguiente función es válida en C # y Java, pero devolverá un valor diferente ...

public static String TrickOrTreat(){
    String m = "Oct";
    String d = "31";
    return m + d == "Oct31" ? "Trick" : "Treat";
}
Brainfloat
fuente
Curiosidad interesante de hecho.
BrainStone
10

Brain-Flak / Brain-Flueue, 265253 219 165 139 115 113 101 bytes

Incluye +1 para -A

Gracias a Wheat Wizard por ir y venir, jugar unos pocos bytes del código de los demás, conmigo.

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

Brain-Flak: ¡ Pruébalo en línea!
Brain-Flueue: ¡ Pruébelo en línea!

Explicación:
La primera sección enumera los valores que Brain-Flak ve.
Cuando cambia a Brain-Flueue, comienzo a enumerar los valores como Brain-Flueue los ve.

# 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
fuente
Una pequeña competencia
Sriotchilism O'Zaic
9

PowerShell / Foo, 14 bytes

'trick'#"treat

El 'trick'en PowerShell crea una cadena y la deja en la tubería. El #comienza un comentario, por lo que el programa se completa y los implícitos Write-Outputimpresionestrick .

En Foo, (¡Pruébelo en línea!) , 'trick'Se ignora, lo que #hace que el programa se suspenda por 0segundos (ya que no hay nada en el puntero de la matriz), luego "treatcomienza una cadena. Desde que se alcanza EOF, hay un implícito "para cerrar la cadena, y eso se imprime en stdout.

AdmBorkBork
fuente
También funciona en J / Foo.
Conor O'Brien
@ ConorO'Brien ¿La explicación es la misma? Nunca he usado J y no estoy familiarizado con él.
AdmBorkBork
No, esto no funciona en J. #es la función de copia, y solo toma argumentos de izquierda complejos no negativos, no cadenas. El símbolo de comentario esNB.
Adám
@ Adám tienes razón. Olvidé el#
Conor O'Brien
9

PHP / Perl, 28 bytes

print defined&x?trick:treat;

defined&x
da algo verdadero en PHP (no tengo idea de por qué, pero lo hace).
En Perl, comprueba si la función xestá definida, que no lo está.
-> tricken PHP, treaten Perl.

Titus
fuente
@jmathews ¿Has intentado poner un carácter de control de retroceso en tu versión de Windows? ¿Qué hay de CLS?
Titus
`es el verdadero valor de & x o d & x definido, no me preguntes qué d obtienes
Jörg Hülsermann