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.


(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 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() {
    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+/);
        answers_hash[id] = a;
      if (!data.has_more) more_answers = false;
      comment_page = 1;

function getComments() {
    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)
      if (data.has_more) getComments();
      else if (more_answers) getAnswers();
      else process();


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() {  
  var vulnerable = [];
  var cops = [];
  var robbers_hash = {};
  var now = Date.now();
  answers.forEach(function (a) {
    var body = a.body;
    a.comments.forEach(function(c) {
        body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
    var match;
    if (VULNERABLE_REG.test(body)) {
        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);
          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.total_size += size;
          language: language,
          link: a.share_link,
        robbers_hash[user] = robber;
  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";
      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)
  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;
    answer = answer.replace("{{PLACE}}", lastPlace + ".")
                   .replace("{{NAME}}", a.user)
                   .replace("{{LANGUAGE}}", a.language)
                   .replace("{{SIZE}}", a.size)
                   .replace("{{LINK}}", a.link);
    answer = jQuery(answer)

  var robbers = [];
  for (var r in robbers_hash)
    if (robbers_hash.hasOwnProperty(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;
    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)
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">
      <tr><td>User</td><td>Size</td><td>Time Left</td></tr>
    <tbody id="vulnerable">

<div id="cops-leaderboard">
  <h2>Leaderboard of Safe Cops</h2>
  <table class="cops-leaderboard">
    <tbody id="cops">

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

<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>
<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>
<table style="display: none">
  <tbody id="robbers-template">

  • 108
    \$\begingroup\$ One minute of silence for those only capable of Piet programming. \$\endgroup\$ – user3819867 Aug 17 '15 at 8:20
  • 19
    \$\begingroup\$ There goes my productivity! \$\endgroup\$ – Luke Aug 17 '15 at 20:30
  • 11
    \$\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\$ – kirbyfan64sos Aug 26 '15 at 19:41

209 Answers 209

1 2 3 4 5 7

CJam, 28 bytes, cracked by Martin Büttner

"Hello, World!" PRINT -<s>-;

I'm not sure how hard this will be.

Edit: Super quickly cracked. Also my first (working) CJam program.

  • 2
    \$\begingroup\$ That's CJam. \$\endgroup\$ – Martin Ender Aug 17 '15 at 18:47
  • \$\begingroup\$ @MartinBüttner Correct. \$\endgroup\$ – PurkkaKoodari Aug 17 '15 at 18:50

MIPS, 100 bytes, cracked by Dennis

    out .asciiz "Hello, World!\n"
    li $v0, out
    la $a0, out
    li $v0, 10
  • 4
    \$\begingroup\$ Is it MIPS assembly? If yes, the first \n probably shouldn't be there. \$\endgroup\$ – Dennis Aug 18 '15 at 0:04

Foo, 28 bytes, cracked by Doorknob

Echo "Hello," and " World!".
  • \$\begingroup\$ This appears to work in the Foo language. \$\endgroup\$ – Doorknob Aug 19 '15 at 1:31
  • \$\begingroup\$ @Doorknob That's an accident, but yes, it does. \$\endgroup\$ – Dennis Aug 19 '15 at 1:33
  • \$\begingroup\$ @Dennis Out of curiosity, what was this intended to be in? \$\endgroup\$ – Doorknob Aug 19 '15 at 1:36
  • \$\begingroup\$ @Doorknob This is the second incarnation of this idea that works in another language. Give me one more try. \$\endgroup\$ – Dennis Aug 19 '15 at 1:37

GNU Make, 43 chars, Cracked by jimmy23013

def main():
        echo "Hello, World!"

The indentation is a tab, not 8 spaces.

When run without "-s", will print the echo command as well as run it. I should have used @echo to 100% obey the rules.

  • \$\begingroup\$ If the spaces are tabs, I'd guess gnu make running in quiet mode. \$\endgroup\$ – jimmy23013 Aug 19 '15 at 9:50
  • \$\begingroup\$ @jimmy23013, indeed. The quiet mode is my bad - I should have used @echo. I thought the @ is a give-away, yet the question rules seem to require it. But I mistakenly posted without it. \$\endgroup\$ – ugoren Aug 19 '15 at 12:11
  • 1
    \$\begingroup\$ stderr can be ignored, so I think you can just use Hello, World! without the echo "...". In fact I just thought about posting a make answer, but then I saw this. \$\endgroup\$ – jimmy23013 Aug 19 '15 at 13:22

Pascal, 149 bytes, cracked by ETHproductions

// Prints Hello, World!

The first line is supposed to be like simply a red herring which makes you think it might be a 2D language, but intended to distract you from thinking {...} and (*...*) also being comments, and the final end. as the super comment.


JavaScript 1.8, 135 bytes, cracked by Dennis

[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]='Programming puzzles and code golf!'
this[y+c+j+s+c+q+r][q+c+d]('Hello, World!');

I hope this one isn't too easy.

The first line will assign, each letter of the alphabet to their associated index in the string.

The next line will get evaluated to:

this["console"]["log"]('Hello, World!');
  • \$\begingroup\$ This is CoffeeScript. \$\endgroup\$ – Dennis Aug 20 '15 at 21:39
  • \$\begingroup\$ @Dennis yeah, It's JavaScript \$\endgroup\$ – Downgoat Aug 20 '15 at 21:39

Felix, 206 bytes, cracked by ceased to turn counterclockwis

var ^ =1;var % ="";begin{for c in"nkkdG"perform&%<-(char$^+c.ord)+*(&%);};end%.print;var / =list[int](43,31,86,110,113,107,99,32);println$"".strcat$(char of int).map$((curry$add of(int^2))$*(&^)).map$*(&/);
  • \$\begingroup\$ Could this be PHP? \$\endgroup\$ – mbomb007 Aug 21 '15 at 18:28
  • \$\begingroup\$ @mbomb007 Not even close. :) \$\endgroup\$ – kirbyfan64sos Aug 21 '15 at 18:39
  • \$\begingroup\$ Is it Turing by any chance? \$\endgroup\$ – aditsu quit because SE is EVIL Aug 21 '15 at 20:13
  • \$\begingroup\$ @aditsu Nope. Again, not close. \$\endgroup\$ – kirbyfan64sos Aug 21 '15 at 20:22
  • 1
    \$\begingroup\$ This looks quite like it could be Felix. \$\endgroup\$ – ceased to turn counterclockwis Aug 22 '15 at 0:33

Tri, 53 bytes, cracked by jimmy23013

int Main() {
  Display (Hello, World!);
  Return 1;
  • \$\begingroup\$ Seems to work in Grin :D \$\endgroup\$ – aditsu quit because SE is EVIL Aug 21 '15 at 22:16
  • \$\begingroup\$ @aditsu Nope, it prompts for user input in Grin (just tried it). \$\endgroup\$ – Doorknob Aug 21 '15 at 22:27
  • 6
    \$\begingroup\$ But it prints... why does it matter... ( ╯°□°)╯ ┻━━┻ \$\endgroup\$ – aditsu quit because SE is EVIL Aug 21 '15 at 22:29
  • 1
    \$\begingroup\$ Is this Tri? \$\endgroup\$ – jimmy23013 Aug 24 '15 at 15:13
  • \$\begingroup\$ @jimmy23103 Yes, it is. \$\endgroup\$ – Doorknob Aug 24 '15 at 16:47

Versert, 124 bytes, cracked by Sp3000

"Hello+ World!"1|{~.0*1|{~.0*1|{~.0*1|{~.0*1|{~.0*1|{~+~.0*1|{~.0*1|{~.0*1|{~.0*1|{~.0*1|{~.0*1|{~.0*1|{~.1~8**}}}}}}}}}}}}}
  • \$\begingroup\$ Would this be Versert? \$\endgroup\$ – Sp3000 Aug 26 '15 at 0:24
  • \$\begingroup\$ Yes! That one went down pretty fast. \$\endgroup\$ – Lynn Aug 26 '15 at 0:30

Blank, 221 bytes, cracked by Dennis

   {>}[ 0][10][0 ][80]{"}!dlroW, olleH{"}                           { v}

Blank ignores commands it doesn't know, and parses the commands line-by-line from left-to-right. The quotes have special meanings, which is why I added the [ 0][10][0 ][80] line.

In Befunge, it outputs {Hello ,W.

  • \$\begingroup\$ Now I KNOW I've seen this. I just need to find it again... or maybe you're just trying to make it look like it's what I think it is. \$\endgroup\$ – mbomb007 Aug 25 '15 at 0:00
  • \$\begingroup\$ Is that w in !dlrow, olleH supposed to be lowercase? \$\endgroup\$ – mbomb007 Aug 25 '15 at 0:01
  • \$\begingroup\$ @mbomb007 No. I'll fix that. \$\endgroup\$ – ASCIIThenANSI Aug 25 '15 at 15:40
  • \$\begingroup\$ You'll probably also want to change [119] to [87], then? \$\endgroup\$ – mbomb007 Aug 25 '15 at 16:38
  • 1
    \$\begingroup\$ This is Blank. \$\endgroup\$ – Dennis Aug 26 '15 at 5:18

Casio BASIC, 26 bytes, cracked by Dennis

"Hello, World!"⏎

Let's see if you can get it. It's rare, but can be found on Wikipedia.

There is NO way of inserting any other whitespace than space, and it can only be inserted in to a string. displays to denote a new line on the hardware.

WARNING: the previous code may not work in older versions of the language. I've made it so it does work now.

muhahahahaha... D'awww. It's been cracked before it was safe.

Basically, on a Casio programmable calculator, the program does the following things:

  1. Log 'Hello World'
  2. Open a dialog, asking for 'E', and stores it in B.
  3. Save B in variable A.
  4. Return the variable A as a result.
  • 1
    \$\begingroup\$ I still don't see a comma. Also, according to the question, you should provide a hexdump and add a header with your byte count. \$\endgroup\$ – Dennis Aug 26 '15 at 14:45
  • 1
    \$\begingroup\$ @georgeunix In that case, it may not be valid. We have to be able to test it. "Lastly, there must be a FREE... interpreter or compiler available for the language (at the time this challenge was posted)." \$\endgroup\$ – mbomb007 Aug 26 '15 at 14:53
  • 1
    \$\begingroup\$ That's why we need a hex dump. Are there two newlines or just one? Is it all unicode? \$\endgroup\$ – mbomb007 Aug 26 '15 at 14:57
  • 1
    \$\begingroup\$ I'll try a hex dump from a simulator. \$\endgroup\$ – georgeunix Aug 26 '15 at 14:58
  • 3
    \$\begingroup\$ Let me guess: Casio BASIC? \$\endgroup\$ – Dennis Aug 26 '15 at 17:26

Gibberish, 27 bytes, cracked by histocrat

0x[Hello, World!]

I tried very hard to make Gibberish not look like a stack-based language, but what's the point if somebody else had the same idea before?

How it works

0x              Switch to the instruction set 0.
[Hello, World!] Push the string "Hello, World!".
1x              Switch to the instruction set 1.
q               Print.
2x              Switch to the instruction set 2.
[?]             Push the string "?".
  • \$\begingroup\$ This is Gibberish. \$\endgroup\$ – histocrat Aug 26 '15 at 12:26
  • \$\begingroup\$ @histocrat I kinda saw this coming... \$\endgroup\$ – Dennis Aug 26 '15 at 13:40

Malbolge, 154 bytes, cracked by Shebang

('&%:9]!~}|z 2V xwv-,PO qponl $
Y5 5Vl2T oh QP++v;
x xvv us 8S q
Q42Hl 0/
[}|{y Vx Bedc>
rM_L nmk Hjhhf|Bd?
  • 2
    \$\begingroup\$ This has to be Malbolge! \$\endgroup\$ – Kade Aug 18 '15 at 16:55

Foo, 57 bytes, cracked by Sp3000

  • 1
    \$\begingroup\$ Is this Foo? (15 chars) \$\endgroup\$ – Sp3000 Aug 26 '15 at 18:46
  • \$\begingroup\$ @Sp3000 you got it :) \$\endgroup\$ – aditsu quit because SE is EVIL Aug 26 '15 at 18:48

Gnuplot, 51 bytes, cracked by Sp3000

set timestamp "off";
f(x)="Hello, World!
print f(1)

Edit: I just realized that it printed to STDERR. But arguably that's the closest alternative.

  • 1
    \$\begingroup\$ I'm going to take a guess and say Gnuplot (tested here) \$\endgroup\$ – Sp3000 Aug 18 '15 at 0:48
  • \$\begingroup\$ Is this matlab? \$\endgroup\$ – user41805 Aug 18 '15 at 4:45

mk, 153 bytes

Take 4! Now prints a special message in every shell I can think of (including Fish and Bash; try it) and is guarded against Foo.

#ifndef __linux
#include "x.h"
#define X/*\
+++++++++++++++++++++_+++++++++++++....Hello World!?:Q:
    echo "Hell$a, World!"
    int m(){}

mk is the Plan 9 version of classic make. I had had a conversation with Martin Büttner in the comments (which later got removed by the mods :( ) about the fact that mk has no Wikipedia article (although I could've sworn it did at the time of this posting), but it is mentioned under the general make article. Since it's super similar to make, I figured it still worked. *crosses fingers*

In reality, this would also work perfectly in Posix make. Well, almost perfectly. See, there are two differences between make and mk that this depends on:

  1. Shell commands are evaluated after the file is parsed. This means that the value of a when the rule is run is o, even though it's empty until then.
  2. 4-space indentation. This one isn't really necessary. I could've easily used a tab instead, which would mean the only difference this answer depends on is #1.

Condit, 60 bytes

when H < "Foo?"
  set H = "Hello, World!"
  put H

The website that hosted the spec is down, but the tarball of this interpreter includes the spec and a few examples.

I could have written the program as

when H=""then set H="Hello, World!"put H

with a linefeed, but I wanted to make it look less esoteric (and this would still work in Foo).

Condit programs always consist of an infinite loop that is broken once no statement gets executed. Thus, the variable H is not only Foo protection, but necessary to greet the World only once.

The rest of the program is pretty self-explanatory.

  • \$\begingroup\$ Reminds me of SQL, but I don't think it is... \$\endgroup\$ – mbomb007 Aug 28 '15 at 14:10
  • \$\begingroup\$ @mbomb007 If that's a guess, I'll check. \$\endgroup\$ – Dennis Aug 28 '15 at 16:25
  • \$\begingroup\$ It's not a guess. I checked. I'm only commenting to share my thoughts with other would-be/hopeful robbers. \$\endgroup\$ – mbomb007 Aug 28 '15 at 18:07

Marbelous, 107 bytes, cracked by Sp3000


This is probably rather easy. Doesn't matter, had fun.

The 'w' is in lowercase instead of upper, sorry for that.

  • 3
    \$\begingroup\$ I do believe this is Marbelous, but the w is lowercase \$\endgroup\$ – Sp3000 Aug 17 '15 at 14:27
  • \$\begingroup\$ Oh, darn. You are, of course correct. It'll probably be best if I don't edit this any more. \$\endgroup\$ – EagleV_Attnam Aug 17 '15 at 14:29
  • \$\begingroup\$ Glad you had fun with Marbelous :) (unfortunately the overall character set gives it away) \$\endgroup\$ – Sp3000 Aug 17 '15 at 14:31
  • \$\begingroup\$ Yes, the characters appearing in pairs are dead giveaways. \$\endgroup\$ – EagleV_Attnam Aug 17 '15 at 14:33

(Intel) Fortran-90, 39 bytes, cracked by Alex A.

Here's one:

program end
print *,"Hello, World!"
  • 2
    \$\begingroup\$ Is it Fortran 90? \$\endgroup\$ – Alex A. Aug 17 '15 at 18:30
  • \$\begingroup\$ @AlexA. It appears to be a mix of FORTRAN 70 and FORTRAN 90. Never seen that before. \$\endgroup\$ – user42003 Aug 17 '15 at 19:14
  • 2
    \$\begingroup\$ @Kslkgh It works as expected in Fortran 90. \$\endgroup\$ – Alex A. Aug 17 '15 at 19:23
  • \$\begingroup\$ @Kslkgh: Just F90, as far as I know.... There's certainly similarities. What made you say F70? (I've not heard of that!) \$\endgroup\$ – jvriesem Aug 17 '15 at 21:28
  • \$\begingroup\$ @jvriesem Sorry, I meant F77. F90 has lowercase keywords but F77 uses END. I'm just used to seeing end program NAME in F90. \$\endgroup\$ – user42003 Aug 18 '15 at 7:15

Retina, 15 bytes, cracked by Dennis

Hello, World!

Each line is in a separate file.

  • \$\begingroup\$ Retina. (15 chars) \$\endgroup\$ – Dennis Aug 17 '15 at 22:22

Z80, 28 bytes, cracked by Dennis

  • 2
    \$\begingroup\$ Z80 machine code. \$\endgroup\$ – Dennis Aug 17 '15 at 23:56
  • 1
    \$\begingroup\$ That C9 (ret) kinda gives it away :-) \$\endgroup\$ – Luis Mendo Aug 19 '15 at 17:07
  • 2
    \$\begingroup\$ Saying just "Z80" is not enough. This code does a RST 28h, which is a subroutine call ... somewhere. This means the program depends on a standard library which does comes with some platform. Therefore the platform name should be part of a complete answer. \$\endgroup\$ – Stig Hemmer Aug 20 '15 at 8:14
  • \$\begingroup\$ A couple of years too late, but the platform name should be "TI-83 Plus calculator". This should also work on the TI-83+ SE, TI-84+, and TI-84+ SE. On the quite-similar TI-83 (in one direction) and TI-84 + C(S)E (in the other), this wouldn't work: the EFs would be replaced with ordinary CD calls, and I believe that the memory addresses for the color edition are different as well. \$\endgroup\$ – Misha Lavrov Nov 27 '17 at 19:15

Ruby, 41 Bytes, cracked by vihan

print -> (){
  'Hello, World!'


Thought this might be an interesting language to do it in. I'm gonna guess most people haven't seen code quite like this.


I wanted to see how Un-Ruby-like I could make the code. I figured that the stab operator (->) wouldn't be familiar to everybody, especially when separated with unusual whitespace.

I tried to make it look like I was defining and invoking a custom 'print' function. In fact, the first expression creates an anonymous function that returns the string 'Hello, World!', then immediately invokes it with []. The result is passed to the built-in print function to put it on the screen.

The line at the end is meaningless in this example. I wanted it to look like an invocation of my own custom print, but it's really just printing nothing to the screen. I could have removed it entirely, but I was hoping it would be a source of confusion.

  • 1
    \$\begingroup\$ It works in Ruby \$\endgroup\$ – Downgoat Aug 18 '15 at 23:06
  • \$\begingroup\$ Nice one, the meaningless parens threw me off. \$\endgroup\$ – histocrat Aug 19 '15 at 0:33
  • \$\begingroup\$ @vihan's got it! \$\endgroup\$ – KChaloux Aug 19 '15 at 12:08

InDec, 258 bytes, cracked by Dennis

a @ N {N ++}
b @ N {N a a}
c @ N {N b b}
d @ N {N c c}
e @ N {N d d}
f @ N {N e e}
g @ N {N f f}
noop @ N {}

SP f
H g d
E g f c a
L g f
L d c
O g f d
C f d c
W g e c b a
O c b a
R g f e b
L noop
D g f c
BANG f a

H&,E&,L&,L&,O&,C&,SP&,W&,O&,R&,L&,D&,BANG& .
  • \$\begingroup\$ This has to be InDec. \$\endgroup\$ – Dennis Aug 21 '15 at 19:21
  • 1
    \$\begingroup\$ @Dennis: Yes, yes it is. \$\endgroup\$ – SuperJedi224 Aug 21 '15 at 20:41

Muriel, 28 bytes, cracked by Sp3000

P:"Hello,\ World!";.

The backslash is just Foo protection. P: saves the string in a variable and .P prints it. RINT P is a no-op, since :P wasn't followed by ;.

An unobfuscated version of the above code would look like

P:"Hello, World!";

or simply

."Hello, World!"
  • 1
    \$\begingroup\$ I believe this is Muriel \$\endgroup\$ – Sp3000 Aug 22 '15 at 17:21
  • \$\begingroup\$ @Sp3000 That's correct! \$\endgroup\$ – Dennis Aug 22 '15 at 17:22

PATH, 509 bytes, cracked by alephalpha


My attempt. Don't know if it's easy or hard.

  • 1
    \$\begingroup\$ Is it PATH? \$\endgroup\$ – alephalpha Aug 23 '15 at 6:39
  • \$\begingroup\$ @alephalpha Well, I guess it's good that it lasted a few hours... \$\endgroup\$ – The_Basset_Hound Aug 23 '15 at 14:33

Rail, 195 Bytes, Cracked by Alex A.

$'main' 'World!','Hello' <<
.| .. !%__@! m  *$! 0x22 %# g
.|"% ++.[[+,$/-[, ]o-\ print H,W!
.\-[Hello]o-/[~==*+) | ----- ^^^*
>..^:~$==^ +[]]^:S^+ \-[World!\n\]o#

Should be cracked in seconds, but it was a bit of fun to do.

  • 1
    \$\begingroup\$ Is this Rail? \$\endgroup\$ – Alex A. Aug 23 '15 at 21:37
  • 2
    \$\begingroup\$ It's a shame one can't get around the $...'main' isn't it? :/ \$\endgroup\$ – Martin Ender Aug 23 '15 at 21:39
  • \$\begingroup\$ @AlexA. it is rail and yep the $ 'main' is the big give away:) \$\endgroup\$ – MickyT Aug 23 '15 at 21:48

Jasmin, 274 bytes, cracked by BrainSteel

.class public M
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 2
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello, World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
.end method

Jasmin is an assembler for the JVM.

  • 3
    \$\begingroup\$ Is this code for the Jasmin assembler? :D \$\endgroup\$ – BrainSteel Aug 24 '15 at 2:47

Foo, 61 bytes, Cracked by Dennis

Display "Hello, World!".
Stop eating large quantities of food.
  • \$\begingroup\$ This should work in Foo. \$\endgroup\$ – Dennis Aug 24 '15 at 18:25
  • \$\begingroup\$ Addendum, now that I'm at a computer: This works in Foo. \$\endgroup\$ – Dennis Aug 24 '15 at 19:02
  • \$\begingroup\$ @Dennis I didn't intend for this to work in foo :( \$\endgroup\$ – TheNumberOne Aug 24 '15 at 19:25
  • 14
    \$\begingroup\$ @TheNumberOne: Welcome to the club! \$\endgroup\$ – nimi Aug 24 '15 at 21:11
  • 2
    \$\begingroup\$ So what was it supposed to be? \$\endgroup\$ – msh210 May 18 '16 at 22:13

Io, 162 bytes, cracked by Shebang

/**#[[[[]]]**/a/***/ := /**#print****?w;*/block(b,/*,a*/c,b+c)//"Hello,"," World!"//
/*//#print#*/"Hello, World!"/* */ /*?*!*/println/****!!*///
  • \$\begingroup\$ I think the comments are a false alarm. If I pass this through the C preprocessor (which removes the comments), I get this. \$\endgroup\$ – kirbyfan64sos Aug 26 '15 at 16:47
  • \$\begingroup\$ It's also not a valid sed program, so the ;d is also a false alarm. \$\endgroup\$ – kirbyfan64sos Aug 26 '15 at 16:47
  • \$\begingroup\$ That's interesting! \$\endgroup\$ – georgeunix Aug 26 '15 at 16:56
  • 3
    \$\begingroup\$ Is it Io by chance? \$\endgroup\$ – Kade Aug 26 '15 at 18:06

Whenever, 30 bytes, cracked by Dennis

1 print("Hello, World"+U(33));
  • 1
    \$\begingroup\$ This is Whenever. \$\endgroup\$ – Dennis Aug 27 '15 at 3:14
  • \$\begingroup\$ @Dennis Whatever :| \$\endgroup\$ – TheNumberOne Aug 27 '15 at 4:40
1 2 3 4 5 7

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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