Trick or Treat polyglot

  • Since Halloween is coming up I thought I might start a fun little code golf challenge!

    The challenge is quite simple. You have to write a program that outputs either trick or treat.

    "The twist?" you may ask. Well let me explain:

    Your program has to do the following:

    • Be compilable/runnable in two different languages. Different versions of the same language don't count.

    • When you run the program in one language it should output trick and the other should output treat. The case is irrelevant and padding the string with whitespace characters are allowed (see examples).

    • This is , so the solution with the fewest bytes wins.

    A few explanations:

    Valid outputs (Just for the words not for running the code in the two languages. Also adding quotes to signalize the beginning or end of the output. Do not include them in your solution!):



    " TReAt"

    tRICk "

    Invalid outputs:

    "tri ck"



    I'm interested to see what you can come up with! Happy Golfing!

    I'd like to note that this is my first challenge so if you have suggestions on this question please leave them in the form of a comment.


    Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.

    To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:

    # Language Name, N bytes

    where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

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

    If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:

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

    You can also make the language name a link which will then show up in the leaderboard snippet:

    # [><>](, 121 bytes

    var QUESTION_ID=97472,OVERRIDE_USER=23417;function answersUrl(e){return""+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return""+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",,t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=o.replace(TAGS_REG,"")),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",,i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i,TAGS_REG = /(<([^>]+)>)/ig;

    body{text-align:left!important}#answer-list,#language-list{padding:10px;width:400px;float:left}table thead{font-weight:700}table td{padding:5px}

    <script src=""></script> <link rel="stylesheet" type="text/css" href="//"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>

    This meta answer states that near-duplicates can be tolerated if there's a good reason. I believe that the popularity this question receives from being close to Halloween is a good reason in itself, so I'll vote to reopen. I wouldn't mind closing it after Halloween (but I don't know if this would be a good thing either).

    Does a null byte (`0x00`) count as white space?

    @Riley I'll say yes.

    @mbomb007. This is a duplicate of *what*?

    definitely not a duplicate. The only thing the same about that other one is that it's also a polyglot challenge with specified output.

    This would also have been a fun one as a code challenge instead of golf.

    @BrianMinton Which type of code challenge, i.e., which winning criterion, do you have in mind?

    actually, looking at the tags, I think that what I was thinking of was just popularity-contest.

    ... 3 pages... I *really* think that this is getting a lot of activity based on the current value of the seasonal variant.

    The leaderboard doesn't work for me; it only shows the top 10 overall answers, and none of the Winners by Language.

    @Oliver do you know why the leaderboard doesn't work?

    What a great question! I love how some of the answers illuminate and exploit how simple code fragments mean different things in different languages-- e.g. truthiness/falsiness and associativity of the ternary operator.

  • Dennis

    Dennis Correct answer

    5 years ago

    2sable / pl, 8 bytes

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

    Both programs have been tested locally with the same 8 byte file, so this is a proper polyglot.

    2sable: trick

    This is the program in code page 1252.


    Try it online!

    pl: treat

    This is the program in code page 437.


    Try it online!

    How it works

    2sable: trick

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

    pl: treat

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

    But I've got to admit this answer is plain ridiculous! What's next? An answer that's shorter than the words themself?

    This answer is extremely impressive. It's amazing that you managed to write a program shorter than the length of the two words.

    Huh? Those are 2 programs

    @FireCubez It's the same code, byte per byte. The visual representation varies with the codepage though.

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM