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
  • 115
    \$\begingroup\$ One minute of silence for those only capable of Piet programming. \$\endgroup\$ Commented Aug 17, 2015 at 8:20
  • 23
    \$\begingroup\$ There goes my productivity! \$\endgroup\$
    – Luke
    Commented 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\$ Commented Aug 26, 2015 at 19:41

215 Answers 215

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

Prelude, 173 bytes, cracked by Martin Büttner

9.~<-:o*~,,-~+.^+~&**.*,,v+~::*:.v^^~<>+<vo:&>!oo+o*ov~^&7-&!v!<&!v3+:~<*v!<2.9o~+v+:o<^+:*^<v.>~:*!8.v..,~+ov&+<&!<:.<~+&<1-&!*:vo>!o3*+!v.:*.&o!8-:,>&!,o3*-~*>+*<+&&.!.<8:

Here's a warmup one from me.


Throwing out two-thirds of filler leaves the following program:

9--+^+v+v^^+v!+v^7-!v!!v3+v!29+v+^+^v!8v+v+!+1-!v!3+!v!8-!3-++!

Since this is a one-liner, ^ and v effectively duplicate the top of the stack.

\$\endgroup\$
2
  • 2
    \$\begingroup\$ Looks like Prelude to me. :) \$\endgroup\$ Commented Aug 17, 2015 at 8:55
  • \$\begingroup\$ @Martin Correct :) \$\endgroup\$
    – Sp3000
    Commented Aug 17, 2015 at 8:56
4
\$\begingroup\$

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.

\$\endgroup\$
2
  • 2
    \$\begingroup\$ That's CJam. \$\endgroup\$ Commented Aug 17, 2015 at 18:47
  • \$\begingroup\$ @MartinBüttner Correct. \$\endgroup\$ Commented Aug 17, 2015 at 18:50
4
\$\begingroup\$

MIPS, 100 bytes, cracked by Dennis

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

Foo, 28 bytes, cracked by Doorknob

Echo "Hello," and " World!".
\$\endgroup\$
4
  • \$\begingroup\$ This appears to work in the Foo language. \$\endgroup\$
    – Doorknob
    Commented Aug 19, 2015 at 1:31
  • \$\begingroup\$ @Doorknob That's an accident, but yes, it does. \$\endgroup\$
    – Dennis
    Commented Aug 19, 2015 at 1:33
  • \$\begingroup\$ @Dennis Out of curiosity, what was this intended to be in? \$\endgroup\$
    – Doorknob
    Commented Aug 19, 2015 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
    Commented Aug 19, 2015 at 1:37
4
\$\begingroup\$

GNU Make, 43 chars, Cracked by jimmy23013

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

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.

\$\endgroup\$
3
  • \$\begingroup\$ If the spaces are tabs, I'd guess gnu make running in quiet mode. \$\endgroup\$
    – jimmy23013
    Commented Aug 19, 2015 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
    Commented Aug 19, 2015 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
    Commented Aug 19, 2015 at 13:22
4
\$\begingroup\$

Pascal, 149 bytes, cracked by ETHproductions

// Prints Hello, World!
begin{stdout}
write((*));
.stdout=on;
if((*)(#72#101#108#108#111#44#32#87#111#114#108#100#33)){
proceed((*));
}
end{stdout}
.stdout=off;

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.

\$\endgroup\$
1
  • \$\begingroup\$ Works in Pascal. \$\endgroup\$ Commented Aug 20, 2015 at 16:33
4
\$\begingroup\$

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!');
\$\endgroup\$
2
  • \$\begingroup\$ This is CoffeeScript. \$\endgroup\$
    – Dennis
    Commented Aug 20, 2015 at 21:39
  • \$\begingroup\$ @Dennis yeah, It's JavaScript \$\endgroup\$
    – Downgoat
    Commented Aug 20, 2015 at 21:39
4
\$\begingroup\$

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$*(&/);
\$\endgroup\$
7
  • \$\begingroup\$ Could this be PHP? \$\endgroup\$
    – mbomb007
    Commented Aug 21, 2015 at 18:28
  • \$\begingroup\$ @mbomb007 Not even close. :) \$\endgroup\$ Commented Aug 21, 2015 at 18:39
  • \$\begingroup\$ Is it Turing by any chance? \$\endgroup\$ Commented Aug 21, 2015 at 20:13
  • \$\begingroup\$ @aditsu Nope. Again, not close. \$\endgroup\$ Commented Aug 21, 2015 at 20:22
  • 1
    \$\begingroup\$ This looks quite like it could be Felix. \$\endgroup\$ Commented Aug 22, 2015 at 0:33
4
\$\begingroup\$

Tri, 53 bytes, cracked by jimmy23013

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

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**}}}}}}}}}}}}}
\$\endgroup\$
2
  • \$\begingroup\$ Would this be Versert? \$\endgroup\$
    – Sp3000
    Commented Aug 26, 2015 at 0:24
  • \$\begingroup\$ Yes! That one went down pretty fast. \$\endgroup\$
    – lynn
    Commented Aug 26, 2015 at 0:30
4
\$\begingroup\$

Blank, 221 bytes, cracked by Dennis

   {v}
   {>}[ 0][10][0 ][80]{"}!dlroW, olleH{"}                           { v}
[10][33][100][108][114][111][87][32][44][111][108][108][101][72]
{,}{,}{,}{,}{,}{,}{,}{,}{,}{,}{,}{,}{,}{@}{,}{,}{,}{,}{,}{,}{,}{,}{,}{<}{,}

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.

\$\endgroup\$
11
  • \$\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
    Commented Aug 25, 2015 at 0:00
  • \$\begingroup\$ Is that w in !dlrow, olleH supposed to be lowercase? \$\endgroup\$
    – mbomb007
    Commented Aug 25, 2015 at 0:01
  • \$\begingroup\$ @mbomb007 No. I'll fix that. \$\endgroup\$ Commented Aug 25, 2015 at 15:40
  • \$\begingroup\$ You'll probably also want to change [119] to [87], then? \$\endgroup\$
    – mbomb007
    Commented Aug 25, 2015 at 16:38
  • 1
    \$\begingroup\$ This is Blank. \$\endgroup\$
    – Dennis
    Commented Aug 26, 2015 at 5:18
4
\$\begingroup\$

Casio BASIC, 26 bytes, cracked by Dennis

"Hello, World!"⏎
"E"?→B⏎
B→A⏎
A⌟

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.
\$\endgroup\$
13
  • 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
    Commented Aug 26, 2015 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
    Commented Aug 26, 2015 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
    Commented Aug 26, 2015 at 14:57
  • 1
    \$\begingroup\$ I'll try a hex dump from a simulator. \$\endgroup\$
    – galexite
    Commented Aug 26, 2015 at 14:58
  • 3
    \$\begingroup\$ Let me guess: Casio BASIC? \$\endgroup\$
    – Dennis
    Commented Aug 26, 2015 at 17:26
4
\$\begingroup\$

Gibberish, 27 bytes, cracked by histocrat

0x[Hello, World!]
1xq
2x[?]

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 "?".
\$\endgroup\$
2
  • \$\begingroup\$ This is Gibberish. \$\endgroup\$
    – histocrat
    Commented Aug 26, 2015 at 12:26
  • \$\begingroup\$ @histocrat I kinda saw this coming... \$\endgroup\$
    – Dennis
    Commented Aug 26, 2015 at 13:40
4
\$\begingroup\$

Malbolge, 154 bytes, cracked by Shebang

('&%:9]!~}|z 2V xwv-,PO qponl $
Hjihf|B@@>`=<M:9q
Y5 5Vl2T oh QP++v;
(I&%$""`CX|@?
x xvv us 8S q
Q42Hl 0/
.Cy+@d(a`N_9]~
[}|{y Vx Bedc>
rM_L nmk Hjhhf|Bd?
\$\endgroup\$
1
  • 2
    \$\begingroup\$ This has to be Malbolge! \$\endgroup\$
    – Kade
    Commented Aug 18, 2015 at 16:55
4
\$\begingroup\$

Foo, 57 bytes, cracked by Sp3000

@10@33@100@108@114@111@87@32@44@111@108@108@101@72(10&$c)
\$\endgroup\$
2
  • 1
    \$\begingroup\$ Is this Foo? (15 chars) \$\endgroup\$
    – Sp3000
    Commented Aug 26, 2015 at 18:46
  • \$\begingroup\$ @Sp3000 you got it :) \$\endgroup\$ Commented Aug 26, 2015 at 18:48
4
\$\begingroup\$

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.

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

Condit, 60 bytes

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

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.

\$\endgroup\$
3
  • \$\begingroup\$ Reminds me of SQL, but I don't think it is... \$\endgroup\$
    – mbomb007
    Commented Aug 28, 2015 at 14:10
  • \$\begingroup\$ @mbomb007 If that's a guess, I'll check. \$\endgroup\$
    – Dennis
    Commented Aug 28, 2015 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
    Commented Aug 28, 2015 at 18:07
4
\$\begingroup\$

Whitespace, 168 bytes cracked by pppery

Looks like:

  print("Hello World")





Try it to find out

\$\endgroup\$
4
  • \$\begingroup\$ Works in Whitespace \$\endgroup\$ Commented May 29, 2020 at 20:00
  • \$\begingroup\$ Nice job! I thought that would be tough. \$\endgroup\$
    – Ari
    Commented May 29, 2020 at 20:26
  • \$\begingroup\$ It wasn't. You threw me off for a moment, though, as I was about to say "this works in Python, and the fact that it does makes this answer so obvious it's not a serious contender and subject to deletion", before realizing it doesn't actually work in Python because of the leading whitespace. \$\endgroup\$ Commented May 29, 2020 at 21:21
  • \$\begingroup\$ Yeah, I started with no spaces and unfortunately Python doesn't care about trailing whitespace. \$\endgroup\$
    – Ari
    Commented May 30, 2020 at 0:29
3
\$\begingroup\$

Marbelous, 107 bytes, cracked by Sp3000

50//45<<71FF//5B>><<10>>64
+126+26C04\/6C+E6F+1//<4>F
++/\-D-F>F+5>F--~~\\+31F--
--48+F+F+1\/00+4~~65+D/\++

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


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

\$\endgroup\$
4
  • 3
    \$\begingroup\$ I do believe this is Marbelous, but the w is lowercase \$\endgroup\$
    – Sp3000
    Commented Aug 17, 2015 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\$ Commented Aug 17, 2015 at 14:29
  • \$\begingroup\$ Glad you had fun with Marbelous :) (unfortunately the overall character set gives it away) \$\endgroup\$
    – Sp3000
    Commented Aug 17, 2015 at 14:31
  • \$\begingroup\$ Yes, the characters appearing in pairs are dead giveaways. \$\endgroup\$ Commented Aug 17, 2015 at 14:33
3
\$\begingroup\$

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

Here's one:

program end
print *,"Hello, World!"
end
\$\endgroup\$
5
  • 2
    \$\begingroup\$ Is it Fortran 90? \$\endgroup\$
    – Alex A.
    Commented Aug 17, 2015 at 18:30
  • \$\begingroup\$ @AlexA. It appears to be a mix of FORTRAN 70 and FORTRAN 90. Never seen that before. \$\endgroup\$
    – user42003
    Commented Aug 17, 2015 at 19:14
  • 2
    \$\begingroup\$ @Kslkgh It works as expected in Fortran 90. \$\endgroup\$
    – Alex A.
    Commented Aug 17, 2015 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
    Commented Aug 17, 2015 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
    Commented Aug 18, 2015 at 7:15
3
\$\begingroup\$

Retina, 15 bytes, cracked by Dennis

.*
Hello, World!

Each line is in a separate file.

\$\endgroup\$
1
  • \$\begingroup\$ Retina. (15 chars) \$\endgroup\$
    – Dennis
    Commented Aug 17, 2015 at 22:22
3
\$\begingroup\$

Z80, 28 bytes, cracked by Dennis

219F9D
EF0A45
EF2E45
C9
48692100
\$\endgroup\$
4
  • 2
    \$\begingroup\$ Z80 machine code. \$\endgroup\$
    – Dennis
    Commented Aug 17, 2015 at 23:56
  • 1
    \$\begingroup\$ That C9 (ret) kinda gives it away :-) \$\endgroup\$
    – Luis Mendo
    Commented Aug 19, 2015 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\$ Commented Aug 20, 2015 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\$ Commented Nov 27, 2017 at 19:15
3
\$\begingroup\$

Ruby, 41 Bytes, cracked by vihan

print -> (){
  'Hello, World!'
}[]

print

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

Update

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.

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

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& .
\$\endgroup\$
2
  • \$\begingroup\$ This has to be InDec. \$\endgroup\$
    – Dennis
    Commented Aug 21, 2015 at 19:21
  • 1
    \$\begingroup\$ @Dennis: Yes, yes it is. \$\endgroup\$ Commented Aug 21, 2015 at 20:41
3
\$\begingroup\$

Muriel, 28 bytes, cracked by Sp3000

P:"Hello,\ World!";.
PRINT P

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!";
.P

or simply

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

PATH, 509 bytes, cracked by alephalpha

$+++++\+++++/
v+++++/+++++\/+++\
\+++++/+++++/+++++\
/+++++/+++++/+++++/
+-----+
+-----+
+-----+
+-----+
+-----+
\+++++/+++++/^---!-----------/------------\
/+++++/++++++/+++++/+++++\+++v+\+++++/++++.\
\++.++/++++++++++/-+-+++++++./++++++++++++/
/.++++/++..\+++++\++++++++++\
\+++++/.+++/
v++++}/
>++++++++++++++++++++++++++++^
/+++++++++++++++++++++++++++/-v
+++/\//---------------------/
+++--+-
+++-.+-
+++--+-
+++--.-
+++----
+++.-+-
++++-+-
++++-+-
++++-.-
+++.-.-
\.{/.+-
/{{/\}/#.---------------------/

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

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

Rail, 195 Bytes, Cracked by Alex A.

$'main' 'World!','Hello' <<
.\3vvvvvv......2vv....4vvvvvvvvv
.| .. !%__@! 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.

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

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
return
.end method

Jasmin is an assembler for the JVM.

\$\endgroup\$
1
  • 3
    \$\begingroup\$ Is this code for the Jasmin assembler? :D \$\endgroup\$
    – BrainSteel
    Commented Aug 24, 2015 at 2:47
3
\$\begingroup\$

Foo, 61 bytes, Cracked by Dennis

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

Io, 162 bytes, cracked by Shebang

////#*eee*;#/a;d
/**#[[[[]]]**/a/***/ := /**#print****?w;*/block(b,/*,a*/c,b+c)//"Hello,"," World!"//
/*//#print#*/"Hello, World!"/* */ /*?*!*/println/****!!*///
\$\endgroup\$
4
  • \$\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\$ Commented Aug 26, 2015 at 16:47
  • \$\begingroup\$ It's also not a valid sed program, so the ;d is also a false alarm. \$\endgroup\$ Commented Aug 26, 2015 at 16:47
  • \$\begingroup\$ That's interesting! \$\endgroup\$
    – galexite
    Commented Aug 26, 2015 at 16:56
  • 3
    \$\begingroup\$ Is it Io by chance? \$\endgroup\$
    – Kade
    Commented Aug 26, 2015 at 18:06
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.