189
\$\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\$
  • 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

12
\$\begingroup\$

Linotte, 47 bytes, cracked by ProgramFOX

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

waves baguette

\$\endgroup\$
  • 2
    \$\begingroup\$ I think it's Linotte. \$\endgroup\$ – ProgramFOX Aug 17 '15 at 14:26
  • 2
    \$\begingroup\$ @ProgramFOX C'est exact \$\endgroup\$ – Fatalize Aug 17 '15 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\$
  • 8
    \$\begingroup\$ Most of the short stories I read don't end with -13>. \$\endgroup\$ – Alex A. Aug 19 '15 at 2:30
  • 14
    \$\begingroup\$ That's an... emoticon. \$\endgroup\$ – Dennis Aug 19 '15 at 2:31
  • 1
    \$\begingroup\$ Works in Clip. \$\endgroup\$ – jimmy23013 Aug 19 '15 at 7:33
  • \$\begingroup\$ @jimmy23013 It wasn't supposed to, but it does. \$\endgroup\$ – Dennis Aug 19 '15 at 8:05
  • \$\begingroup\$ I tested it in the online Pyth interpreter, but was scared off by the errors. Tricky, tricky.... \$\endgroup\$ – ETHproductions Aug 19 '15 at 14:33
12
\$\begingroup\$

Foo, 38 bytes, cracked by kirbyfan64sos

fn main(0){println!("Hello, World!");}
\$\endgroup\$
  • \$\begingroup\$ This looks like Rust. \$\endgroup\$ – Dennis Aug 18 '15 at 23:22
  • \$\begingroup\$ @Dennis Nope, not Rust. (Very very close, though.) ;) \$\endgroup\$ – Doorknob Aug 18 '15 at 23:22
  • \$\begingroup\$ Oh, well. +1 for that sneaky 0. \$\endgroup\$ – Dennis Aug 18 '15 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\$ – kirbyfan64sos Aug 19 '15 at 22:38
  • \$\begingroup\$ @kirbyfan64sos Yep! (This was intended to be Foo that looks like Rust.) \$\endgroup\$ – Doorknob Aug 19 '15 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\$
  • \$\begingroup\$ If this is C++, the capitalization is wrong. \$\endgroup\$ – Dennis Aug 17 '15 at 19:48
  • \$\begingroup\$ You're right, this is not C++. \$\endgroup\$ – Luke Aug 17 '15 at 19:52
  • \$\begingroup\$ Maybe brainfuck? \$\endgroup\$ – Beta Decay Aug 17 '15 at 21:17
  • 1
    \$\begingroup\$ Maybe this is a language where # is a comment? \$\endgroup\$ – Cows quack Aug 18 '15 at 4:48
  • 2
    \$\begingroup\$ This must be Boolfuck! \$\endgroup\$ – aditsu Aug 21 '15 at 21:48
11
\$\begingroup\$

GolfScript, 369 bytes, cracked by ProgramFOX

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

Wait a second, did I forget a paren somewhere?

\$\endgroup\$
  • 4
    \$\begingroup\$ I think it's GolfScript. \$\endgroup\$ – ProgramFOX Aug 17 '15 at 16:50
  • 34
    \$\begingroup\$ @ProgramFOX Well that lasted a whole 48 seconds. ;( \$\endgroup\$ – Doorknob Aug 17 '15 at 16:50
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\$
  • 1
    \$\begingroup\$ This is Python 3. \$\endgroup\$ – SuperJedi224 Aug 22 '15 at 11:18
  • \$\begingroup\$ @SuperJedi224 Not quite. The string contains a linefeed and print appends a second one. \$\endgroup\$ – Dennis Aug 22 '15 at 12:47
  • \$\begingroup\$ I tried BrainF*** as well, but that omits the ! \$\endgroup\$ – SuperJedi224 Aug 22 '15 at 12:50
  • \$\begingroup\$ And ><> prints 10-2 and then gets stuck in an infinite loop. \$\endgroup\$ – SuperJedi224 Aug 22 '15 at 14:01
  • 1
    \$\begingroup\$ @BassetHound That would be a huge coincidence. \$\endgroup\$ – Dennis Aug 23 '15 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\$
  • \$\begingroup\$ In GolfScript it outputs {Hello, World!}. A compiler. \$\endgroup\$ – DDPWNAGE Aug 17 '15 at 6:56
  • 7
    \$\begingroup\$ Is this Hollow? \$\endgroup\$ – Sp3000 Aug 17 '15 at 6:57
10
\$\begingroup\$

GolfScript, 41 bytes, cracked by ProgramFOX

begin
   stdout_print "Hello, World!"
end
\$\endgroup\$
  • 4
    \$\begingroup\$ I guess it's GolfScript. \$\endgroup\$ – ProgramFOX Aug 17 '15 at 12:06
  • \$\begingroup\$ @ProgramFOX Yes, it is. :) \$\endgroup\$ – Cristian Lupascu Aug 17 '15 at 12:07
10
\$\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\$
  • 1
    \$\begingroup\$ Nope, it's not Beatnik. \$\endgroup\$ – Geobits Aug 17 '15 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 '15 at 22:57
  • 2
    \$\begingroup\$ @Geobits That's because I was asleep for those three hours :P \$\endgroup\$ – Sp3000 Aug 17 '15 at 23:01
  • 19
    \$\begingroup\$ @Sp3000 You should sleep longer. You need at least 168 hours of solid sleep to be healthy. \$\endgroup\$ – Geobits Aug 17 '15 at 23:15
  • 2
    \$\begingroup\$ Someone should arrange a score to these lyrics... \$\endgroup\$ – h.j.k. Aug 19 '15 at 15:18
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\$
  • 1
    \$\begingroup\$ Would this be Wordfuck? \$\endgroup\$ – Sp3000 Aug 20 '15 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 '15 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\$
  • 13
    \$\begingroup\$ Some of the most readable Perl I've seen ;) \$\endgroup\$ – primo Aug 25 '15 at 10:35
  • 2
    \$\begingroup\$ @primo I hope that's incorrect. :P \$\endgroup\$ – Dennis Aug 25 '15 at 13:26
  • 9
    \$\begingroup\$ eval mode? Should be evil mode. \$\endgroup\$ – Rohcana Aug 25 '15 at 15:05
10
\$\begingroup\$

Finite Groups, 21 bytes, cracked by nimi

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

Now 100% O-proof.

\$\endgroup\$
  • \$\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 '15 at 14:47
  • \$\begingroup\$ @mbomb007 It works in Clip. \$\endgroup\$ – Dennis Aug 27 '15 at 14:48
  • \$\begingroup\$ I would say it's Pyth, but I get a SyntaxError from Python! \$\endgroup\$ – georgeunix Aug 28 '15 at 14:16
  • \$\begingroup\$ @georgeunix Not Pyth then. :P \$\endgroup\$ – Dennis Aug 28 '15 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 '15 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\$
  • \$\begingroup\$ Just to double-check, are you sure that the output ends with a !? \$\endgroup\$ – ProgramFOX Aug 25 '15 at 8:50
  • \$\begingroup\$ @ProgramFOX in the intended language, it does. \$\endgroup\$ – primo Aug 25 '15 at 9:04
  • \$\begingroup\$ It's not Python. Would've been too easy. \$\endgroup\$ – mbomb007 Aug 25 '15 at 16:45
9
\$\begingroup\$

><>, 82 bytes, cracked by Sp3000

version 1.0
\0: ~~ "Hello,"
\1: ?? " World!"
\4: ...
\n:   r>:~/
end;   ^?)<< data
\$\endgroup\$
  • 5
    \$\begingroup\$ I believe this is ><> (Fish). Nice use of version 1.0 though :) \$\endgroup\$ – Sp3000 Aug 17 '15 at 12:36
  • \$\begingroup\$ It is! I'm glad you liked it =) \$\endgroup\$ – Aaron Aug 17 '15 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\$
  • 3
    \$\begingroup\$ This is Glypho. \$\endgroup\$ – jimmy23013 Aug 17 '15 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\$ – Peter Taylor Aug 17 '15 at 17:11
9
\$\begingroup\$

SQL, 37 bytes, cracked by mbomb007

start: print 'Hello, World!' -- stop.
\$\endgroup\$
  • 3
    \$\begingroup\$ It works in MySQL. :) \$\endgroup\$ – mbomb007 Aug 17 '15 at 17:35
  • \$\begingroup\$ Yup, that's SQL. \$\endgroup\$ – Danko Durbić Aug 17 '15 at 17:54
  • 2
    \$\begingroup\$ Interesting. Is it version dependent? Can't convince MySQL 5.6 to execute it. \$\endgroup\$ – manatwork Aug 18 '15 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 '15 at 21:46
  • \$\begingroup\$ @mbomb007 Isn't SQL Management Studio for T-SQL only? \$\endgroup\$ – Alex A. Aug 23 '15 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\$
  • 1
    \$\begingroup\$ Looks like a 2D language to me... but the list is so long... \$\endgroup\$ – mbomb007 Aug 20 '15 at 17:54
  • \$\begingroup\$ I think this is some language that ignores non-decimal characters. \$\endgroup\$ – kirbyfan64sos Aug 26 '15 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\$
  • \$\begingroup\$ Is it Sillycon? \$\endgroup\$ – georgeunix Aug 28 '15 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 '15 at 19:30
  • \$\begingroup\$ I believe you can reveal the language now. The 7 days are up. \$\endgroup\$ – kirbyfan64sos Sep 2 '15 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\$ – kirbyfan64sos Sep 2 '15 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 '15 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\$
  • \$\begingroup\$ Looks like Fortran? \$\endgroup\$ – Reto Koradi Aug 17 '15 at 7:12
  • \$\begingroup\$ @RetoKoradi But which Fortran? ;) \$\endgroup\$ – Beta Decay Aug 17 '15 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\$ – Reto Koradi Aug 17 '15 at 7:15
  • \$\begingroup\$ @RetoKoradi Haha you're getting very warm \$\endgroup\$ – Beta Decay Aug 17 '15 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\$ – Reto Koradi Aug 17 '15 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\$
  • 5
    \$\begingroup\$ /// aka Slashes. (Using “print” instead of “foo” would make it trickier.) \$\endgroup\$ – manatwork Aug 17 '15 at 11:56
  • \$\begingroup\$ @manatwork Correct! \$\endgroup\$ – user42003 Aug 17 '15 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\$
  • \$\begingroup\$ It seems to be Pascal, a strange language where { } are comments. \$\endgroup\$ – vsz Aug 17 '15 at 21:36
  • 19
    \$\begingroup\$ {...} is a comment? That's evil. \$\endgroup\$ – Dennis Aug 17 '15 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\$
  • \$\begingroup\$ Are the last set of brackets supposed to be unmatched? \$\endgroup\$ – Beta Decay Aug 18 '15 at 8:34
  • 2
    \$\begingroup\$ That looks like snowman to me. One of my favorite esolangs. \$\endgroup\$ – user42003 Aug 18 '15 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 '15 at 12:44
  • \$\begingroup\$ @Kslkgh Yep, nice work. \$\endgroup\$ – Alex A. Aug 18 '15 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 '15 at 0:47
8
\$\begingroup\$

Matlab, 51 bytes, cracked by feersum

'main()''''+'';//echo{print(';'Hello, World!'
')}';
\$\endgroup\$
  • \$\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 '15 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 '15 at 10:26
  • \$\begingroup\$ Almost works in MATLAB / Octave, except it prints ans = . \$\endgroup\$ – feersum Aug 21 '15 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 '15 at 4:12
  • 1
    \$\begingroup\$ Can this work in Matlab without a REPL? If not, it's not valid. \$\endgroup\$ – Peter Taylor Aug 21 '15 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\$
  • \$\begingroup\$ Is it ~English ? \$\endgroup\$ – aditsu Aug 24 '15 at 19:50
  • \$\begingroup\$ @aditsu That didn't last long :) \$\endgroup\$ – TheNumberOne Aug 24 '15 at 19:53
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\$
  • \$\begingroup\$ Completely wild guess as I cannot test it right now, but maybe .Gertrude? \$\endgroup\$ – TreFox Aug 18 '15 at 21:42
  • \$\begingroup\$ @TreFox never heard of it, so most likely not a match :) \$\endgroup\$ – aditsu Aug 18 '15 at 21:43
  • 1
    \$\begingroup\$ I think this is Wordfuck. \$\endgroup\$ – lirtosiast Aug 19 '15 at 0:00
  • 3
    \$\begingroup\$ wild stupid guess... "Shakespeare"? \$\endgroup\$ – frikinside Aug 21 '15 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\$ – Martin Ender Aug 25 '15 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\$
  • \$\begingroup\$ Befunge? Comments must be at least 15 characters in length. \$\endgroup\$ – Cyclohexanol. Aug 26 '15 at 3:57
  • \$\begingroup\$ @VladimirLenin Can't be befunge, it doesn't have any commas to print characters. \$\endgroup\$ – Pharap Aug 26 '15 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 '15 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\$
  • \$\begingroup\$ Are you sure it's printing "Hello, World!" and not "hello world" ? \$\endgroup\$ – aditsu Aug 24 '15 at 20:49
  • \$\begingroup\$ @aditsu Yes, its Hello, World!. Just double checked it :) \$\endgroup\$ – MickyT Aug 24 '15 at 20:51
  • \$\begingroup\$ Is it Parenthesis Hell? (It's just a crazy guess.) \$\endgroup\$ – kirbyfan64sos Aug 24 '15 at 21:15
  • \$\begingroup\$ @kirbyfan64sos sorry it's not ... well it shouldn't be :) \$\endgroup\$ – MickyT Aug 24 '15 at 21:21
  • \$\begingroup\$ Is it Parenthetic? \$\endgroup\$ – Alex A. Aug 25 '15 at 4:09
7
\$\begingroup\$

Fantom, 44 bytes, cracked by w0lf

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

Var'aQ (English), 40 bytes, cracked by jimmy23013

"JudgHello, Worldkbicf" 4 16 strcut disp

I'm gonna try and make every program I post here 40 bytes from now on. :D

\$\endgroup\$
  • \$\begingroup\$ Is this MUF? \$\endgroup\$ – Martin Ender Aug 17 '15 at 7:25
  • \$\begingroup\$ @MartinBüttner Nope \$\endgroup\$ – Beta Decay Aug 17 '15 at 7:26
  • 3
    \$\begingroup\$ Is this var'aq? \$\endgroup\$ – jimmy23013 Aug 17 '15 at 12:37
  • \$\begingroup\$ @jimmy23013 Well done :) \$\endgroup\$ – Beta Decay Aug 17 '15 at 18:55
7
\$\begingroup\$

Enema, 21 bytes, cracked by Sp3000

"!dlroW ,olleH"[DZBO]

How it works

"!dlroW ,olleH" Push those characters (including a null byte) on the stack.
[               Infinite loop:
  D               Duplicate the topmost element on the stack.
  Z               If it is non-zero, skip the next instruction.
    B             Break out of the loop.
  O             Output as a character.
]
\$\endgroup\$
  • \$\begingroup\$ Well, in Microscript, this would print 0\n, after pushing a bunch of numbers onto the stack. \$\endgroup\$ – SuperJedi224 Aug 21 '15 at 22:57
  • 1
    \$\begingroup\$ I believe this works in Enema \$\endgroup\$ – Sp3000 Aug 23 '15 at 13:03
  • \$\begingroup\$ @Sp3000 That's correct. \$\endgroup\$ – Dennis Aug 23 '15 at 14:56

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.