トリックオアトリートポリグロット


161

ハロウィーンが近づいているので、私は楽しい小さなコードのゴルフチャレンジを始めるかもしれないと思いました!

課題は非常に簡単です。trickまたはを出力するプログラムを作成する必要がありtreatます。
「ひねり?」あなたが尋ねることができます。よく説明させてください:

あなたのプログラムは次のことをしなければなりません:

  • 2つの異なる言語でコンパイル/実行可能。同じ言語の異なるバージョンはカウントされません。
  • 1つの言語でプログラムを実行するtrickと、出力され、もう1つの言語で出力されますtreat。大文字と小文字は区別されず、文字列に空白文字を埋め込むことは許可されています(例を参照)。
  • これはであるため、バイト数が最も少ないソリューションが優先されます。

いくつかの説明:

有効な出力(2つの言語でコードを実行するためではなく、出力の開始または終了を示す引用符を追加します。これらをソリューションに含めないでください!):

"trick"

"Treat"

"    TReAt"

"
     tRICk          "

無効な出力

"tri ck"

"tr
eat"

"trck"

私はあなたが思い付くことができるものを見て興味があります!ハッピーゴルフ!

これが私の最初の挑戦であることに注意したいので、この質問に関する提案があればコメントの形で残してください。

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

# Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、リーダーボードスニペットに表示することもできます。

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


21
このメタアンサーは、正当な理由があれば、ほぼ重複したものは許容できると述べています。ハロウィーンに近いことからこの質問が受けた人気はそれ自体が正当な理由だと思うので、再開することに投票します。ハロウィーンの後にそれを閉じることを気にしません(しかし、これが良いことかどうかもわかりません)。
アーロン

2
@ mbomb007。これは何の複製ですか?
TRiG

3
間違いなく重複ではありません。他のものと同じ唯一のことは、指定された出力を持つ多言語チャレンジでもあるということです。
ブライアンミントン

3
... 3ページ... これは、季節変動の現在の値に基づいて多くのアクティビティを得ていると本当に思います。
wizzwizz4

2
なんて素晴らしい質問でしょう!単純なコードの断片がさまざまな言語で異なることを意味する方法(たとえば、三項演算子の真実性/虚偽および結合性)を明らかにし、活用するいくつかの答えが大好きです。
ドンハッチ

回答:


146

2sable / pl、8バイト

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

両方のプログラムは同じ8バイトファイルでローカルにテストされているため、これは適切な多言語です。

2sable:トリック

これは、コードページ1252のプログラムです。

treat“ÐË

オンラインでお試しください!

pl:扱う

これは、コードページ437のプログラムです。

treatô╨╦

オンラインでお試しください!

使い方

2sable:トリック

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
この答えは非常に印象的です。2語の長さよりも短いプログラムを作成できたことは驚くべきことです。
DJMcMayhem

1
え?これらは、2つのプログラムです
FireCubez

1
@FireCubez同じコード、バイトごとのバイトです。ただし、視覚的な表現はコードページによって異なります。
デニス

201

Python / Windows Batch、25バイト

print"trick"#||echo.treat

#の後のすべてはpythonによるコメントとして解釈されますが、|| 前のコマンドが失敗したため、このコマンドを実行するという、バッチのORです。

私はまた、「トリックオアトリート」のように見えるORの使用が好きです。


33
TBH私は手術室についてのコメントのためだけにこれを支持しました。
Jmons

7
TBH最初の投稿で65の賛成票が得られるとは思っていませんでした:)
nephi12

11
TBHでは、賛成票だけで話すことはできません。そのないQuoraの
Sアンドリュー

3
@SAndrewはこのコミュニティのまったく新しいメンバーであるため、すぐにこれほどの好評を得られる投稿を期待していませんでした。貢献できたことを嬉しく思います。私は自慢しようとはしていません、誤解しないでください。私はとても新しいので、とてもうれしいです。コメントありがとうございます:)
nephi12

2
@YotamSalmonコミュニティのコンセンサスによれば、STDERRはデフォルトでは無視されます。STDOUTのみが考慮されます。でコマンドを再試行してください2>nul
コナーオブライエン

154

空白/星空、135バイト

ハロウィーンの晴れた夜空へ!

  + + + + + 
    +

* + + * + *

   + *           
     + +        

 + * +   



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

上記のコードからコピーした場合、空行の空白は保持されない場合があることに注意してください

空白は「TRICK」を出力します。オンラインでお試しください!
Starryは「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は、スペース、タブ、改行の3つの空白文字のみを解析します。星空とは異なり、空白は単にの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>

プッシュとプリントの織り合わせは、バイト数に影響を与えないため、審美的な理由のみに基づいて選択されました。


12
とても美しい空
lois6b

9
これは最高の答えであるため、創造的です。創意工夫にショックを受けました。そしてスキル。ブラボー!
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
ブラボー先生 ブラボー。
ドラコニス

9
心臓が鼓動しました。
ジョンキーツ

muppetlabs.com/~breadbox/software/tiny/teensy.htmlは、ここでのヘッダーオーバーラップトリックに興味のある人には朗読です。
スパー

4
これは私がこのサイトで見た中で最高の答えの一つです。Codegolfは、巧妙な答えではなく、ゴルフ専用の難解な言語になりがちです。美しいです。
クネティック

これは素晴らしいものです。
グースマン

104

evil / ZOMBIE、109バイト

別の不気味な答え!

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

ZOMBIEコードは定義vampireという名前xfを持つ唯一のタスクfインスタンス化と意思出力で活性化されるtrickことによって不活性化される前に、一度にstumble。もう1つのsay呼び出しは、のデッドコード(どれだけ適切か!)ですがZOMBIE、ほとんどのevilコードが含まれています。

以下の場合evilxf名前は次へとジャンプするの呼び出しでj先行し、zuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeawその工芸品や出力ゾンビのうめき声をtreat。次のコードは実行される(小文字)か無視されますが、w出力は生成されないためです。


1
@KevinCruijssenありがとう、あまり知られていない難解な言語に入るためにこの機会を楽しんだ:)
アーロン

まあ、あなたが使った4つから、私は数回前にAgonyを見たことがあります、そして、私は漠然と一度ZOMBIEを見たことを覚えています。ただし、HashHellや悪のことは聞いたことがない。:)
ケビンクルーイッセン

これのハロウィーンのテーマは印象的です!これら2つの言語のことすら聞いたことがありませんでした
-ejfrancis

95

Python / Perl、28バイト

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

説明

以来[]Perlで配列リファレンスである、それはtruthyだが、それゆえfalsy、Pythonで空の配列です。


7
同様にprint({}and"trick"or"treat")、Python / Luaで。
user200783

1
@ user200783それはHashRefなので、Perlでも同じ効果{}があります!
ドムヘイスティングス

2
また、Pythonの/ Ruby用とほとんど同じですが、余分な空白が必要です:print ([]and"trick"or"treat")
バリューインク

2
大好きです!これは、暗黙的なブールへの変換が可読性に与える影響についての優れた解説です。
ドンハッチ

これは、Lua、Perl、Pythonの多言語かもしれませんprint({}and"trick"or"treat")
ckjbgames

48

PHP / JavaScript、32 30バイト

trickPHPおよびtreatJSで表示します。

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

不明なNaN定数は、PHPによって暗黙的に文字列に変換され、真実になります。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
あなたは正しい、私の悪い
ガレスパーカー

alert()はHTMLのJavaScriptですが、コンソールからのJavaScriptではありません。
ピーターフェリー

1
別の方法: '\ 0' == "\ 0"?die(trick):alert( 'treat'); `。
イスマエルミゲル

3
PHPでの連鎖三項演算子のデバッグは、とても楽しいものでなければなりません。
ロバートフレイザー

3
@Robertデバッグ PHPではとても楽しいです。
sampathsris

39

HTML / HTML + JavaScript、53バイト

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

treatHTMLでのドキュメントのテキストコンテンツです。
JSが有効になっている場合、HTMLコンテンツがに置き換えられtrickます。


3
興味深いソリューション。私はそれが好きです
-BrainStone

1
document.write()代わりに使用する必要があります。-8バイト
-darrylyeo

@darrylyeo document.writeは、HTML出力を置き換えずに追加します。
タイタス

1
Chromeでテスト済み。完全に動作します。JavaScriptをオンまたはオフにすると、更新時にコンテンツが変更されます。
16年

@Tata​​rize:Firefox 49、Opera 41、Safari 5.0、Chrome 54、Windows上のEdge 38、iOS上のFirefox 5.3およびSafari 5.0、Android上のFirefox 49およびDolphin 11.5でテスト済み。Windows上のFirefoxのみが置き換えられます。その他はすべて追加します。
タイタス

33

C / Javaの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の通常の1行のコメントです。したがって、CでJava向けのコードを無視し、2行目に/ *を追加することにより、 Cによってコードとして解析されます。

編集:行とコメントを再編成して、少し改善しました。

編集2:私はさらにいくつかの再編成を行い、それをさらに短縮しました。

Edit3:BrainStoneが提案した修正を追加して5バイトを削除しました、ありがとう:)

Edit4:1つの改行が不要であることが判明したため、削除しました。

Edit5:printfをputsに変更しました。

Edit6:レイハメルが提案した修正を追加しました。


1
あなたは缶1バイトC ++にCを変更して交換することにより、安全#include<stdio.h>#include<cstdio>。それほど多くはありませんが、バイトはバイトです。さらに、int infrontを削除するmainと、4バイトが安全になります。intCおよびC ++によって暗示されています
BrainStone

おかげで、私はあなたの提案に従ってコードを変更しました:)
I_LIKE_BREAD7

1
いいね!私はJavaのために何かを思いつくのに苦労し、自分Java 7 + Whitespaceになりました。ところで、でスペースを削除することで、もう1バイトゴルフできますString[]s
ケビンCruijssen 16年

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
私は多くの無名の言語の在庫は、それが利点だが...という仮定
コナー・オブライエン

1
私たちがソロフーションに近づいているのは、彼ら自身の言葉だけで構成されていることを見てうれしいです。誰もが再利用できるのだろうかtr
BrainStone

1
@BrainStone私は個人的にtrはどのゴルフでも再利用できることを疑っています。これは少なくともオペレーターがゴルフ言語でエンコードし、次に言語固有の条件付きで使用する小さな情報です。おそらく、同じ長さかそれ以上の長さになります。しかし、それは私の推測です;)
コナーオブライエン

確認してみましょう。しかし、私は同意しなければなりません。10以下のバイトカウントは非常識です!
BrainStone

@ BrainStone、8バイト:codegolf.stackexchange.com/a/97580/5011
SeanC

27

#hell / 苦悩、43バイト

そんなに><>どこでも、これ、エイプリルフールの課題は何ですか?適切にテーマ化された言語での回答を次に示します。

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

#hellLUA幸いなことに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プログラミング言語の真っin中に立ち往生している(ああ苦ago ...)
  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し、]SEとヒットを指しコーナーNEから始まる命令ポインタ1にそれをもたらす/に水平に反映され;、その後t

そして、それはラップに=;と、@混乱終了します。

それで...そこで何をし_ているのですか?

なぜそれが内部にあるのかt e a(コードの最初の3文字)?

物語の終わりはここにあります-

何もしませ

ホラーストーリーの終わりのように聞こえますか?


いいねいいね 2つの2D言語からポリグロットを作成することは困難です。私はそれに伴うホラーストーリーが好きです;)
ETHproductions

これまたはELF / .COMの回答がより印象的かどうかはわかりません。よくやった!
val

24

SQL / Javascript、54バイト

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

私のQB / JSの答えと同じアプローチ:最初の行にはSQLステートメントがあり、2番目の行にはSQLの「コメント」とJSのNOPがあります。次に、SQLのselectステートメントを有効なJS関数として定義します。


3
これは、これら2つの言語を組み合わせる非常にスマートな方法です。+1を持っている!
ETHproductions

22

/Brainf..k/、143 + 3 = 146バイト

この回答では、-ABrain-Flak のフラグをASCIIで出力する必要がありますが、幸いなことにBrainfuckはそのフラグを気にしないので、Brainfuckの出力には影響しません。

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

オンラインでお試しください!

オンラインでお試しください!

仕組み

Brain-FlakとBrainfuckの構文の唯一の重複部分は文字<>[]です。Brain-flakの場合、これは主に、プログラムが偶数のスタックスイッチを確保する必要があることを意味します<>。そしてBrainfuckの場合、これは[]モナドの使用によって引き起こされる無限ループを回避する必要があることを意味します。

Brain-Flakコードは次のとおりです。

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

[<<...>>]真ん中のビットと<[<>]<>[<>]<>>最後のビットは別として、このコードはBrain-Flakプログラムに関する限り、コースにとってかなりパーです。ゼロ付近のマイナス([<...>])は、Brainfuckのループを作成するためにあります。インナー<...>は、Brainfuckが発生する前に空のセルに移動するために使用されます[][][][]それ以外の場合に無限ループます。

Brainfuckコードは次のとおりです。

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

前述のビットは別として、これもかなり標準的なプログラムなので、詳細は省きます。


D:私はこの1つが好き
コナー・オブライエン

9
正規表現に一致するLOTが3つ以上/brainf..k/あるため、他のユーザーと同じヘッダー形式を使用する必要があります。
mbomb007

13
@ mbomb007この正規表現に適合する他の言語はBrainforkだけです。便利なことに、brainforkで実行すると「TRICK」と表示されるため、当面は正規表現をそのままにしておきます。
スリオチリズムO'Zaic 16年

For brain-flak this mostly means the program has to ensure an even number of stack switches確かですか?<>BrainfuckのNOPであるため、それは問題ではありません
DJMcMayhem

@DJMcMayhemそれはすべてを置く同じスタックで終了する必要があります。そうしないと何も出力されません。
Sriotchilism O'Zaic

21

> <> / 釣り、38バイト

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

><>/ Fishingポリグロットを作成するため。

これFishingは、で長い間遊んだ後の最初のコード><>です。
私の最初の印象:自然のように、漁師は祈るよりも身体的能力が少ないが、道具でそれを補っている!

ここでのコードは非常に単純です。><>最初の行のみを実行します。ここで_は、垂直ミラーであり、魚が水平に泳ぎ始めるので効果はありません。trickスタックをプッシュし、停止する前に印刷します。
の場合Fishing_ダウンするように指示します。漁師は3行目のキャラクターを捕まえながら、2行目のデッキをたどります。これらはプッシュしますtreatテープてから印刷し、デッキの終わりに達すると停止します。

アウトerroringが許可されている場合は、として実行すると、エラーがスローされます次のコードで35のバイトまで行くことができ><>たら、trickスタックから出力されます。

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

テーマ言語の回答#hell / Agonyも確認してください and evil / ZOMBIE


ああ、私は魚/釣りのポリグロットを作りたかった:)あなたはそれに私を打ち負かした。良いですね!
エミグナ

+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が、どのようにされた’®Â治療..?
ケビンCruijssen

1
今、人々はこの機能を知っています。次回は、「hQq3kまたはbvM; pポリグロット」などの質問があります
...-jimmy23013

3
@KevinCruijssen: '®Âは「辞書から3757のインデックスを持つ単語を取得する」、つまり「扱う」と翻訳されます。
エミグナ

@Emigna Ok ...では、05AB1Eで約110万のすべての英語の単語にアクセスできますか?
ケビンCruijssen 16年

1
@KevinCruijssen:いいえ、合計で10k個あります(それぞれ2文字で表現可能)。リスト全体をここで見つけることができます。
エミグナ

16

Haskell / 標準ML、56バイト

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

ハスケルビュー

セミコロンは1行で複数の宣言を許可し、改行のように動作するため、

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

Haskellプログラムはmain関数を呼び出すことで実行されるため、最後の行putStr"trick"で実行され、印刷されtrickます。
最初の2行は、パターンに続く関数宣言として解釈されます<functionName> <argumentName1> ... <argumentNameN> = <functionBody>。だから、最初の行で指定された関数は、fun2つの名前付き引数をとると宣言されるputStrx、関数ボディをprint"treat"。これはtype fun :: t -> t1 -> IO ()を持つ有効なHaskell関数であり、任意の型の引数を取り、ある型tの2番目の引数を取りt1、IOアクションを返します。引数は関数本体で使用されないため、タイプtt1問題はありません。IOアクションタイプはから生じprint"treat"、印刷"treat" STDOUTには(気づき"、それが理由ですputStrの代わりにprintで使用されます)です。 main)。ただし、これは関数宣言にすぎfunないため、で呼び出されないため、実際には何も出力されませんmain
2行目でも同じことが発生します。名前付きの任意の引数を取り、unit、空のタプルを返すval main=();関数valが宣言されます。タイプは(値と単位のタイプの両方がmain()val :: t -> ()()

Ideoneでお試しください。


標準MLビュー

標準MLは、Haskellに関連する構文を備えた主に機能的な言語ですが、Haskellとは異なります。特に、関数の宣言にはfun、引数をとる場合はキーワードが、引数をとらない場合はキーワードが接頭辞として付けvalられます。また、プログラムの実行時に実行される式を最上位レベル(宣言内にないことを意味する)にすることもできます。(Haskellでは1+2、宣言の外に書くとnaked expression at top level-errorがスローされます)。最後に、平等をテストするための記号はHaskell ===はありません。(さらに多くの違いがありますが、このプログラムにとって重要なのはそれらだけです。)
したがって、SMLは2つの宣言を認識します

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

式が続く

main=putStr"trick"

次に評価されます。mainequals かどうかを判断するにはputStr"trick"、SML(およびHaskell)が静的に入力されるため、両側を評価する必要があり、両方が同じ型である必要があります。最初に右側を見てみましょう:putStrSMLのライブラリ関数ではありませんputStrが、行で名前が付けられた関数を宣言しましたfun putStr x=print"treat";-引数x(これはこの"trick"場合は文字列です)を取り、すぐにそれを忘れます関数本体では発生しません。次に、print"treat"印刷する本体が実行されますtreat(囲みなしで"、SML printはHaskellのものとは異なりprintます)。
printにはタイプstring -> unitがあるためputStr、タイプもあります。タイプを正しくするには、タイプが必要ですa -> unitのでputStr"trick"ただtypeを持っていunitmainunitです。単位の値、Haskellと同じSMLにあります()、だから宣言する val main=();、すべてが適切に型付けされています。

codinggroundで試してみてください。
注:コンソールの出力は

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

であるためSML \ NJすべてのステートメントの値と型をそれぞれ宣言した後に表示されます。したがって、最初にputStrand のタイプmainが表示され、次に式が評価さtreatれて出力され、次に式の値(areのtrue両側)が暗黙的な結果変数にバインドされ、それも表示されます。=()it


1
私はいつもfun ... ... =シンタックスシュガーと思っていましたval rec ... = fn ... =>。しかし、MLを使用してから数十年が経ちました。
ニール

@ニールあなたは正しい、 funバインドされた匿名関数の構文糖衣ですvalrec関数が再帰的である場合にのみ必要です)。したがって、「接頭辞を付ける必要があります」という定式化が間違って選択されています。答えを編集します。一般にfun、特にコードゴルフでははるかに短いため、使用するのがベストプラクティスです。
ライコニ

15

ルビー/ C、 64 62 51 48バイト

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

Rubyが見るもの:

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

tap方法は、ブロックを受け取り、一度それを実行します。これ#defineは、Cでマクロを作成できる短い識別子です。また{}、大部分のコンテキストでsが許可されていなくても、共有コードにブレースで囲まれたブロックを配置できます。

Rubyで唯一falsy値であるfalsenil。特に、0は真実です。したがって、Rubyは「トリック」を出力します。

Cが見るもの(プリプロセッサの後):

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

Cでは0は偽であるため、Cは「treat」を出力します。

danieroのおかげで2バイト節約されました。


1
いいね puts代わりに使用printfして2バイトを保存することができます
-daniero

ありがとう!私はいつもprintfCで使うことに慣れていて、puts機能も持っていることを忘れていました。
m-chrzan

2つのアイデア:より短いものを使用できませんtapか?そして、なぜあなたはスペースを取り除きませんでしたか?p ? "trick":"treat"=>p?"trick":"treat"
BrainStone

tap実際には2つの目的を果たします。#defineラッチするための短い識別子ですが、Rubyコードにブレースを直接挿入することもできます。{}Rubyのブロックは、Cおよび同様の言語でのようにはtap 機能しませんが、ブロックを取得して1回実行します。
m-chrzan

Rubyのメソッド名は疑問符で終わる可能性があるため、後にスペースが必要ですp?<character>は文字リテラルであるため、の後にスペースが必要です?
m-chrzan

15

QBasic / JavaScript、51 44バイト

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

QBasicでは、2行目を出力しますが、コメントであると思われるため、最初の行は実行しません(ありがとうございます)。JSでは、JS NOPの直後の最初の行で定義されているPRINT関数を呼び出します'';


1
非常に巧妙なアプローチ!
BrainStone

14

ShapeScript / Foo、13バイト

'trick'"treat

オンラインでお試しください! トリック | 扱う

使い方

ShapeScriptは文字ごとに解析されます。終わりの引用符に出会うことなくEOFがヒットすると、スタックには何もプッシュされません。'trick'文字列を引用符内にプッシュします。これは暗黙的にSTDOUTに出力されます。

Fooには文字isに割り当てられたコマンドがない'trick'ため、その部分は黙って無視されます。ただし、二重引用符で囲まれた部分は、閉じ引用符が欠落していても、すぐにSTDOUTに出力されます。


14

Ruby / Perl、21バイト

print"trick"%1||treat

Perl

計算し"trick" % 1ている0 % 1ので、||送信treatprintPerlが裸の単語を受け入れているので、代わりに。

ルビー

"trick"引数を使用して文字列をフォーマットします。どちらが真1"trick"あるかは||処理されません。


14

MATL / CJam、17バイト

'TRICK'%];"TREAT"

MATLでは、これが出力されます TRICK。CJamでは、を出力します TREAT

説明

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

そこに3つの文字がありません!(EAT)
破壊可能なレモン

@DestructibleWatermelonありがとう!編集
ルイスメンドー

これで、MATLの説明に3つ欠けています!
破壊可能なレモン

@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では、すべての行がリンク(関数)を定義しています。最後の行は、プログラムの実行時に自動的に実行されるメインリンクを定義します。最後の7fバイトの前のコード(Jellyのコードページの改行)にパーサーエラー(実行を直ちに中止する)が含まれていない限り、それらは単に無視されます。最後の行は、“¡ṾI»単にJellyの辞書にインデックスを付けて単語トリックを取得します、プログラムの最後に暗黙的に印刷されるます。

plについてはあまり知りませんが、インタープリターは1行のコードのみをフェッチし、その後に続くすべてを無視するようです。Perlの場合と同様に、ベアワードは文字列として扱われるため、treat正確に出力されます。


12

Objective-C / C、50バイト

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

Objective-Cはキャンディーを手に入れ、印刷物は扱いますが、Cは手に入れず、トリック印刷します。

使い方

Objective-Cについてはあまり知りませんが、この状況で合理的に期待することはできます。の再定義はputs、関数を呼び出さないため、出力に影響を与えず、treatとSTDOUTへの改行をmain出力します。

Cは同じことを期待するかもしれませんが、少なくともgcc 4.8、gcc 5.3、およびclang 3.7はそうではありません。

実際の printf(フォーマット文字列と追加の引数を受け取る)は必要なく、印刷される文字列は改行で終わるため代わりにputsを使用できます。putsprintf(印刷前に引数を分析する必要がある)よりもわずかに速いため、関数printfも再定義しない限り、コンパイラはprintfの呼び出しを最適化してputsの呼び出しに置き換えます。コンパイラーは、puts引数を指定して呼び出すと代わりにトリックを出力"treat"することを認識していません!

ここでstdio.hを含めないことが重要です。なぜなら、putを定義するは、ヘッダーファイル(puts(const char*))にあるのと同じ型を使用する必要があるからです。

最後に、への呼び出しことは注目に値するのprintfプットは、文字列を渡すことなく、末尾の改行。そうしないと、コンパイラはその呼び出しも「最適化」し、セグメンテーション違反が発生します。


10

バッチ/ sh、30バイト

:;echo Treat;exit
@echo Trick

説明。Batchは、最初の行をラベルとして認識しますが、無視し、Trickを出力する2番目の行を実行します。@は、バッチのデフォルトのコマンドの標準出力へのエコーを抑制します。(ラベルがエコーされることはありません。)一方、shは次のことを確認します。

:
echo Treat
exit
@echo Trick

最初の行は何もせず(エイリアスですtrue)、2行目はTreatを出力し、3行目はスクリプトを終了するため、@ echoトリックに到達することはありません。


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

実行パスの写真がある六角形の投稿を見てきましたが、それらを簡単に生成できますか?
ライリー


1
Hexagonyコードは、先頭のヌルバイトを出力します。このチャレンジの目的でそれが空白としてカウントされるかどうかはわかりません。
マーティンエンダー

@MartinEnder許可されているようです。それを指摘してくれてありがとう、私はいつも何らかの理由でそれらを見逃しています
ライリー

私はまた、数バイト(大文字の印刷コストで節約しつつあること解決するために管理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-Flueue:オンラインで試してみてください!

説明:
最初のセクションには、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では、文字列を作成し、パイプラインでそれを残します。#コメントを開始しますので、プログラムが完了すると、暗黙的なWrite-Outputプリントtrick

フーでは、(オンライン、それを試してみてください!) 'trick'無視され、#プログラムはスリープ状態に原因が0(何が配列のポインタではありませんので)秒が、その後、"treat文字列を開始します。EOFに到達したため"、文字列を閉じることが暗黙的にあり、それが標準出力に出力されます。


J / Fooでも動作します。
コナーオブライエン

@ ConorO'Brien説明は同じですか?私は一度もJを使ったことがないし、Jにも慣れていません。
AdmBorkBork

いいえ、これはJ #では機能しません。コピー関数であり、文字列ではなく、負でない複素数の左引数のみを取ります。コメント記号があるNB.
アダム

@Adámそうです。忘れた#
コナーオブライエン

9

PHP / Perl、28バイト

print defined&x?trick:treat;

defined&x
PHPで真実の何かを提供します(理由はわかりませんが、それは実現します)。
Perlでは、関数xが定義されているかどうかをチェックします-定義されていません。
-> trickPHP、treatPerl。


@jmathews Windowsバージョンにバックスペース制御文字を入れてみましたか?どうCLS
タイタス

`定義された&xまたはのtruthy値はD&X私に聞かないでいるあなたが得る日間
イェルクHülsermann
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.