捣蛋多语


160

既然万圣节快到了,我想我可能会开始一个有趣的小代码高尔夫挑战赛!

挑战非常简单。您必须编写一个输出trick或的程序treat
“转弯?” 你可能会问。好吧,让我解释一下:

您的程序必须执行以下操作:

  • 可以使用两种不同的语言进行编译/运行。相同语言的不同版本不计算在内。
  • 当您使用一种语言运行该程序时,应该输出trick,而另一种语言应该输出treat。大小写无关紧要,并且允许在字符串中填充空格字符(请参见示例)。
  • 这是,因此以字节数最少的解决方案为准。

一些解释:

有效的输出(仅针对不用于运行两种语言的代码的单词。还添加引号来表示输出的开始或结束。请勿在解决方案中包括它们!):

"trick"

"Treat"

"    TReAt"

"
     tRICk          "

无效的输出

"tri ck"

"tr
eat"

"trck"

我很想知道您能想到什么!高尔夫快乐!

我想指出,这是我的第一个挑战,因此,如果您对此问题有任何建议,请以评论形式保留。

排行榜

这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

# Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数保持标题。例如:

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

如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

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

您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中:

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


21
这个元答案指出,如果有充分的理由,可以容忍重复。我认为,这个问题因接近万圣节而受到欢迎,这本身就是一个很好的理由,因此,我将投票决定重新开放。我不介意在万圣节之后关闭它(但是我也不知道这是否是一件好事)。
亚伦

2
@ mbomb007。这是什么重复?
TRiG

3
绝对不是重复的。另一个唯一的相同之处在于,它也是具有指定输出的多语言挑战。
Brian Minton

3
... 3页...我真的认为根据季节变化的当前值,这会引起很多活动。
wizzwizz4 2016年

2
真是个好问题!我喜欢某些答案如何阐明和利用简单的代码片段在不同语言中如何意味着不同的事物,例如三元运算符的真实性/虚假性和关联性。
唐·哈奇

Answers:


145

2sable / pl,8个字节

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

这两个程序均已使用相同的8字节文件在本地进行了测试,因此这是一个正确的多语言版本。

2黑貂:把戏

这是代码页1252中的程序。

treat“ÐË

在线尝试!

pl:请客

这是代码页437中的程序。

treatô╨╦

在线尝试!

这个怎么运作

2黑貂:把戏

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:请客

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
但是我必须承认这个答案很荒谬!下一步是什么?答案比自己说的短吗?
BrainStone

45
这个答案非常令人印象深刻。令人惊讶的是,您编写的程序短于两个单词的长度。
DJMcMayhem

1
??那是2个程序
FireCubez

1
@FireCubez这是相同的代码,每个字节一个字节。视觉表示随代码页而变化。
丹尼斯

200

Python / Windows批处理,25个字节

print"trick"#||echo.treat

#之后的所有内容均被python解释为注释,而|| 是批处理的OR,表示由于前一条命令失败,请执行此命令。

我也喜欢使用OR,因为它几乎读作“不给糖就捣蛋” :)


33
TBH我投票赞成这个只是关于OR的评论。
杰蒙斯16-10-26

7
TBH我从没想到我的第一篇文章会获得65票赞成:)
nephi12

11
TBH不仅要谈论投票。它不是Quora
S Andrew

3
@SAndrew作为该社区的一个全新成员,我没想到会很快发布这么好的帖子,而我很高兴能够做出贡献。我不是在吹牛,请不要误会。我很新,很高兴能收到如此好评。谢谢您的评论:)
nephi12

2
@YotamSalmon社区共识表示默认情况下将忽略STDERR;仅考虑STDOUT。使用再次尝试命令2>nul
Conor O'Brien

153

空格/星空,135个字节

这是万圣节晴朗的夜空!

  + + + + + 
    +

* + + * + *

   + *           
     + +        

 + * +   



 + * +。+。+ + * + + *。。。

请注意,如果您从上述代码中复制,则空行上的空格可能不会保留

空格输出“ TRICK”。在线尝试!
星空输出“ TREAT”。在线尝试!

说明

星空

Starry会忽略所有制表符和换行符,因此它读取的代码如下

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

按字节方式,与Starry中的堆栈和算术运算相比,推入值非常昂贵。该代码从推入和复制4开始,并对进行多次操作,随后在推入2和1时产生所有所需的ASCII值。

带注释的代码

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)

空格

顾名思义,Whitespace仅解析三个空格字符-空格,制表符和换行符。不同的是满天星,空白简单地推动的ASCII值TRIC,和K和打印他们。

带注释的代码

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

推送和打印的交织仅基于美学原因进行选择,因为它不影响字节数。


11
如此美丽的天空
lois6b 16-10-26

8
这是迄今为止最好的答案,非常有创意。我被这个聪明才智震惊了。和技巧。太棒了!
nephi12

137

Linux ELF x86 / DOS .COM文件,73字节

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来源:

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

这利用了ELF标头以7F 45开头的事实,该解释为x86代码,是一个跳转。

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
先生,先生 太棒了
Draconis

9
我的心跳了一下。
约翰·基茨

muppetlabs.com/~breadbox/software/tiny/teensy.html是对此处标题重叠技巧感兴趣的任何人的不错阅读。
Sparr

4
这是我在该网站上见过的最好的答案之一。Codegolf经常会变成专为打高尔夫球而设计的深奥语言,而不是巧妙的答案。这很漂亮。
Knetic '16

这是很棒的东西。
Gooseman

103

邪恶的 / ZOMBIE,109字节

另一个怪异的答案!

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

ZOMBIE代码定义了一个vampirenamed,xf其唯一的任务f在实例化时trick被激活,在被取消激活之前将输出一次stumble。另一个say调用是的死代码(如何使用!)ZOMBIE,但其中包含大部分evil代码。

因为evil,这个xf名字是一个跳到下一个的叫声j,在zuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeaw制作和输出的僵尸an吟之前treat。以下代码可以执行(小写字母)或忽略,但由于w不应产生任何输出。


1
@KevinCruijssen谢谢,我很喜欢这次机会参加一些鲜为人知的深奥语言:)
Aaron

好吧,在您使用过的四个人中,我之前几次见过Agony,我隐约记得曾经见过ZOMBIE。但是,以前从未听说过HashHell或邪恶。:)
Kevin Cruijssen '16

这个万圣节主题令人印象深刻!我什至从未听说过这两种语言
ejfrancis

95

Python / Perl,28个字节

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

说明

因为[]在Perl中是ArrayRef,所以确实如此,但是在Python中它是一个空数组,因此很虚假。


7
同样,print({}and"trick"or"treat")在Python / Lua中。
user200783 '16

1
@ user200783在Perl中也将具有相同的效果,因为{}它是HashRef!
Dom Hastings

2
与Python / Ruby几乎相同,但需要一个额外的空格:print ([]and"trick"or"treat")
Value Ink

2
爱它!这是对隐式转换为可读性所做的出色评论。
唐·哈奇

如果是的话,这可能是Lua,Perl和Python中的多语言print({}and"trick"or"treat")
ckjbgames

48

PHP / JavaScript,32 30字节

trick以PHP和treatJS 显示。

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

NaNPHP 将该未知常量隐式转换为字符串,使其成为事实。在JS中是错误的。

替代方法,38字节

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

在JS中,三元运算符是右关联的:

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

并且在PHP中是左关联的:

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

1
您说得对,我的错
Gareth Parker

alert()是HTML中的JavaScript,而不是控制台中的JavaScript。
彼得·费里16-10-29

1
替代方法:'\ 0'==“ \ 0”?die(trick):alert('treat');`。
伊斯梅尔·米格尔

3
在PHP中调试链式三元运算符必须非常有趣。
罗伯特·弗雷泽

3
@Robert 用PHP 调试任何东西都非常有趣。
sampathsris '16

39

HTML / HTML + JavaScript,53个字节

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

treat是HTML中文档的文本内容。
如果启用了JS,它将用替换HTML内容trick


3
有趣的解决方案。我喜欢
BrainStone

1
您应该document.write()改用。-8个字节
darrylyeo

@darrylyeo document.write不会替换HTML输出,而是附加到它。
泰特斯(Titus)

1
在Chrome中测试。完全可以。打开和关闭javascript会在刷新时更改内容。
2013年

@Tata​​rize:已在Firefox 49,Opera 41,Safari 5.0,Chrome 54,Windows 38 Edge,Windows上的Firefox 5.3和Safari 5.0,iOS上的Firefox 49和Dolphin 11.5中进行了测试。仅Windows上的Firefox可以替换;所有其他附加。
泰特斯

33

C /爪哇7,165个 155 128 123 122 120 103字节

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

// \使下一行在C中也成为注释,但在Java中是常规的一行注释,因此您可以使C忽略针对Java的代码,并通过在第二行中添加/ *来为Java进行注释由C解析为代码。

编辑:我通过重新组织了行和注释对它进行了一些改进。

Edit2:我进行了一些重组,并进一步缩短了重组时间。

Edit3:我添加了BrainStone建议的更正,以删除5个字节,谢谢:)

Edit4:原来不需要一个换行符,所以我删除了它。

Edit5:我将printf更改为puts。

Edit6:我添加了Ray Hamel建议的更正。


1
您可以安全通过改变C到C ++和更换1个字节#include<stdio.h>#include<cstdio>。不多,但一个字节就是一个字节。并另外删除将安全的4个字节的int 开头mainintC和C ++暗示
BrainStone

谢谢,我根据您的建议修改了代码:)
I_LIKE_BREAD7 '16

1
真好!我很难为Java 编写一些东西,最后亲自编写Java 7 + Whitespace。顺便说一句,您可以通过删除处的空格再打一个字节String[]s
凯文·克鲁伊森

29

Jolf +Chaîne,12个字节

由于Chaîne无法接受使用编码上传的文件,因此我假设使用UTF-8。(如果我可以假定为ISO-8859-7,则为11个字节,但这是不公平的。)

trick«treat

在Chaîne中,«开始发表评论,其余内容逐字印刷。在Jolf中,«开始一个字符串。值得庆幸的是,基本上trick没有任何害处10; range(input, parseInt(input)),并且treat可以打印。

在这里尝试Jolf!

在这里尝试Chaîne!

它们都可以在我的浏览器上运行(firefox,最新版本),但是对于其他浏览器却无法做到。


2
我想成为许多晦涩难懂的语言清单是否有好处...
Conor O'Brien

1
很高兴看到我们几乎已经接近了自言自语。我想知道是否有人可以重用tr
BrainStone

1
@BrainStone我个人怀疑tr是否可以在任何高尔夫中重复使用-这是一小部分信息,至少需要操作人员使用高尔夫语言进行编码,然后才使用特定于语言的语言。长度可能相等或更长。但是,那只是我的猜测;)
Conor O'Brien

让我们找出答案。但是我必须同意。字节数为10或更少将是疯狂的!
BrainStone


27

#hell / 痛苦,43字节

><>到处都是这么多,这是愚人节的挑战吗?这是使用适当主题语言的答案。

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

#hell是其中的一个子集,LUA它幸运地接受io.write输出调用。我们使用LUA--注释,使其仅执行此片段。

AgonyBrainfuck衍生产品,具有将其代码和工作内存放在同一磁带上的特殊性。第一行仅从代码段的末尾打印5个字符(10个单元格),在这里我将其编码treatAgony命令。LUA的注释开头--会修改未使用的单元格的值。


我不得不说,万圣节主题是最好的恕我直言。很有创意!
BrainStone

@BrainStone谢谢,让我玩的开心!
亚伦

27

Cubix / Hexagony,31个字节

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

欺骗它! 在线对待它!

万圣节主题?请注意有关这些语言和代码的可怕事实:

  1. 即使并且即使您什么也不做(只是不操作),您永远无法摆脱被确定永远运行的循环...
  2. 并陷入3D和2D编程语言的中间(噢,痛苦...)
  3. 在尺寸内部,您会逐渐迷失自己所在的位置,所在的位置...
  4. 并有=v=其在代码中的无操作的行为向你微笑

让我们深入探讨隐藏的31字节尺寸和恐怖通信协议的奥秘...

特技

当代码折叠或自身展开时...也就是说cubified,布局如下所示:

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

主要部分是中间部分:

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

它推k,c,i,r,t入堆栈并在由反射器界定的循环内o输出和;弹出,并?根据堆栈顶部的值引导您...

对待

突然之间,代码从立方体转换为六角形。(想象一下)

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

主要部分是这一部分:

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

它运行t;并打印t并撞击镜子,然后从SE角开始将其方向转向NW并撞击另一个镜子。它运行r;后回e;_a]它带来的指令指针1的拐角处开始NE SE指向和点击/该水平反映了;然后t

然后包装到=;@结束混乱。

那么... _那里在做什么?

为什么将它放在t e a(代码的前3个字母)中?

故事的结尾到了-

它什么也没做

听起来像恐怖故事的结尾吗?


很好,很好!很难用两种2D语言创建多语种。我喜欢随之
而来

不知道这个答案还是ELF / .COM更令人印象深刻。做得好!
Val

24

SQL / Javascript,54个字节

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

与我的QB / JS回答相同的方法:第一行包含SQL语句,第二行包含针对SQL的“注释”,以及针对JS的NOP。然后,我们将SQL的select语句定义为有效的JS函数。


3
这是结合这两种语言的非常聪明的方法。+1!
ETHproductions

22

/Brainf..k/,143 + 3 = 146个字节

这个答案要求该-A标志以Brain-Flak的ASCII输出,幸运的是Brainfuck并不关心该标志,因此它不会影响Brainfuck的输出。

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

在线尝试!

在线尝试!

如何运作

Brain-Flak和Brainfuck的语法之间唯一的重叠是字符<>[]。对于脑筋急转弯,这主要意味着程序必须确保偶数个堆栈开关<>。对于Brainfuck,这意味着我们需要避免由于使用[]monad 导致的无限循环。

Brain-Flak代码如下:

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

除了[<<...>>]中间和<[<>]<>[<>]<>>结尾处的代码外,就Brain-Flak程序而言,此代码对于该课程而言相当不错。零附近的负号([<...>])会为Brainfuck创建一个循环。内部组件<...>用于将Brainfuck移到一个空单元格,然后再遇到[][][][]无限循环的。

Brainfuck代码如下:

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

除了上述内容之外,这也是一个非常标准的程序,因此我将为您省去细节。


我喜欢这个:D
Conor O'Brien

9
很多不止两种与regex匹配的语言/brainf..k/,因此您应该使用与其他所有人相同的标头格式。
mbomb007 '16

13
@ mbomb007我能找到的唯一适合此正则表达式的其他语言是brainfork。方便地在脑叉中运行时会打印“ TRICK”,所以我暂时不使用正则表达式。
精神分裂症O'Zaic,2016年

For brain-flak this mostly means the program has to ensure an even number of stack switches您确定吗?没关系,因为<>
脑残中

@DJMcMayhem它必须在我们放置所有内容的同一堆栈上结束,否则它将不会打印任何内容。
精神主义奥扎伊克,2016年

21

> <> / 钓鱼,38个字节

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

为了制作一个><>/ Fishing多种语言。

这是我Fishing与玩了很长时间后的第一段代码><>
我的第一印象:像大自然一样,渔夫的身体能力比祈祷还差,但用工具弥补了!

这里的代码非常简单:><>只执行第一行,这_是一个垂直镜像,并且由于鱼开始水平游动而无效。它只是推trick入堆栈,然后在停止打印之前将其打印。
对于Fishing_指示下降。渔夫将跟随第二行的甲板,同时抓住第三行的角色。这些将推动treat磁带,然后进行打印,直到到达走纸架末端时停止。

如果允许错误输出,则可以使用以下代码减少到35个字节,><>一旦将它们trick从堆栈中打印出来,则在运行时将引发错误:

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

您还应该检查我主题语言的答案,#hell /痛苦邪恶/ ZOMBIE


噢,我想做个钓鱼/钓鱼杂技:)你击败了我。好东西!
Emigna

+1表示“
自然人

20

05AB1E / 实际上,10个字节

"trick"’®Â

说明

05AB1E

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

在线尝试

其实

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

在线尝试


您知道吗,我可以清楚地阅读trick,但是请问如何’®Â??
Kevin Cruijssen

1
现在人们已经知道此功能。下次,我们将收到诸如“ hQq3k或bvM; p polyglot ”之类的问题...
jimmy23013

3
@KevinCruijssen:'®Â被翻译为“从字典中获取索引为3757的单词”,即“治疗”。
Emigna

@Emigna好的...因此,在〜05AB1E中可以访问所有〜1.1M英语单词?
凯文·克鲁伊森

1
@KevinCruijssen:不,总共有1万(每个代表2个字符)。您可以在此处找到整个列表。
Emigna

16

Haskell / 标准ML,56个字节

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

哈斯克尔视图

分号允许一行中有多个声明,并且像换行符一样工作,因此我们得到

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

通过调用main函数可以执行Haskell程序,因此在最后一行putStr"trick"执行print trick
前两行被解释为模式后面的函数声明<functionName> <argumentName1> ... <argumentNameN> = <functionBody>。因此,在第一行fun中声明了一个名为的函数,该函数带有两个名为putStr和的参数x以及一个函数体print"treat"。这是一个有效的类型fun :: t -> t1 -> IO ()为Haskell的函数,表示该函数接受任意类型的参数,然后再t接受某个类型t1的第二个参数,然后返回IO操作。类型tt1无关紧要,因为参数没有在函数体中使用。IO-action类型的产生源于print"treat",它会打印"treat"到StdOut(请注意",这就是为什么putStr代替的print是用来在main)。但是,由于它只是一个函数声明,因此实际上fun不会打印任何内容,因为in中没有调用main
在第二行中发生了同样的事情,声明val main=();了一个函数,该函数val接受一个命名为任意参数的函数,main并返回unit,空tuple ()。它的类型是val :: t -> ()(值和单位类型都用表示())。

在Ideone上尝试。


标准ML视图

标准ML是一种主要的功能语言,其语法与Haskell相关但不相同。特别是,如果函数声明带有fun任何参数,则它们以关键字为前缀,否则为关键字val。也可以在运行程序时在顶层(意味着不在任何声明中)有一个表达式。(在Haskell中,1+2在声明外部编写会引发naked expression at top level-error)。最后,用于测试相等性的符号=代替了==Haskell。(还有许多不同之处,但是对于该程序而言,唯一的区别是。)
因此SML看到两个声明

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

跟一个表达式

main=putStr"trick"

然后进行评估。要确定是否main等于putStr"trick",必须对双方进行评估,并且双方都必须具有相同的类型,因为SML(以及Haskell)是静态类型的。首先让我们看一下右侧:putStr不是SML中的库函数,但是我们putStr在行中声明了一个函数fun putStr x=print"treat";-它接受一个参数x"trick"在本例中为字符串),并立即再次忘记它,因为它在功能主体中不会发生。然后print"treat"执行打印的主体treat(不包含",SML print与Haskell的主体不同print)。
print具有类型string -> unit,因此putStr具有类型a -> unit,因此putStr"trick"具有类型unit。为了好打字,也main必须有打字unit。SML中的unit值与Haskell中的unit值相同(),因此我们进行声明,val main=();并且所有类型都是正确的。

在codingground上尝试一下。
注意:控制台中的输出为

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

因为在SML \ NJ中,每个语句的值和类型都在每个声明之后显示。因此,首先显示putStr和的类型main,然后对表达式进行求值treat以使其被打印,然后将该表达式的值(true作为=are的两面())绑定到隐式结果变量it,该隐式结果变量也将被显示。


1
我一直以为fun ... ... =是语法糖val rec ... = fn ... =>。但是话又说回来,自从我使用ML已有数十年了。
尼尔

@Neil没错,fun是绑定了匿名函数的语法糖valrec仅在函数是递归的情况下才需要),因此错误地选择了“必须加前缀”,我将编辑答案。通常,使用fun是最佳实践,尤其是在代码高尔夫中,因为它要短得多。
Laikoni '16

15

Ruby / C, 64 62 51 48字节

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

Ruby看到了什么:

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

tap方法采用一个块并执行一次。这是一个简短的标识符,我们可以#define在C中为其创建宏。它也允许我们在共享代码中放置一个用大括号括起来的块,即使Ruby {}在大多数情况下都不允许s。

Ruby中唯一虚假的值是falsenil。特别是0是真实的。因此,Ruby将打印“技巧”。

C看到的(在预处理器之后):

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

C中的0为假,因此C将打印“处理”。

多亏了daniero,节省了2个字节。


1
真好 您可以使用puts而不是printf保存两个字节
daniero

谢谢!我很习惯只printf在C语言中使用,我忘记了它也有一个puts功能。
m-chrzan

两个想法:您不能使用更短的东西tap吗?您为什么不摆脱空间呢?p ? "trick":"treat"=>p?"trick":"treat"
BrainStone

tap实际上有两个目的。它是用于#define锁定的简短标识符,但是它也允许我将花括号直接放在Ruby代码中。{}Ruby中的代码块不能像在C语言和类似语言中那样工作,但是tap 占用一个代码块并执行一次。
m-chrzan

Ruby中的方法名称可以以问号结尾,因此在之后需要一个空格p?<character>是字符文字,因此在?。之后需要一个空格。
m-chrzan '16

15

QBasic / JavaScript,51 44字节

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

在QBasic中,它打印第二行而不执行第一行,因为它被认为是注释(谢谢')。在JS中,它调用函数PRINT,该函数在JS NOP之后的第一行中定义'';


1
一个非常聪明的方法!
BrainStone

14

ShapeScript / Foo,13个字节

'trick'"treat

在线尝试! | 对待

这个怎么运作

ShapeScript是逐字符解析的。如果在没有遇到结束引号的情况下命中EOF,则不会将任何内容压入堆栈。'trick'确实将字符串压入引号内,该引号被隐式打印到STDOUT中。

Foo没有将任何命令分配给字符is 'trick',因此该部分被静默忽略。但是,即使缺少右引号,它也会立即在双引号之间打印任何内容。


14

Ruby / Perl,21个字节

print"trick"%1||treat

佩尔

计算"trick" % 10 % 1这样的||发送treatprint代替,因为Perl接受裸字。

红宝石

"trick"使用参数格式化字符串1,结果"trick"是真实的,因此||不会进行处理。


14

MATL / CJam,17个字节

'TRICK'%];"TREAT"

在MATL中,此输出 TRICK。在CJam中它输出 TREAT

说明

玛特

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

贾姆

'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

您在那里缺少3个字符!(EAT)
破坏的柠檬

@DestructibleWatermelon谢谢!编辑
路易斯·门多

现在您在MATL说明中缺少三个!
破坏的柠檬

@DestructibleWatermelon Aww。再次感谢:-D
路易斯·门多

12

果冻 / pl,12个字节

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

这是使用Jelly的代码页显示的程序

treatµ
“¡ṾI»

在线尝试!

这是使用代码页437显示的程序。

treat
⌂■␀║I√

在线尝试!

这两个程序都已在本地使用相同的12字节文件进行了测试,因此这是一个正确的多语言版本。

这个怎么运作

在Jelly中,每一行都定义一个链接(函数);最后一行定义了 main链接,该链接在程序运行时自动执行。除非最后一个7f字节之前的代码(Jelly代码页中的换行符)包含解析器错误(将立即中止执行)​​,否则将忽略它们。最后一行“¡ṾI»只是索引到Jelly的字典中,以获取把戏,该把戏将隐式打印在程序末尾。

我对pl知之甚少,但似乎解释器仅获取一行代码,而忽略其后的所有内容。与Perl中一样,裸词被视为字符串,因此treat打印出来。


12

Objective-C / C,50个字节

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

Objective-C买了糖果和版画,但是C没有得到并印刷品

这个怎么运作

我对Objective-C知之甚少,但是它可以满足我们在这种情况下的合理期望。重新定义puts不会影响输出,因为我们从不调用该函数并main打印将对待和换行到STDOUT。

您可能会期望 C做同样的事情,但至少gcc 4.8,gcc 5.3和clang 3.7不会。

由于我们不需要实际的 printf(它需要一个格式字符串和其他参数),并且要打印的字符串以换行符结尾,因此可以使用puts代替。puts的速度比printf稍快(后者必须在打印之前分析其参数),因此,除非我们也重新定义函数printf,否则编译器会优化该操作,并将printf的调用替换为对puts的调用。编译器几乎不知道puts使用参数调用"treat"将打印技巧

这里不包括stdio.h至关重要,因为定义puts要求使用与头文件(puts(const char*))中相同的类型。

最后,值得注意的是,该呼叫的printf传递一个字符串没有尾随换行。否则,编译器也会“优化”该调用,从而导致分段错误。


10

批处理/ sh,30个字节

:;echo Treat;exit
@echo Trick

说明。批处理将第一行视为标签,它会忽略它,并执行第二行,此行将显示Trick。@禁止Batch将命令默认回显到stdout。(标签永不回显。)同时,sh看到以下内容:

:
echo Treat
exit
@echo Trick

第一行不执行任何操作(这是的别名true),第二行显示“请客”,第三行退出脚本,因此从未到达@echo Trick。


10

sed / Hexagony 32字节

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

sed

在线尝试!

第一行打印 trick如果在输入末尾有一个空字符串,则。(如果没有输入,sed不会执行任何操作,但是在这种情况下,stdin上允许使用空行)

示例运行:

$ echo | sed -f TrickOrTreat.sed
trick

六角形

在线尝试!

第一个/将指令指针向上和向左重定向,因此它包裹了左下角,跳过了用于sed的文本。它重用了sed代码中的r,并运行了其他一些代码,但没有任何效果。扩展的十六进制如下所示:

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

输出:

treat

我已经看到了包含执行路径图片的Hexagony帖子,是否容易生成这些帖子?
莱利2016年


1
您的Hexagony代码会打印前导空字节。不知道在此挑战中是否将其视为空格。
Martin Ender

@MartinEnder听起来像是允许的。感谢您指出这一点,由于某些原因,我总是很想念这些
莱利(Riley)

我设法解决这个问题,同时还节省了几个字节(在印刷上的情况下的成本A,但你可以让更少的丑陋通过改变所有字母为大写):hexagony.tryitonline.net/...
马丁安德

10

C#/ Java

这可能不符合要求,因为它不能单独运行,但是挑战使我想起了一个奇怪的问题,即C#和Java如何以不同方式处理字符串比较,您可以在代码混淆方面获得一些乐趣。

以下函数在C#和Java中有效,但将返回不同的值...

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

确实很有趣。
BrainStone

10

脑高射炮 /脑Flueue,265 253 219 165 139个115 113 101字节

包括+1的 -A

多亏了Wheat Wizard的来回操作,和我一起在彼此的代码上打了几个字节。

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

Brain-Flak:在线尝试!
Brain-Flouue:在线试用!

说明:
第一部分列出了Brain-Flak看到的值。
当它切换到Brain-Flueue时,我开始列出Brain-Flueue看到的值。

# 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个字节

'trick'#"treat

'trick'PowerShell中的in会创建一个字符串,并将其保留在管道中。在#开始一个注释,让程序完成与隐性Write-Output打印trick

在Foo (在线尝试!)中,将'trick'忽略,#导致程序休眠0数秒钟(因为数组指针处没有任何内容),然后"treat启动字符串。由于已到达EOF,因此有一个隐式"关闭字符串,并将其打印到stdout。


也适用于J / Foo。
科纳·奥布莱恩

@ ConorO'Brien的解释相同吗?我从未使用过J,但我对此并不熟悉。
AdmBorkBork '16

不,这在J中不起作用。#是复制函数,它只接受非负的复杂左参数,而不是字符串。注释符号是NB.
亚当

@Adám,对。忘记了#
Conor O'Brien

9

PHP / Perl,28个字节

print defined&x?trick:treat;

defined&x
在PHP中给出了一些真实的信息(不知道为什么,但是确实如此)。
在Perl中,它检查是否x定义了函数-否。
-> trick在PHP中,treat在Perl中。


@jmathews您是否尝试过在Windows版本中添加退格控制字符?那CLS
泰特斯(Titus)

`是定义&X或的truthy值d&X问我不是其中详细你
约尔格Hülsermann
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.