199
\$\begingroup\$

Congratulations to Dennis who won both the cops' and the robbers' challenge! Calvin's Hobbies has already delivered on his promise and wrote this challenge for Dennis for winning the robbers' challenge.

Notice: This challenge is closed for further cop answers as of 2015-09-01 02:00:00 UTC. Any new answers posted will not be eligible for winning and will not count towards the robbers' scores if cracked. However, you may still post new answers for the other users' enjoyment, so that there are still some puzzles available for future visitors. These new answers are included in the "Vulnerable Cops" section of the leaderboard and their non-competing status is marked separately.

Welcome to the Cops-and-Robbers edition of The Hello World Quiz! (If you've never played the quiz, feel free to try it out for a minute or 30. You don't need to have played it for this challenge though.)

The Cops' Challenge

  1. Choose a programming language. Valid languages must have either an English Wikipedia article, an esolangs article or a Rosetta Code article at the time this challenge was posted (note that the linked lists are not necessarily complete because they are curated manually). They must also satisfy our usual standards for programming languages, so things like HQ9+ are out. Lastly, there must be a free (as in beer) interpreter or compiler available for the language (at the time this challenge was posted).
  2. Write a Hello World program. That is, write a full program in the chosen language which prints Hello, World! (exactly like that, i.e. this exact byte stream) and optionally a single trailing newline to STDOUT or closest alternative.

    You must not assume a REPL environment, existing boilerplate code, or non-standard compiler/interpreter flags. The program must be in the form of one or more source files (to rule out quirky languages like Folders) and must fit into your answer in full (so it must not be longer than 30,000 characters) - this shouldn't be an issue for any serious submission.

    If your code contains bytes outside the printable ASCII range, please include a pastebin or hex dump to make sure your code is actually testable.

    The program must terminate within 1 minute on a typical desktop PC.

That's it. The catch is that you want to obfuscate your code such that it's not obvious which language you picked. Also note that you don't want your code to accidentally be a valid Hello World program in any other language, although I expect that to be unlikely for sufficiently obfuscated programs.

You must not under any circumstances edit the source code of your submission once posted (as this may invalidate a robbers' active attempts at cracking your answer). So make sure that you golf it as well as you can (or dare) before posting. If you realise that your answer does not work after posting it, simply delete your answer and post a fixed version if you want to.

If no one finds a language your code is valid in for 7 days, you may reveal the chosen language (ideally with an explanation for your obfuscated code), which will make your answer safe. Note that your submission can still be cracked until you reveal the language.

The shortest safe submission (in bytes) wins.

Formatting

(Feel free to skip this section and read The Robbers' Challenge if you're not planning to participate as a cop right now.)

At the bottom of this post, you'll find a Stack Snippet which generates leaderboards as well as a list of submissions which can still be cracked. For the snippet to work, it is important that you include a certain header in your answer:

  • New answers should include a header like

    # ???, [N] bytes
    

    where [N] is the size of your code in bytes and ??? should appear literally.

  • If the answer is not cracked for 7 days and you want to make your answer safe by revealing the language, simply replace the ???, e.g.

    # Ruby, [N] bytes
    

    Feel free to have the language name link to a relevant website like an esolangs page or a GitHub repository. The link will then be displayed in the leaderboard.

  • If another user successfully cracked your submission (see below), please also add the language, along with a notice like

    # Ruby, [N] bytes, cracked by [user]
    

    where [user] is the name of the user who submitted the first valid crack. If the language used in the crack is different from the one you intended, I'd recommend using the robbers' guess and mentioning in the answer that you intended it to be something else. Feel free to make the user name a link to their profile page.

The Robbers' Challenge

  1. Find a vulnerable answer. That is an answer, which hasn't been cracked yet and which isn't safe yet.
  2. Crack it by figuring out its language. That is, find any language in which the given program is a valid Hello World program (subject to the rules outlined in The Cops' Challenge above). It doesn't matter if this is the language the cop intended.

    If you've found such a language, leave a comment with the language's name. If possible, you should include a link to an online interpreter, showing that the code actually works in that language as required.

Every user only gets one guess per answer. You must not crack your own answer (obviously...).

The user who cracked the largest number of answers wins the robbers' challenge. Ties are broken by the sum of bytes of cracked answers (more is better).

Because the robbers' challenge is held exclusively in comments, there won't be any reputation incentive for the robbers. However, the Grand Master of Challenge Writing, Calvin's Hobbies, has kindly offered to write a challenge about the user who wins the robbers' challenge!

Challenge Dashboard

The Stack Snippet below generates leaderboards for the cops and robbers and will also list all answers which can still be cracked. Let me know if anything appears not to be working properly, and I'll try to fix it as soon as possible. If you can think of additional features which would make the dashboard more useful, leave a comment as well.

/* Configuration */

var QUESTION_ID = 54807; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var DAYS_TILL_SAFE = 7;
var OVERRIDE_USER = 8478;
var CUTOFF_DATE = new Date(Date.UTC(2015, 8, 1, 2));

var MS_TILL_SAFE = DAYS_TILL_SAFE * 24 * 60 * 60 * 1000;

/* App */

var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;

function answersUrl(index) {
  // Must load over https (this comment is because I need to change 6+ chars)
  return "https://api.stackexchange.com/2.2/questions/" +  QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}

function commentUrl(index, answers) {
  return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}

function getAnswers() {
  jQuery.ajax({
    url: answersUrl(answer_page++),
    method: "get",
    dataType: "jsonp",
    crossDomain: true,
    success: function (data) {
      answers.push.apply(answers, data.items);
      answers_hash = [];
      answer_ids = [];
      data.items.forEach(function(a) {
        a.comments = [];
        var id = +a.share_link.match(/\d+/);
        answer_ids.push(id);
        answers_hash[id] = a;
      });
      if (!data.has_more) more_answers = false;
      comment_page = 1;
      getComments();
    }
  });
}

function getComments() {
  jQuery.ajax({
    url: commentUrl(comment_page++, answer_ids),
    method: "get",
    dataType: "jsonp",
    crossDomain: true,
    success: function (data) {
      data.items.forEach(function(c) {
        if (c.owner.user_id === OVERRIDE_USER)
          answers_hash[c.post_id].comments.push(c);
      });
      if (data.has_more) getComments();
      else if (more_answers) getAnswers();
      else process();
    }
  });  
}

getAnswers();

var VULNERABLE_REG = /<h\d>[?]{3},[^\n\d,]*(\d+)[^\n,]*<\/h\d>/;
var SAFE_REG = /<h\d>\s*([^\n,]*[^\s,]),[^\n\d,]*(\d+)[^\n,]*<\/h\d>/;
var CRACKED_REG = /<h\d>\s*([^\n,]*[^\s,]),[^\n\d,]*(\d+)[^\n,]*,\s*cracked\s*by\s*(.*[^\s<])<\/h\d>/i;
var OVERRIDE_REG = /^Override\s*header:\s*/i;

function getAuthorName(a) {
  return a.owner.display_name;
}

function process() {  
  console.log(answers);
  var vulnerable = [];
  var cops = [];
  var robbers_hash = {};
  
  var now = Date.now();
  
  answers.forEach(function (a) {
    var body = a.body;
    a.comments.forEach(function(c) {
      if(OVERRIDE_REG.test(c.body))
        body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
    });
    var match;
    if (VULNERABLE_REG.test(body)) {
      vulnerable.push({
        user: getAuthorName(a),
        size: +body.match(VULNERABLE_REG)[1],
        time_left: (a.creation_date*1000 > CUTOFF_DATE) ? Infinity : MS_TILL_SAFE - (now - a.creation_date*1000),
        link: a.share_link,
      });
    } else if (SAFE_REG.test(body)) {
      if (a.creation_date*1000 < CUTOFF_DATE) {
        match = body.match(SAFE_REG);
        cops.push({
          user: getAuthorName(a),
          size: +match[2],
          language: match[1],
          link: a.share_link,
        });
      }
    } else if (CRACKED_REG.test(body)) {
      if (a.creation_date*1000 < CUTOFF_DATE) {
        match = body.match(CRACKED_REG);
        var language = match[1];
        var size = +match[2];
        var user = match[3];
        if (/<a/.test(user)) user = jQuery(user).text();
        var robber = robbers_hash[user] || {
          user: user,
          cracks: 0,
          total_size: 0,
          languages: [],
        };
        ++robber.cracks;
        robber.total_size += size;
        robber.languages.push({
          language: language,
          link: a.share_link,
        });
        robbers_hash[user] = robber;
      }
    }
  })
  
  console.log(vulnerable);
  console.log(cops);
  console.log(robbers_hash);
  
  vulnerable.sort(function (a, b) {
    var aB = a.time_left,
        bB = b.time_left;
    return aB - bB
  });
  
  vulnerable.forEach(function (a) {
    var answer = jQuery("#vulnerable-template").html();
    var time = a.time_left;
    var time_string = "";
    if (time == Infinity)
      time_string = "Answer is not competing";      
    else if (time > 0) {
      time_string += ((time / (1000 * 60 * 60 * 24))|0) + "d ";
      time %= 1000 * 60 * 60 * 24;
      time_string += ((time / (1000 * 60 * 60))|0) + "h ";
      time %= 1000 * 60 * 60;
      time_string += ((time / (1000 * 60))|0) + "m ";
      time %= 1000 * 60;
      time_string += ((time / (1000))|0) + "s";
    }
    else
      time_string = "Cop may reveal language!";
    
    answer = answer.replace("{{NAME}}", a.user)
                   .replace("{{SIZE}}", a.size)
                   .replace("{{TIME}}", time_string)
                   .replace("{{TIME}}", a.time_left)
                   .replace("{{HUE}}", a.time_left <= 0 ? 0 : a.time_left == Infinity ? 160 : a.time_left/MS_TILL_SAFE*80+40)
                   .replace("{{LINK}}", a.link);
    
    answer = jQuery(answer)
    
    jQuery("#vulnerable").append(answer);
  });
  
  cops.sort(function (a, b) {
    var aB = a.size,
        bB = b.size;
    return aB - bB
  });
  
  var place = 1;
  var lastSize = null;
  var lastPlace = 1;
  cops.forEach(function (a) {
    var answer = jQuery("#cops-template").html();
    var size = a.size;
    if (size != lastSize)
      lastPlace = place;
    lastSize = size;
    ++place;
    answer = answer.replace("{{PLACE}}", lastPlace + ".")
                   .replace("{{NAME}}", a.user)
                   .replace("{{LANGUAGE}}", a.language)
                   .replace("{{SIZE}}", a.size)
                   .replace("{{LINK}}", a.link);
    
    answer = jQuery(answer)
    
    jQuery("#cops").append(answer);
  });

  var robbers = [];
  for (var r in robbers_hash)
    if (robbers_hash.hasOwnProperty(r))
      robbers.push(robbers_hash[r]);
  
  robbers.sort(function (a, b) {
    var aB = a.cracks,
        bB = b.cracks,
        aC = a.total_size,
        bC = b.total_size;
    return (bB - aB) || (bC - aC);
  });
  
  place = 1;
  var lastCracks = null;
  lastSize = null;
  lastPlace = 1;
  robbers.forEach(function (a) {
    var answer = jQuery("#robbers-template").html();
    var cracks = a.cracks;
    var size = a.total_size;
    if (size != lastSize || cracks != lastCracks)
      lastPlace = place;
    lastSize = size;
    lastCracks = cracks;
    ++place;
    var languages = "";
    var first = true;
    a.languages.forEach(function (l) {
      if (!first) {        
        languages += ", ";
      }
      first = false;
      var lang = l.language;
      if (/<a/.test(lang)) lang = jQuery(l.language).text();
      languages += '<a href="' + l.link + '">' + lang + '</a>';
    });
    answer = answer.replace("{{PLACE}}", lastPlace + ".")
                   .replace("{{NAME}}", a.user)
                   .replace("{{CRACKS}}", a.cracks)
                   .replace("{{TOTAL_SIZE}}", a.total_size)
                   .replace("{{LANGUAGES}}", languages);
    
    answer = jQuery(answer)
    
    jQuery("#robbers").append(answer);
  });
}
body { text-align: left !important}

#vulnerable-cops {
  padding: 10px;
  width: 600px;
}

#cops-leaderboard {
  padding: 10px;
  width: 600px;
}

#robbers-leaderboard {
  padding: 10px;
  width: 600px;
}

table thead {
  font-weight: bold;
}

table td {
  padding: 5px;
}

.time-ms {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="vulnerable-cops">
  <h2>Vulnerable Cops</h2>
  <table class="vulnerable-cops">
    <thead>
      <tr><td>User</td><td>Size</td><td>Time Left</td></tr>
    </thead>
    <tbody id="vulnerable">

    </tbody>
  </table>
</div>
<div id="cops-leaderboard">
  <h2>Leaderboard of Safe Cops</h2>
  <table class="cops-leaderboard">
    <thead>
      <tr><td></td><td>User</td><td>Language</td><td>Size</td></tr>
    </thead>
    <tbody id="cops">

    </tbody>
  </table>
</div>
<div id="robbers-leaderboard">
  <h2>Leaderboard of Robbers</h2>
  <table class="robbers-leaderboard">
    <thead>
      <tr><td></td><td>User</td><td>Cracks</td><td>Total Size</td><td>Languages (link to answers)</td></tr>
    </thead>
    <tbody id="robbers">

    </tbody>
  </table>
</div>
<table style="display: none">
  <tbody id="vulnerable-template">
    <tr><td>{{NAME}}</td><td>{{SIZE}}</td><td style="background-color: hsl({{HUE}},100%,50%);">{{TIME}}</td><td><a href="{{LINK}}">Link</a></td><td class="time-ms">{{TIME_MS}}</td></tr>
  </tbody>
</table>
<table style="display: none">
  <tbody id="cops-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="robbers-template">
    <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{CRACKS}}</td><td>{{TOTAL_SIZE}}</td><td>{{LANGUAGES}}</td></tr>
  </tbody>
</table>

\$\endgroup\$
3
  • 113
    \$\begingroup\$ One minute of silence for those only capable of Piet programming. \$\endgroup\$ Aug 17, 2015 at 8:20
  • 22
    \$\begingroup\$ There goes my productivity! \$\endgroup\$
    – Luke
    Aug 17, 2015 at 20:30
  • 14
    \$\begingroup\$ I think I might start debating whether or not I should start using Foo as a cuss word... "Oh, Foo! You little FOO!!" Yup, fits perfectly. \$\endgroup\$ Aug 26, 2015 at 19:41

215 Answers 215

1
2
3 4 5
8
12
\$\begingroup\$

Linotte, 47 bytes, cracked by ProgramFOX

HelloWorld :
 début
   affiche "Hello, World!"

waves baguette

\$\endgroup\$
2
  • 2
    \$\begingroup\$ I think it's Linotte. \$\endgroup\$
    – ProgramFOX
    Aug 17, 2015 at 14:26
  • 2
    \$\begingroup\$ @ProgramFOX C'est exact \$\endgroup\$
    – Fatalize
    Aug 17, 2015 at 14:27
12
\$\begingroup\$

Clip, 108 bytes, cracked by jimmy23013

"Hello, World!", he exclaimed at the top of his lungs, "What a beautiful day to be alive! Hello, World!"-13>

Everybody loves a short story.

The intended language was Pyth, which prints the first string, then chokes on one of the many type errors. With the offline interpreter, all errors go to STDERR, so they don't count as output.

\$\endgroup\$
5
  • 8
    \$\begingroup\$ Most of the short stories I read don't end with -13>. \$\endgroup\$
    – Alex A.
    Aug 19, 2015 at 2:30
  • 14
    \$\begingroup\$ That's an... emoticon. \$\endgroup\$
    – Dennis
    Aug 19, 2015 at 2:31
  • 1
    \$\begingroup\$ Works in Clip. \$\endgroup\$
    – jimmy23013
    Aug 19, 2015 at 7:33
  • \$\begingroup\$ @jimmy23013 It wasn't supposed to, but it does. \$\endgroup\$
    – Dennis
    Aug 19, 2015 at 8:05
  • \$\begingroup\$ I tested it in the online Pyth interpreter, but was scared off by the errors. Tricky, tricky.... \$\endgroup\$ Aug 19, 2015 at 14:33
12
\$\begingroup\$

Foo, 38 bytes, cracked by kirbyfan64sos

fn main(0){println!("Hello, World!");}
\$\endgroup\$
5
  • \$\begingroup\$ This looks like Rust. \$\endgroup\$
    – Dennis
    Aug 18, 2015 at 23:22
  • \$\begingroup\$ @Dennis Nope, not Rust. (Very very close, though.) ;) \$\endgroup\$
    – Doorknob
    Aug 18, 2015 at 23:22
  • \$\begingroup\$ Oh, well. +1 for that sneaky 0. \$\endgroup\$
    – Dennis
    Aug 18, 2015 at 23:27
  • 3
    \$\begingroup\$ Is this Foo? (0) would end instantly, and the other operators do nothing. (If it is Foo, I think this is the first one that was intended to be Foo!) \$\endgroup\$ Aug 19, 2015 at 22:38
  • \$\begingroup\$ @kirbyfan64sos Yep! (This was intended to be Foo that looks like Rust.) \$\endgroup\$
    – Doorknob
    Aug 19, 2015 at 22:58
12
\$\begingroup\$

Boolfuck, 698 bytes, cracked by aditsu

#include <iostream>
int main() { char _=1;char w=3;char z=7;char o=_+5;char p=_+7;char f=9;char q=_+3;char r=_+5;
char i=_+z;char j=_+o;char k=_+o;char s=_+p;char t=f;_+=q;_=_;_+=k;_*=s;_*=i;_+=j;_*=t;_+=_;_+=z;
_*=o;_+=p;_*=f;k*=2;_+=4;i*=0;_+=2;_+=7;_*=9;i+=1;_+=2;_*=3;k*=6;q*=2;k+=9;_+=1;q*=4;k+=9;_*=6;f*=2;
w+=4;o*=4;w+=9;_+=6;o+=9;w*=2;_*=6;s*=6;w*=3;o*=3;j*=9;_+=7;_+=9;f*=2;_+=f;s-=3;r*=6;_+=i;f+=8;_+=s;
s+=1;j+=r;_+=z;_*=o;t*=5;p*=3;k+=3;_+=5;s*=2;k+=9;t-=4;o+=4;_+=3;p*=5;o+=5;s-=4;r*=3;r+=5;z*=7;t-=9;
r+=6;p-=4;j+=9;w+=4;p-=5;w+=6;_*=7;_*=f;w+=2;_+=p;_*=7;_+=o;i*=p;t+=1;_+=9;_+=s;_*=0;_*=i;_*=6;_+=7;
_+=3;_*=3;z*=2;_+=_;_+=12;z+=3;std::cout<<_<<z<<w<<o<<p<<f<<q<<r<<i<<k<<j<<s<<t; }
\$\endgroup\$
7
  • \$\begingroup\$ If this is C++, the capitalization is wrong. \$\endgroup\$
    – Dennis
    Aug 17, 2015 at 19:48
  • \$\begingroup\$ You're right, this is not C++. \$\endgroup\$
    – Luke
    Aug 17, 2015 at 19:52
  • \$\begingroup\$ Maybe brainfuck? \$\endgroup\$
    – Beta Decay
    Aug 17, 2015 at 21:17
  • 1
    \$\begingroup\$ Maybe this is a language where # is a comment? \$\endgroup\$
    – user41805
    Aug 18, 2015 at 4:48
  • 2
    \$\begingroup\$ This must be Boolfuck! \$\endgroup\$ Aug 21, 2015 at 21:48
11
\$\begingroup\$

GolfScript, 369 bytes, cracked by ProgramFOX

.!))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).)))))))
)))))))))))))))))))))).)))))))..))).(((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((.((((((((((((.)))))))))))))))))))))))))))))))))))))))))))))
)))))))))).)))))))))))))))))))))))).))).((((((.((((((((.(((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((](+

Wait a second, did I forget a paren somewhere?

\$\endgroup\$
2
  • 4
    \$\begingroup\$ I think it's GolfScript. \$\endgroup\$
    – ProgramFOX
    Aug 17, 2015 at 16:50
  • 36
    \$\begingroup\$ @ProgramFOX Well that lasted a whole 48 seconds. ;( \$\endgroup\$
    – Doorknob
    Aug 17, 2015 at 16:50
11
\$\begingroup\$

ETA, 293 bytes, cracked by Sp3000

New nut oven in penal ham; men act of men. Arab arena, but spent? Nope! UNIX likez...
NSA bend at Senator, bend at omen (CAW!). How bend to a mean ten if Ruby yet?
Unternet and Outer? 'tis too meaty in systems.
Grunted? Uh... New Hand enters sty!
Sun-tied nutellu hurt?
On the knife ruts Smurf Ian.
\$\endgroup\$
7
  • 1
    \$\begingroup\$ Nope, it's not Beatnik. \$\endgroup\$
    – Geobits
    Aug 17, 2015 at 21:30
  • 2
    \$\begingroup\$ @Sp3000 sigh... I guess having it uncracked for a bit over three hours isn't bad :P \$\endgroup\$
    – Geobits
    Aug 17, 2015 at 22:57
  • 2
    \$\begingroup\$ @Geobits That's because I was asleep for those three hours :P \$\endgroup\$
    – Sp3000
    Aug 17, 2015 at 23:01
  • 20
    \$\begingroup\$ @Sp3000 You should sleep longer. You need at least 168 hours of solid sleep to be healthy. \$\endgroup\$
    – Geobits
    Aug 17, 2015 at 23:15
  • 2
    \$\begingroup\$ Someone should arrange a score to these lyrics... \$\endgroup\$
    – h.j.k.
    Aug 19, 2015 at 15:18
11
\$\begingroup\$

DoubleFuck, 1195 bytes

"""     \xde\xbf\xcc\xbc\xca\xaf\xbe\xaa\xaa\xda\xbd\xed\xfc\xaa\xda\xac\xef
\xdd\xff\xcc\xef\xea\xdf\xab\xae\xde\xfc\xcc\xaf\xdb\xbf\xae\xca\xcc\xef\xca
\xbc\xab\xea\xec\xae\xff\xcf\xba\xac\xfe\xab\xbe\xaa\xdc\xcd\xdc\xeb\xed\xac
\xcd\xaa\xba\xae\xfd\xae\xfa\xad\xba\xcc\xde\xba\xbe\xac\xca\xfd\xae\xef\xaa
\xbe\xcd\xfc\xdc\xdd\xbd\xbb\xaa\xbe\xde\xdb\xdd\xdb\xea\xbc\xbf\xdb\xfa\xcd
\xed\xee\xda\xef\xcd\xed\xde\xec\xbb    \xdc\xbd\xeb\xac\xfc\xad\xfe\xde\xbb
\xcc\xcf\xdc\xdc\xfa\xef\xbd\xdc\xfd\xcb\xff\xdd\xbc\xac\xbb\xff\xeb\xac\xab
\xca\xca\xcd\xbd\xaf\xeb\xda\xac\xdb\xcc\xaf\xce\xdf\xad\xad\xea\xee\xda\xfb
\xdc\xbf\xfd\xcb\xbc\xfb\xee\xae\xcb\xcf\xfb\xcd\xef\xfc\xea\xca\xbd\xee\xed
\xea\xed\xba\xef\xad\xcd\xfa\xaf\xaf\xdc\xef\xab\xdd\xda\xeb\xce\xac\xbe\xae
\xbc\xbf\xee\xec\xfd\xee\xed\xbb\xfc\xab\xaf\xda\xeb\xbd\xbe\xdc\xef\xaa\xda
\xbd\xfc\xcd\xdc\xaf\xec\xad\xad\xda\xda\xba\xbb\xbc\xee\xdf\xea\xca     """

a = [
      "!!",

      """]--------[>+>+++++>-->-->--->++++>------<<<<<<<-------]
         >.>---.>----..>-.>++++.>.>+++++++.<<<.+++.<.<-.<<[     """,

      "\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\n"
    ]

def f():r = print(a[2]) or quit()

f() and f()

As noted in the comments, this one contains a few infuriators:

$ golfscript hello.???
Hello, World!
2
$ python3 hello.???
Hello, World!

$ brainfuck < hello.???
Hello, World

But only the first two herrings are red!

Any brainfuck program that contains no comments is also a valid DoubleFuck program that performs the same action, so the brainfuck instructions of the above code still print everything but the exclamation mark.

Finally, the 223 backslashes in the multi-line string at the beginning decrement the first memory cell in the second array until it reaches 33 and the colon in

 def f():r = print(a[2]) or quit()

prints the character with code point 33, i.e., an exclamation mark.

\$\endgroup\$
7
  • 1
    \$\begingroup\$ This is Python 3. \$\endgroup\$ Aug 22, 2015 at 11:18
  • \$\begingroup\$ @SuperJedi224 Not quite. The string contains a linefeed and print appends a second one. \$\endgroup\$
    – Dennis
    Aug 22, 2015 at 12:47
  • \$\begingroup\$ I tried BrainF*** as well, but that omits the ! \$\endgroup\$ Aug 22, 2015 at 12:50
  • \$\begingroup\$ And ><> prints 10-2 and then gets stuck in an infinite loop. \$\endgroup\$ Aug 22, 2015 at 14:01
  • 1
    \$\begingroup\$ @BassetHound That would be a huge coincidence. \$\endgroup\$
    – Dennis
    Aug 23, 2015 at 1:56
10
\$\begingroup\$

Hollow, 17 bytes, cracked by Sp3000

{Hello, World!}:?

If it survives it will be hard to beat, but I don't know whether it will survive.

\$\endgroup\$
2
  • \$\begingroup\$ In GolfScript it outputs {Hello, World!}. A compiler. \$\endgroup\$
    – DDPWNAGE
    Aug 17, 2015 at 6:56
  • 7
    \$\begingroup\$ Is this Hollow? \$\endgroup\$
    – Sp3000
    Aug 17, 2015 at 6:57
10
\$\begingroup\$

GolfScript, 41 bytes, cracked by ProgramFOX

begin
   stdout_print "Hello, World!"
end
\$\endgroup\$
2
  • 4
    \$\begingroup\$ I guess it's GolfScript. \$\endgroup\$
    – ProgramFOX
    Aug 17, 2015 at 12:06
  • \$\begingroup\$ @ProgramFOX Yes, it is. :) \$\endgroup\$ Aug 17, 2015 at 12:07
10
\$\begingroup\$

Wordfuck, 552 bytes, cracked by Sp3000

bCB A@? >=< ;:9 876 543 210 /.- ,+*)('&% $#"!~} |{zy xwvuts rqpo nmlk jihg fedc ba`_ ^]\[ZY XWV UTS RQPONM LKJ IHG FEDCBA @9> =<; :98 765432 10/. 'K+* )i'& }C{" !~w=<z yxw vut srq pon mlk jih afe^$Ea `_^]\[Z YXWVUTS RQPONMF EiIH*F? DCBA:^> =<;:z87 65. R21 0/. -,+ *)( '&% $#" b~w={zyrw vutm3k po ng-kji hgI edc ba` _^ ]\UyYX :PU TSR QJn NMF Ei IH *e?DCB A@? 8\ <|:387 65.R s10) .-,+ *#Gh &} ${Abx} |{ zyxq7u Wsrq pinm lkji b(fe dFb[ `Y}] \[TS wW VUTSRQP 2HMFjJI H*e?DCB A@ ?8\< ;:z8 70/S 3s 1*/(L,+ *j ('&%${" !x> |^ zsxwvo 5sUqpo nmlkji hg`edc ba`Y }j

This produces the correct output in Malbolge, but not the correct byte stream.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Would this be Wordfuck? \$\endgroup\$
    – Sp3000
    Aug 20, 2015 at 6:45
  • 11
    \$\begingroup\$ I spent hours writing a Malbolge polyglot and you cracked it in less than 5 minutes... :( \$\endgroup\$
    – Dennis
    Aug 20, 2015 at 6:49
10
\$\begingroup\$

Perl 5.10, 139 bytes, cracked by primo

~!0!~('@"/(@`)~@``^"|'.(('"
_]'^'|"`&').('[)).["[}(@,@@
{~/),$}@{**(!(^$&%{%{*[/,`,
'^'+[@@/+{_`%@,/&[)@[@@_`[#
!(!~-/,[,[#{&%@').'"!"})'))

Verification

For obvious reasons, the above code is deemed unsafe in modern versions of Perl.

However, in Perl 5.101 (available here), it works as intended with no warnings whatsoever.

To assure Perl 5.20 that you know what you're doing, use the -Mre=eval switch or add the line

use re 'eval';

before the actual code (see 'eval' mode).

This way, you can try the code online in ideone.

How it works

Let's start by applying some syntax highlighting:

~!0!~('@"/(@`)~@``^"|'.(('"
_]'^'|"`&').('[)).["[}(@,@@
{~/),$}@{**(!(^$&%{%{*[/,`,
'^'+[@@/+{_`%@,/&[)@[@@_`[#
!(!~-/,[,[#{&%@').'"!"})'))

The code contains quite a few strings, which contain actual linefeeds. We can make it more readable by saving those strings in variables:

$a = '@"/(@`)~@``^"|';

$b = '"
_]';

$c = '|"`&';

$d = '[)).["[}(@,@@
{~/),$}@{**(!(^$&%{%{*[/,`,
';

$e = '+[@@/+{_`%@,/&[)@[@@_`[#
!(!~-/,[,[#{&%@';

$f = '"!"})';

~!0 !~ ($a . (($b ^ $c) . ($d ^ $e) . $f))

($b ^ $c) and ($d ^ $e) XOR the respective strings character by character.

The results are then concatenated with $a and $f, yielding the following string2:

@"/(@`)~@``^"|^(?{print  "Hello, World"                                              ,
"!"})

!~ treats this string as a regular expression and checks if does not match ~!03.

The part up to | is non-matching gibberish; the part that follows uses the (?{ code }) feature, which allows the execution of arbitrary Perl code inside regular expressions.

After stripping some whitespace, the code that gets executed is

print "Hello, World", "!"

which greets the World as intended.


1 Compiling Perl was uneventful on openSUSE 13.2.
2 Some of the spaces are actually tabulators. As the SE editor, Perl does not care about this.
3 This evaluates to 18446744073709551614, which !~ will cast to string.

\$\endgroup\$
3
  • 14
    \$\begingroup\$ Some of the most readable Perl I've seen ;) \$\endgroup\$
    – primo
    Aug 25, 2015 at 10:35
  • 2
    \$\begingroup\$ @primo I hope that's incorrect. :P \$\endgroup\$
    – Dennis
    Aug 25, 2015 at 13:26
  • 9
    \$\begingroup\$ eval mode? Should be evil mode. \$\endgroup\$
    – Rohcana
    Aug 25, 2015 at 15:05
10
\$\begingroup\$

Finite Groups, 21 bytes, cracked by nimi

"Hello,"" World!"|p"?

Now 100% O-proof.

\$\endgroup\$
11
  • \$\begingroup\$ Is there a reason the "Hello, World!"p"?" answer was deleted? Looks like it may be the same language, whatever it may be. \$\endgroup\$
    – mbomb007
    Aug 27, 2015 at 14:47
  • \$\begingroup\$ @mbomb007 It works in Clip. \$\endgroup\$
    – Dennis
    Aug 27, 2015 at 14:48
  • \$\begingroup\$ I would say it's Pyth, but I get a SyntaxError from Python! \$\endgroup\$
    – galexite
    Aug 28, 2015 at 14:16
  • \$\begingroup\$ @georgeunix Not Pyth then. :P \$\endgroup\$
    – Dennis
    Aug 28, 2015 at 16:25
  • 1
    \$\begingroup\$ @georgeunix That's not true. | requires two parameters, but there's only one in the source code. The output would be incorrect anyway, since Pyth prints the two strings on separate lines. \$\endgroup\$
    – Dennis
    Aug 28, 2015 at 17:09
10
\$\begingroup\$

goruby, 173 bytes

#/*<?php ob_clean();"/#
s=n='''*/include<stdio.h>
main(){/*';s?i;$\=?\ .#";#=;
#*/puts(/*
n;#''';
print(#*/
"Hello, World"
#//#,n^="\v"
);
#/*?><?php "
s;'''*/
}//#";#'''#";

Take 2. Perhaps this one will last longer than 5 minutes.


The above produces incorrect output (Hello, World) in serveral different languages, including PHP (assuming the output buffer is active), Perl, Python, and most C variants. It should also produce the correct output in a theoretical language which, to my knowledge, doesn't exist. That language has the following specification:

  • Comments begin with #, multi-line comments are enclosed by #/ ... /#.
  • " ... " is a valid string, and ''' ... ''' is a valid multi-line string.
  • Strings are mutable.
  • The string operator ^ performs a bit-wise xor, truncating to the smaller of the two operands.

The program would then be equivalent to:

#/ ... /#
s=n='''*/include... ''';
print(
"Hello, World"
,n^="\v"
);
#/ ... /#" ... ";

Because n begins with *, n^="\v"!, thus producing the correct output. It was my intention to have you search for this theoretical language, which as stated, most likely doesn't exist.

The ! is actually produced by $\=?\ .n, meaning $\=' '.next. The special variable $\ is borrowed from Perl, and its value is appended to the output of each print statment. To obfuscate this a bit, I split it across 2 lines, with a puts in between. However, if anyone tried to run this in Ruby, the error message would have been a bit of a give-away:

undefined method `n' for " ":String (NoMethodError)

To guard against this, I added s?i just before. Ruby will consider this a call to the function s? with the parameter i, and error on undefined local variable or method `i'. Goruby auto-expands this to is_a?instance, which is valid syntax.


The goruby interpreter is included with the standard Ruby branch, and can be built with:

./configure
make golf
\$\endgroup\$
3
  • \$\begingroup\$ Just to double-check, are you sure that the output ends with a !? \$\endgroup\$
    – ProgramFOX
    Aug 25, 2015 at 8:50
  • \$\begingroup\$ @ProgramFOX in the intended language, it does. \$\endgroup\$
    – primo
    Aug 25, 2015 at 9:04
  • \$\begingroup\$ It's not Python. Would've been too easy. \$\endgroup\$
    – mbomb007
    Aug 25, 2015 at 16:45
9
\$\begingroup\$

><>, 82 bytes, cracked by Sp3000

version 1.0
\0: ~~ "Hello,"
\1: ?? " World!"
\4: ...
\n:   r>:~/
end;   ^?)<< data
\$\endgroup\$
2
  • 5
    \$\begingroup\$ I believe this is ><> (Fish). Nice use of version 1.0 though :) \$\endgroup\$
    – Sp3000
    Aug 17, 2015 at 12:36
  • \$\begingroup\$ It is! I'm glad you liked it =) \$\endgroup\$
    – Aaron
    Aug 17, 2015 at 12:40
9
\$\begingroup\$

Glypho, 480 bytes, cracked by jimmy23013

  v># #  :: < <   <v#  #*>*> ##:#**#,<,<: : > > *  *v>>v # ##,#, + +:++: ++ ##
*<<*,^,^<<#v<<v#v::v< < <,, +,+,+>>+*,,*+*+*,,*>**^v#  #,,:^#vv#>+>+ << >  >, , ++*>:
:v<v<^#^#v::v>::>v**v # #::>^>+>>:>:>>>*>>##>*^ *# #  vv ,::,<<>:++
*vv*v:v:^vv< > > ,,>>:>: << >+>>^ ^ ^^*^+,+,#::#*:*::  :v v  ,   # #<<#<#**#^,^,+##+**
+**+,:,:::>*<^v< v v+^+^*^^*+<<++##+v#v#++<>:< :* **+ +   ^ *  *<+<+<  *vv+<:^^:::
  ^+*<<***<^+  ++:+:^##^:>:>+::< > >#>># *  >,>, :^ ^>>^##<#,<,*^   *<:<

Note that it is essential to use Windows line terminators (\r\n). For the avoidance of doubt, here is a hexdump:

00000000  20 20 76 3e 23 20 23 20  20 3a 3a 20 3c 20 3c 20  |  v># #  :: < < |
00000010  20 20 3c 76 23 20 20 23  2a 3e 2a 3e 20 23 23 3a  |  <v#  #*>*> ##:|
00000020  23 2a 2a 23 2c 3c 2c 3c  3a 20 3a 20 3e 20 3e 20  |#**#,<,<: : > > |
00000030  2a 20 20 2a 76 3e 3e 76  20 23 20 23 23 2c 23 2c  |*  *v>>v # ##,#,|
00000040  20 2b 20 2b 3a 2b 2b 3a  20 2b 2b 20 23 23 0d 0a  | + +:++: ++ ##..|
00000050  2a 3c 3c 2a 2c 5e 2c 5e  3c 3c 23 76 3c 3c 76 23  |*<<*,^,^<<#v<<v#|
00000060  76 3a 3a 76 3c 20 3c 20  3c 2c 2c 20 2b 2c 2b 2c  |v::v< < <,, +,+,|
00000070  2b 3e 3e 2b 2a 2c 2c 2a  2b 2a 2b 2a 2c 2c 2a 3e  |+>>+*,,*+*+*,,*>|
00000080  2a 2a 5e 76 23 20 20 23  2c 2c 3a 5e 23 76 76 23  |**^v#  #,,:^#vv#|
00000090  3e 2b 3e 2b 20 3c 3c 20  3e 20 20 3e 2c 20 2c 20  |>+>+ << >  >, , |
000000a0  2b 2b 2a 3e 3a 0d 0a 3a  76 3c 76 3c 5e 23 5e 23  |++*>:..:v<v<^#^#|
000000b0  76 3a 3a 76 3e 3a 3a 3e  76 2a 2a 76 20 23 20 23  |v::v>::>v**v # #|
000000c0  3a 3a 3e 5e 3e 2b 3e 3e  3a 3e 3a 3e 3e 3e 2a 3e  |::>^>+>>:>:>>>*>|
000000d0  3e 23 23 3e 2a 5e 20 2a  23 20 23 20 20 76 76 20  |>##>*^ *# #  vv |
000000e0  2c 3a 3a 2c 3c 3c 3e 3a  2b 2b 0d 0a 2a 76 76 2a  |,::,<<>:++..*vv*|
000000f0  76 3a 76 3a 5e 76 76 3c  20 3e 20 3e 20 2c 2c 3e  |v:v:^vv< > > ,,>|
00000100  3e 3a 3e 3a 20 3c 3c 20  3e 2b 3e 3e 5e 20 5e 20  |>:>: << >+>>^ ^ |
00000110  5e 5e 2a 5e 2b 2c 2b 2c  23 3a 3a 23 2a 3a 2a 3a  |^^*^+,+,#::#*:*:|
00000120  3a 20 20 3a 76 20 76 20  20 2c 20 20 20 23 20 23  |:  :v v  ,   # #|
00000130  3c 3c 23 3c 23 2a 2a 23  5e 2c 5e 2c 2b 23 23 2b  |<<#<#**#^,^,+##+|
00000140  2a 2a 0d 0a 2b 2a 2a 2b  2c 3a 2c 3a 3a 3a 3e 2a  |**..+**+,:,:::>*|
00000150  3c 5e 76 3c 20 76 20 76  2b 5e 2b 5e 2a 5e 5e 2a  |<^v< v v+^+^*^^*|
00000160  2b 3c 3c 2b 2b 23 23 2b  76 23 76 23 2b 2b 3c 3e  |+<<++##+v#v#++<>|
00000170  3a 3c 20 3a 2a 20 2a 2a  2b 20 2b 20 20 20 5e 20  |:< :* **+ +   ^ |
00000180  2a 20 20 2a 3c 2b 3c 2b  3c 20 20 2a 76 76 2b 3c  |*  *<+<+<  *vv+<|
00000190  3a 5e 5e 3a 3a 3a 0d 0a  20 20 5e 2b 2a 3c 3c 2a  |:^^:::..  ^+*<<*|
000001a0  2a 2a 3c 5e 2b 20 20 2b  2b 3a 2b 3a 5e 23 23 5e  |**<^+  ++:+:^##^|
000001b0  3a 3e 3a 3e 2b 3a 3a 3c  20 3e 20 3e 23 3e 3e 23  |:>:>+::< > >#>>#|
000001c0  20 2a 20 20 3e 2c 3e 2c  20 3a 5e 20 5e 3e 3e 5e  | *  >,>, :^ ^>>^|
000001d0  23 23 3c 23 2c 3c 2c 2a  5e 20 20 20 2a 3c 3a 3c  |##<#,<,*^   *<:<|
\$\endgroup\$
2
  • 3
    \$\begingroup\$ This is Glypho. \$\endgroup\$
    – jimmy23013
    Aug 17, 2015 at 16:18
  • 7
    \$\begingroup\$ @jimmy23013, well done. It took you less time to post the correct answer than it took me to write the submission. \$\endgroup\$ Aug 17, 2015 at 17:11
9
\$\begingroup\$

SQL, 37 bytes, cracked by mbomb007

start: print 'Hello, World!' -- stop.
\$\endgroup\$
6
  • 3
    \$\begingroup\$ It works in MySQL. :) \$\endgroup\$
    – mbomb007
    Aug 17, 2015 at 17:35
  • \$\begingroup\$ Yup, that's SQL. \$\endgroup\$ Aug 17, 2015 at 17:54
  • 2
    \$\begingroup\$ Interesting. Is it version dependent? Can't convince MySQL 5.6 to execute it. \$\endgroup\$
    – manatwork
    Aug 18, 2015 at 6:13
  • \$\begingroup\$ @manatwork Idk, I just ran it in SQL Management Studio 2014 as soon as I saw it, since -- stop would be a SQL comment. \$\endgroup\$
    – mbomb007
    Aug 19, 2015 at 21:46
  • \$\begingroup\$ @mbomb007 Isn't SQL Management Studio for T-SQL only? \$\endgroup\$
    – Alex A.
    Aug 23, 2015 at 3:50
9
\$\begingroup\$

Gammaplex, 473 bytes

\TR 63615292119513872138
\K
\TND
o;
o;
o;
o;
o;
o;
o;
kt;
\EF
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
s=62367792098112175613253971580643679683892471;
fg;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
t=8736321328219817931084222979807263280855865;
gr;
w=s+.+.+.+.+.+.+.+.+.t;
z;
v;
r;
r;
r;
r;
r;
r;
r;
r;
r;
r;
r;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
mp;
o="\\\\\\\\\\\\\";
p o##w;
z;
v;
r;
r;
r;
r;
r;
r;
r;
r;
r;
r;
r;
o;
o;
o;
o;
o;
o;
o;
o;
o;
o;
f;
\RUN 92356788

Unobfuscated:

\TR 63615292119513872138
\K\TNDo;o;o;o;o;o;o;kt;\
EFo;o;o;o;o;o;o;o;o;o;s=
623677920981121756132539
71580643679683892471;fg;
o;o;o;o;o;o;o;o;o;o;o;o;
o;o;o;o;o;o;o;o;o;o;o;t=
873632132821981793108422
2979807263280855865;gr;w
=s+.+.+.+.+.+.+.+.+.t;z;
v;r;r;r;r;r;r;r;r;r;r;r;
o;o;o;o;o;o;o;o;o;o;mp;o
="\\\\\\\\\\\\\";p o##w;
z;v;r;r;r;r;r;r;r;r;r;r;
r;o;o;o;o;o;o;o;o;o;o;f;
\RUN 92356788

Yes, it is a 2D language. The incomplete line is ignored.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Looks like a 2D language to me... but the list is so long... \$\endgroup\$
    – mbomb007
    Aug 20, 2015 at 17:54
  • \$\begingroup\$ I think this is some language that ignores non-decimal characters. \$\endgroup\$ Aug 26, 2015 at 21:42
9
\$\begingroup\$

Glee, 30 Bytes

'IWRscm9XICxvbGxlSA==':r64>%<$

A fairly obscure language as it turns out.

'IWRscm9XICxvbGxlSA=='           # base64 encoding of !dlroW ,olleH
                      :r64       # decode from base64
                          >%<    # reverse the string
                             $   # output

Reference site can be found here

\$\endgroup\$
6
  • \$\begingroup\$ Is it Sillycon? \$\endgroup\$
    – galexite
    Aug 28, 2015 at 13:27
  • \$\begingroup\$ @georgeunix Sorry, it's not the intended language and I'd be surprised if it worked in it. \$\endgroup\$
    – MickyT
    Aug 28, 2015 at 19:30
  • \$\begingroup\$ I believe you can reveal the language now. The 7 days are up. \$\endgroup\$ Sep 2, 2015 at 14:22
  • \$\begingroup\$ This looks like an insanely cool language. However, considering it was designed for Windows 95 and newer, I don't know how well it'd on Linux under Wine... \$\endgroup\$ Sep 2, 2015 at 20:16
  • \$\begingroup\$ @kirbyfan64sos, it looked like it had some potential, but appears not to have been touched since 2004 and the documentation isn't the best. \$\endgroup\$
    – MickyT
    Sep 2, 2015 at 20:21
8
\$\begingroup\$

Fortran 77, 40 bytes, cracked by Reto Koradi

      WRITE(*,*)"Hello, World!"
      END

Could be easy, might not be... Who knows ;)

\$\endgroup\$
7
  • \$\begingroup\$ Looks like Fortran? \$\endgroup\$ Aug 17, 2015 at 7:12
  • \$\begingroup\$ @RetoKoradi But which Fortran? ;) \$\endgroup\$
    – Beta Decay
    Aug 17, 2015 at 7:13
  • 2
    \$\begingroup\$ Fortran followed by a two digit number? ;) Let me do some quick checking... With the whitespace in the first columns, it could be an early one. \$\endgroup\$ Aug 17, 2015 at 7:15
  • \$\begingroup\$ @RetoKoradi Haha you're getting very warm \$\endgroup\$
    – Beta Decay
    Aug 17, 2015 at 7:16
  • 1
    \$\begingroup\$ Well, based on my very limited Fortran knowledge (or at least what I remember of it), this could be legal in almost any early version. Since I have to name a specific one, I'll say: FORTRAN 77. \$\endgroup\$ Aug 17, 2015 at 7:21
8
\$\begingroup\$

Slashes, 31 bytes, cracked by manatwork

/foo/Hello, World!//bar/foo/bar or / World! World!/Hello,/ World! World! World!

\$\endgroup\$
2
  • 5
    \$\begingroup\$ /// aka Slashes. (Using “print” instead of “foo” would make it trickier.) \$\endgroup\$
    – manatwork
    Aug 17, 2015 at 11:56
  • \$\begingroup\$ @manatwork Correct! \$\endgroup\$
    – user42003
    Aug 17, 2015 at 12:01
8
\$\begingroup\$

Pascal, 113 bytes, cracked by vsz

begin{
print "Hello, World!"
#/*
end}
writeln('Hello, World!')
{begin
*/
printf("Hello, World!");
/*
}end.
{//*/}

Yep, that was pretty easy :)

\$\endgroup\$
2
  • \$\begingroup\$ It seems to be Pascal, a strange language where { } are comments. \$\endgroup\$
    – vsz
    Aug 17, 2015 at 21:36
  • 20
    \$\begingroup\$ {...} is a comment? That's evil. \$\endgroup\$
    – Dennis
    Aug 17, 2015 at 21:39
8
\$\begingroup\$

Snowman 1.0.1, 43 bytes, cracked by Kslkgh

[[IO::print]]((("Hello, World!"[[end;]]sP))

Explanation:

The basic "Hello, World!" program is actually just ("Hello, World!"sP. Anything surrounded in double parens, i.e. (()), is in its own environment. In this case the new environment doesn't affect anything. Anything in double brackets, i.e. [[]], is a comment, so [[IO::print]] and [[end;]] are just for show.

\$\endgroup\$
5
  • \$\begingroup\$ Are the last set of brackets supposed to be unmatched? \$\endgroup\$
    – Beta Decay
    Aug 18, 2015 at 8:34
  • 2
    \$\begingroup\$ That looks like snowman to me. One of my favorite esolangs. \$\endgroup\$
    – user42003
    Aug 18, 2015 at 12:44
  • \$\begingroup\$ @BetaDecay See github.com/KeyboardFire/snowman-lang/blob/master/doc/snowman.md for an explanation of snowman. \$\endgroup\$
    – user42003
    Aug 18, 2015 at 12:44
  • \$\begingroup\$ @Kslkgh Yep, nice work. \$\endgroup\$
    – Alex A.
    Aug 18, 2015 at 18:35
  • 5
    \$\begingroup\$ Hahaha, nice. Insta-upvote because this is the only Snowman answer on PPCG that's not written by me. \$\endgroup\$
    – Doorknob
    Aug 19, 2015 at 0:47
8
\$\begingroup\$

Matlab, 51 bytes, cracked by feersum

'main()''''+'';//echo{print(';'Hello, World!'
')}';
\$\endgroup\$
6
  • \$\begingroup\$ Thinking about this again, it might be that under certain interpretations of the rules this might not be valid. There are languages where no matter what you print, the interpreter (or environment) always prints/displays something else: a command prompt, or (in case of a javascript example), a dialog box. If the language does not have an stdout like C, but I use the standard way how things are printed in that language, is it valid? \$\endgroup\$
    – vsz
    Aug 18, 2015 at 15:33
  • \$\begingroup\$ If you use the language's closest equivalent to stdout, I'd think that's valid according to the rules. \$\endgroup\$
    – tomsmeding
    Aug 19, 2015 at 10:26
  • 1
    \$\begingroup\$ Almost works in MATLAB / Octave, except it prints ans = . \$\endgroup\$
    – feersum
    Aug 21, 2015 at 2:24
  • \$\begingroup\$ @feersum : this is what I was talking about in my first comment. The "usual way" to print anything in Matlab is to just have an expression without a semicolon at the end. \$\endgroup\$
    – vsz
    Aug 21, 2015 at 4:12
  • 1
    \$\begingroup\$ Can this work in Matlab without a REPL? If not, it's not valid. \$\endgroup\$ Aug 21, 2015 at 16:06
8
\$\begingroup\$

~English, 102 bytes, cracked by aditsu

Display "Hello, World!".
Stop eating large quantities of food.
Notice that this doesn't work in "Foo".
\$\endgroup\$
2
8
\$\begingroup\$

Deadfish (variant), 1415 bytes

As explained by Martin below, this answer is not valid.

explain life spend stay attempt giggle table mumble game I'll quiet fix manage
giggle five up wait fill left gaze normal manage fell quiet lip away believe
mum please I've baby pink wipe go blue pay quietly live guy attempt plan life
bag many men began flip new met lie began tall plan full began by many full
team fill life team act gaze won't imagine wall next wore eventually five tall
wipe meet but six play type bell amaze an put wife sudden bad eat many
eventually add actually anger imagine knee beautiful between I've many gaze
tiny mumble spend at land add went lean place warn man tell few game full plan
fun bit explain gave past mumble play play set wait by line will wet we many
went I'll live bit little money run fill buy my we tie mean evening taken ten
pull full fun any be put feet gaze family any wake fault mean eventually full
family imagine even between give fix meant am giggle imagine we've many bag up
if gun even new exactly lean family twenty buy wait beautiful put town band
felt age ball amaze buy wave put leg fell ball wall get yell bad between age
bed began able well left by at age deal late baby well deep don't me may glad
age I ball team wave may I'd band leave get tell amaze pull new empty day yet
many gun wave dead add leave clean area fun wet jump imagine key man met gun
little meet blink pull any plan mean eye guy day put I'm lead leg age feel
maybe fault tall edge world

This works with the Python 3 implementation of Deadfish by chill0r, which has these operators:

  • i / x: increment by 1
  • d: decrement by 1
  • s / k: square
  • o / c: print accumulator
  • h: exit interpreter (and stop program) (non standard)
  • r: reset accumulator to 0 (non standard)

I wanted to use h, but unfortunately the interpreter prints 'Long live the fish!' before exiting.

The relevant code (without the ignored characters) is:

xiisdsiiixiiiioriiisikioiiiiiiicoiixoriisixisdddddcriikiisddddcrixissiiiiiioriiikikiiiiixiiiixciiioddddddoddddddddcriikiikdddord

The actual output is:

72
101
108
108
111
44
32
87
111
114
108
100
33

Deadfish is not able to output strings or characters, but only numbers, so this is the standard form of printing a string.

\$\endgroup\$
16
  • \$\begingroup\$ Completely wild guess as I cannot test it right now, but maybe .Gertrude? \$\endgroup\$
    – Nico A
    Aug 18, 2015 at 21:42
  • \$\begingroup\$ @TreFox never heard of it, so most likely not a match :) \$\endgroup\$ Aug 18, 2015 at 21:43
  • 1
    \$\begingroup\$ I think this is Wordfuck. \$\endgroup\$
    – lirtosiast
    Aug 19, 2015 at 0:00
  • 3
    \$\begingroup\$ wild stupid guess... "Shakespeare"? \$\endgroup\$
    – frikinside
    Aug 21, 2015 at 9:05
  • 6
    \$\begingroup\$ Override header: invalid, based on the fact that Deadfish does not meet our requirements for a programming language (linked in the challenge) and that the spec says "write a full program in the chosen language which prints Hello, World! (exactly like that, i.e. this exact byte stream)" \$\endgroup\$ Aug 25, 2015 at 21:55
8
\$\begingroup\$

goruby, 62 bytes

"!dlroW ,olleH"::#@<
              ev.di
13             > id^0

Yup, this is a c-like language disguised as a stack-based esolang disguised as a c-like language. goruby is a version of Ruby designed for golfing (although it usually can't compete with the true golfing languages on this site). The main difference between it and regular Ruby is that you don't have to type out the full method name, just any unique subsequence of characters. So here, ev aliases to reverse,di aliases to display, and id aliases to include.

The code also uses a bit of obfuscation that'd also work in regular Ruby: ::, which is almost always used to reference a namespaced constant, can also be used to invoke a method, the same as ., and any amount of whitespace can come in between the colons and the method name. Since #@< is a comment, that means the first two lines are equivalent to "!dlroW ,olleH".reverse().display()".

The last line throws a runtime error since the return value of include is not a number, but since arbitrary output to STDERR is allowed and we've already printed to STDOUT, it doesn't really matter.

\$\endgroup\$
3
  • \$\begingroup\$ Befunge? Comments must be at least 15 characters in length. \$\endgroup\$
    – Teoc
    Aug 26, 2015 at 3:57
  • \$\begingroup\$ @VladimirLenin Can't be befunge, it doesn't have any commas to print characters. \$\endgroup\$
    – Pharap
    Aug 26, 2015 at 10:37
  • \$\begingroup\$ Well, there is one comma ;). But no, this is not Befunge, Befunge would just push HHHello, World! onto the stack and then not print anything. \$\endgroup\$
    – histocrat
    Aug 26, 2015 at 13:10
8
\$\begingroup\$

Underload, 1349 Bytes

When I first looked at Underload for this challenge I was struggling to come up with a way to suitably obscure it. Parenthesis Hell seem like a good red herring, but the example Hello World didn't seem to nest deep enough. Parenthetic was the next choice and had a nice set of parenthesis. I copied the Hello World example for Parenthetic, made sure it didn't output Hello, World! and embedded the Underload commands into it, with a lot of chaff that just gets left in the stack.
I thought this would be cracked and was just hoping it lasted longer than it took me to put it together :) Pleasantly surprised that it lasted the distance.

(((-)([)(]))^((v)((S)(*))^)^(((~)((%))^)^((($))^(-)(>)(+)(<)(^)(-)(-))^(((-)(-)((-))^)^((([))^(.)(H)(e)(l)([)([)([)([)([))^(((]))^(o)(,)(W)(o)(])(])(])(])(])(v))^)^)^)^(((r)(l)(d))^((!)((v)(v)(v))^)^(((v)((v))^((_))^(-))^((([))^(])(v)(=)(|)(/)(*)()^(S)(*)(-)([)(])(v)(~)(%)($)(_)(=)(|)(-)([)(])(v)(/)(*)(S)(*)(~)(%)(-)([)(]))^)^)^(((v)(($))^)^(((_)((=))^((|))^(/))^(((*)((-))^)^(([)((])(v))^)^(((S))^(*)(~)(%)($)(_)(-)([))^)^)^(((])((v))^((=))^(|))^(((/)((*))^)^((S)((-)(>))^)^(((+))^(<)(^)(-)(-))^)^)^(((-)((-))^((-))^([))^(((.)((H))^)^((e)((l)(l))^)^(((o))^(,)( )(W)()(o)()()(r)(l)(d)(!))^)^)^(((*)^((*)^)^((*)^)^(*)^)^(((*)^(()^)^)^((*)^((*)^(*)^)^)^(((*)^)^(*)^(*)^(*)^()^(*)^(*)^(*)^(S)^(<)^($)(_))^)^)^(((=)((|))^((-))^([))^(((])((v))^)^((/)((*)(S))^)^(((*))^(~)(%)(-)([)(])(v)($)(_)(=)(|)(/)(*)(-)([))^)^)^((])((v)(S)(*))^)^(((~)((%))^(($))^(_))^(((-)(([))^)^((])((v)(=))^)^(((|))^(/)(*)(S)(*)(-)([)(])(v)(~)(%)($)(_)(=)(-)(>)(+)(<)(^)(-)(-)(-)(-))^)^)^(((-)(([))^((.))^(H))^(((e)((l))^)^(([)(([)([))^)^((([))^([)(])(o)(,)(W)(o)(])(])(])(])(])(v)(r)(l))^)^)^(((d)((!))^((v))^(v))^(((v)((v))^)^((v)((|)(-))^)^((([))^(])(v)(/)()^(*)(S)(*)(~)(%)(-)([)(])(v)($)(_)(=)(|))^)^)^(((/)((*))^((-))^([))^(((])((v))^)^((S)((*)(~))^)^(((%))^($)(_)(-)([)(])(v)(=)(|)(/)(*)(*))^)^)^(((*)((-))^(([))^(]))^(((v)((*))^)^((*)((*)(*))^)^(((*))^(*)(-)([))^)^)^)^

Here's a simplified version of it, with a bit of an explantion. From characters 503 through to 709 in the program.

(((-)((-))^((-))^([))^(((.)((H))^)^((e)((l)(l))^)^(((o))^(,)( )(W)()(o)()()(r)(l)(d)(!))^)^)^(((*)^((*)^)^((*)^)^(*)^)^(((*)^(()^)^)^((*)^((*)^(*)^)^)^(((*)^)^(*)^(*)^(*)^()^(*)^(*)^(*)^(S)^(<)^($)(_))^)^)^

Which essentially simplifies down to the following due to the ^'s. They put the top element of the stack back into the program repeatedly.

(-)(-)(-)([)(.)(H)(e)(l)(l)(o)(,)( )(W)()(o)()()(r)(l)(d)(!)***************S<($)(_)

From there we end up with a stack of

!:d:l:r:::o::W: :,:o:l:l:e:H:.:[:-:-:-:

The *'s concatenate the top element to the second element repeatedly and the S outputs it. The < causes the program to stop. The following are left on the stack. Of course the main program leaves a lot more.

.:[:-:-:-:

Tested here quite a bit:)

\$\endgroup\$
8
  • \$\begingroup\$ Are you sure it's printing "Hello, World!" and not "hello world" ? \$\endgroup\$ Aug 24, 2015 at 20:49
  • \$\begingroup\$ @aditsu Yes, its Hello, World!. Just double checked it :) \$\endgroup\$
    – MickyT
    Aug 24, 2015 at 20:51
  • \$\begingroup\$ Is it Parenthesis Hell? (It's just a crazy guess.) \$\endgroup\$ Aug 24, 2015 at 21:15
  • \$\begingroup\$ @kirbyfan64sos sorry it's not ... well it shouldn't be :) \$\endgroup\$
    – MickyT
    Aug 24, 2015 at 21:21
  • \$\begingroup\$ Is it Parenthetic? \$\endgroup\$
    – Alex A.
    Aug 25, 2015 at 4:09
8
\$\begingroup\$

Subskin, 1727 bytes

03 49 39 287 36 92 38 92 838 C2 90 389 27 39 57 38 126 35 87 2 9
48 32 51 8E E3 81 28  39  21 72 782873 828 E7328 827F3 728 7382 87
00 34 88 C2 83 82 83 84 732812 9378        7283 72873 7 6236 273 6263
0C 23 8A 32 B8 38 46 46       36 372 728 3822 34948 38 374384 8374
02 23 8838 32 A8 37 7 372 8 38283 82737 283 7323 23 234 6534
01 23 23 42 3 23 2323 3223
03 43 5A 34 34  3B 45 3 45 34 53 45     3 4 34 5345 345 34 55 233 2
01 423 322 323     23C 24 43 54 3443 56 6 4  34 04 F5 56 87 85
03 34 43 4652 26234 32 436 5F45  34 83658 


00 567 576  F3565  53 C6 5A65 6352 45 78154 71D425 7 154 4F54571 

00 325487234 57 9B BA 293 847 98 7 378 43 7D3 483 48 7 8374 873487 38108 

00 13498 49 835A796 31 67 93 9 9 13943 0340039498 713478 78 10 3408 7

65 13 D49 98 3C 948 84 37 C1 34 74 1F 39 13 49 86 163 1764 31 8C A7 34 18 8 364 8634B1138 477 

6C D437134 788 364 367134 8 3478341781 34 618813B741783 4 7446 8117 744 8731

6C 0A 92 83012 09385A782130 109247 5203 203 230 923087523 0 209

6F AA 92 3 1098274293912 310923 1290 B1 209 B129047 5423B908 

2C 92 D8 39 2398 272 93 84293 8239472 4 72932893 9823783 23



20 22 39 8923 48 92 3D 98 29 83 6C 62 38 92 05 A0 23 523982983 2398 26 37

57 23 72 34 87D2 48  2 8 029133 7548 26 23983297 64 2384972 39238

6F 23 49 029 32A39464 729  3832 E62 93 8 456239 842 9 2387462 498E

72 29 A2 39 84 82 47 287 426  8D23 8283  37464 24 62828 3 7326  238783 72

6C 23 32 87 92 38 723 78 92 3982 394DD6 25692345982 29632 3984 62893 39

64 23 89 48 A2 97423A987  98424 7293 8 3298674 6239 8 329847 236 4

21 24 97 37 49 2C 39 78     29E8 B3 84 6E 45 62 96 32 985562E3987 2 398429 48372
\$\endgroup\$
5
  • \$\begingroup\$ Is this a hex dump or plain text? \$\endgroup\$ Aug 27, 2015 at 17:32
  • \$\begingroup\$ Plain text, not a hex dump! \$\endgroup\$ Aug 27, 2015 at 17:46
  • \$\begingroup\$ Has SE removed some of the characters? \$\endgroup\$
    – galexite
    Aug 28, 2015 at 14:30
  • \$\begingroup\$ No characters are removed \$\endgroup\$ Aug 28, 2015 at 22:02
  • \$\begingroup\$ Wow, that looks like a difficult language. Nice work. \$\endgroup\$
    – DLosc
    Sep 3, 2015 at 19:47
8
\$\begingroup\$

Deadfish~, 24 bytes

wish("Hello, World"<<33)

Deadfish~ is such a perfect language for this game that I checked several times that the edit history in the Esolangs wiki and the commit history in Github for the interpreter actually predated the challenge. It seems some deity of whimsy, chance, and trickery was watching over me when the language was created and then when I clicked the Random button on the wiki. Although not quite enough for me to actually win...

Deadfish~, like its parent language Deadfish, uses single character commands interpreted from left to right. Here's a breakdown of what my program does:

w: Print "Hello, World!" (yes, with the capital W).
i: Increment the accumulator.
s: Square the accumulator.
h: Halt the program.
All further characters: Ignored.
\$\endgroup\$
4
  • 1
    \$\begingroup\$ The seven days are over. I'm looking forward to learn what the intended language was. \$\endgroup\$
    – Dennis
    Sep 7, 2015 at 4:50
  • 7
    \$\begingroup\$ Sorry, was afk getting married. \$\endgroup\$
    – histocrat
    Sep 7, 2015 at 14:03
  • 1
    \$\begingroup\$ Congratulations! -- I'm afraid this answer might be invalid. With a single accumulator, I don't see how addition (let alone primality testing) could be implemented in Deadfish~. \$\endgroup\$
    – Dennis
    Sep 7, 2015 at 16:54
  • \$\begingroup\$ Thanks! Fair enough, I may not have done my due diligence there. Thinking about it, since Deadfish~ has no input, the simplest way to represent a number n is with n consecutive is, so in that sense addition happens automatically. Testing whether a number is prime probably requires more sophistry than that, though. Maybe there's a way to use the quasi-modular arithmetic behavior but it's not obvious how. \$\endgroup\$
    – histocrat
    Sep 7, 2015 at 18:57
7
\$\begingroup\$

Fantom, 44 bytes, cracked by w0lf

class H{Void main(){echo("Hello, World!");}}
\$\endgroup\$
2
  • 2
    \$\begingroup\$ Fantom, right? \$\endgroup\$ Aug 17, 2015 at 9:09
  • \$\begingroup\$ @w0lf Yep, that's correct! \$\endgroup\$
    – ProgramFOX
    Aug 17, 2015 at 9:10
1
2
3 4 5
8

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.