A repost of this challenge. Meta discussion. Sandbox post. Body of the question similar to the original

Robber's challenge

This cops and robbers is now (08/03/2018) closed to further competing cop entries, as robbers may no longer be competing to crack answers, but feel free to post new answers.

The Cops challenge was won by Dennis with his brilliant 6 byte Sesos answer

The Robbers challenge was won by totallyhuman, with an astounding 30 cracks!

The Cops' Challenge

To compete as a cop:

  1. Choose a programming language. A valid programming language is one which meets all three of these criteria:

  2. Write a full program that outputs the numbers from 1 to 100, inclusive, in ascending order. You can output as decimal integers, as bytecode values (! to represent 33, for instance), or as unary digits (1111 for 4, e.g)1. If using unary, you should use any consistent character for digits, and a different, consistent character as a delimiter. If using integers, you should output with a constant non-digit delimiter between each number. You may also output with leading and trailing characters (such as []) but please be sensible (don't output a thousand bytes of rubbish either side of the count for instance). You must specify your output format in your answer.

    You must not assume a REPL environment or existing boilerplate code. Flags may be used, but you must reveal what flags are used in your answer. 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 65,536 characters) - this shouldn't be an issue for any serious submission.

    If your code contains bytes outside of printable ASCII + newline, please include a hex dump to make sure your code is actually testable.

    The program must terminate within 5 minutes on a typical desktop PC.

That's it. However, as with everything, there is a catch. You should aim to obfuscate your program as much as possible, as the Robbers' task is to guess the language you used. You should also aim to make sure that your program only works in the intended language (although this is likely to be less of a problem than the Foo cracks in the original challenge). The output format must be the same as your intended solution in order to constitute a valid crack.

Once 7 days have passed without anyone discovering any language where your program is a valid crack, you may reveal the language and mark it as safe. Please note, your submission can still be cracked until you reveal the language.

You must not under any circumstances edit the source code of your submission once posted (as this may invalidate a robber's 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.

The shortest safe submission in bytes wins!

1: If you wish to output in a different way, please ask in the comments

The Stack Snippet

You can use this stack snippet to browse the answers more easily:

answersSafe=[];answersCracked=[];answersUncracked=[];answerPage=1;robberTodo=[];userNames={};robberMap={};robberStats={};robberTimes={};function template($element,data){var $clone=$element.clone().removeClass('template');var html=$clone.html();for(var key in data){html=html.replace('{'+key+'}',data[key])}$clone.html(html);$element.after($clone)}function hideEmpty(){$('tbody').each(function(){if($(this).find('tr:not(.template):has(td)').length==0){$(this).find('tr:not(.empty):has(th)').addClass('inactive');$(this).find('tr.empty').removeClass('inactive')}})}function formatError(obj,reason){template($('.warn.template'),{id:obj.cop_id,cop:obj.cop_user,reason:reason})}function showAnswers(category,selector,sorter){sorter(category);$('#'+selector).find('tr:not(.template):has(td)').remove();$.each(category,function(i,answer){template($('#'+selector+' .template'),answer)});$('code:has(br)').addClass('clickable').click(function(){$(this).toggleClass('full')});updateCountdowns()}function getAnswers(){$.ajax({url:"https://api.stackexchange.com/2.2/questions/155018/answers?pagesize=100&order=desc&sort=creation&site=codegolf&filter=!*LUzJZNOIUpZsWsZBLe&page="+(answerPage++),method:"get",dataType:"jsonp"}).then(function(data){$.each(data.items,function(i,answer){var obj={cop_id:answer.answer_id,cop_user:answer.owner.display_name,cop_time:answer.creation_date,safe_on:answer.creation_date+604800};var $e=$('<div/>').html(answer.body);var $headers=$e.find(':header');if($headers.length==0){return formatError(obj,"no header")}var header=$headers.first().html();var $code=$e.find('pre code');if($code.length==0){return formatError(obj,"no code")}obj.code=$code.first().html().replace(/\n/g,'<br/>');if(obj.code.endsWith('<br/>')){obj.code=obj.code.slice(0,-5)}var bm=/(\d+)\s+bytes/.exec(header);if(bm==null){return formatError(obj,"no bytecount")}obj.size=parseInt(bm[1]);if(obj.size==NaN){return formatError(obj,"bytecount is NaN: "+bm[1])}obj.language=header.slice(0,bm.index).trim();while(obj.language.charAt(obj.language.length-1)!=','&&obj.language.length!=0){obj.language=obj.language.slice(0,-1)}if(obj.language.length==0){return formatError(obj,"no/bad separator before bytecount")}obj.language=obj.language.slice(0,-1).trim();obj.language_text=$('<div/>').html(obj.language).text();var end=header.slice(bm.index+bm[0].length).trim();if(end.length==0){if(obj.language!=="???"){return formatError(obj,"not marked as safe nor cracked, but language is "+obj.language+" (expected ???)")}return answersUncracked.push(obj)}if(!end.startsWith(',')){return formatError(obj,"no/bad separator after bytecount")}end=end.slice(1).trim();if(end==='safe'){return answersSafe.push(obj)}var $end=$('<div/>').html(end);var end_text=$end.text();if(!end_text.startsWith('cracked')){return formatError(obj,"expected 'cracked' or 'safe', got '"+end_text+"'")}var expectedURL='https://codegolf.stackexchange.com/a/';var $links=$end.find('a');if($links.length==0){return formatError(obj,"no cracked link")}var robberURL=$links.first().attr('href');if(!robberURL.startsWith(expectedURL)){return formatError(obj,"link does not start with "+expectedURL+": "+robberURL)}obj.robber_id=parseInt(robberURL.slice(expectedURL.length));if(obj.robber_id==NaN){return formatError(obj,"robber_id is NaN")}robberTodo.push(obj.robber_id);answersCracked.push(obj)});if(data.has_more){getAnswers()}else{getRobbers()}})}function sortBySize(category){category.sort(function(a,b){return b.size-a.size})}function sortByTime(category){category.sort(function(a,b){return b.cop_time-a.cop_time})}function sortByLiveTime(category){category.sort(function(a,b){return b.cracked_after-a.cracked_after})}function sortByCop(category){category.sort(function(a,b){return b.cop_user.localeCompare(a.cop_user)})}function sortByRobber(category){category.sort(function(a,b){return b.robber_user.localeCompare(a.robber_user)})}function sortByLanguage(category){category.sort(function(a,b){return b.language_text.localeCompare(a.language_text)})}function getRobbers(){if(robberTodo.length==0){$.each(answersCracked,function(i,answer){answer.robber_user=userNames[robberMap[answer.robber_id]];answer.cracked_after=robberTimes[answer.robber_id]-answer.cop_time;answer.cracked_after_str=formatTime(answer.cracked_after)});showAnswers(answersUncracked,'uncracked',sortByTime);showAnswers(answersCracked,'cracked',sortByLiveTime);showAnswers(answersSafe,'safe',sortBySize);hideEmpty();var graphData=[];$.each(robberStats,function(k,v){graphData.push({name:decodeEntities(userNames[k]),value:v})});graphData.sort(function(a,b){if(a.value==b.value){return a.name.localeCompare(b.name)}else{return b.value-a.value}});var graphLabels=[];var graphValues=[];$.each(graphData,function(i,obj){graphLabels.push(obj.name);graphValues.push(obj.value)});var graphColors=[];for(var i=0;i<graphData.length;i+=1){graphColors.push(['#b58900','#cb4b16','#dc322f','#d33682','#6c71c4','#268bd2','#2aa198','#859900'][i%8])}$('#robber-stats').attr('width',600);$('#robber-stats').attr('height',24*graphData.length+66);$('#answer-stats').attr('width',600);$('#answer-stats').attr('height',400);Chart.defaults.global.defaultFontColor='#839496';new Chart($('#robber-stats'),{type:'horizontalBar',data:{labels:graphLabels,datasets:[{data:graphValues,backgroundColor:graphColors}]},options:{responsive:false,legend:false,tooltips:false,layout:{padding:{right:40}},title:{display:true,text:'Number of answers cracked per robber',fontSize:18},scales:{yAxes:[{gridLines:{display:false}}],xAxes:[{gridLines:{display:false},ticks:{beginAtZero:true}}]},plugins:{datalabels:{anchor:'end',align:'end'}}}});new Chart($('#answer-stats'),{type:'pie',data:{labels:['Uncracked','Cracked','Safe'],datasets:[{data:[answersUncracked.length,answersCracked.length,answersSafe.length],backgroundColor:['#2aa198','#dc322f','#859900'],borderColor:'#002b36'}]},options:{responsive:false,tooltips:{backgroundColor:'#073642',displayColors:false},title:{display:true,text:'Number of answers in each category',fontSize:18},plugins:{datalabels:false}}});updateCountdowns();setInterval(updateCountdowns,1000);$('#loading').hide()}else{$.ajax({url:"https://api.stackexchange.com/2.2/answers/"+robberTodo.slice(0,100).join(';')+"?site=codegolf&filter=!*RB.h_b*K*dQTllFUdy",method:"get",dataType:"jsonp"}).then(function(data){$.each(data.items,function(i,robber){robberTodo=robberTodo.filter(function(e){return e!==robber.answer_id});robberMap[robber.answer_id]=robber.owner.user_id;robberTimes[robber.answer_id]=robber.creation_date;userNames[robber.owner.user_id]=robber.owner.display_name;if(robber.owner.user_id in robberStats){robberStats[robber.owner.user_id]+=1}else{robberStats[robber.owner.user_id]=1}});getRobbers()})}}var decodeEntities=(function(){var element=document.createElement('div');function decodeHTMLEntities(str){if(str&&typeof str==='string'){str=str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi,'');str=str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi,'');element.innerHTML=str;str=element.textContent;element.textContent=''}return str}return decodeHTMLEntities})();function formatTime(seconds){var arr=[];if(seconds>86400){arr.push(Math.floor(seconds/86400)+" days");seconds%=86400}if(seconds>3600){arr.push(Math.floor(seconds/3600)+" hours");seconds%=3600}if(seconds>60){arr.push(Math.floor(seconds/60)+" minutes");seconds%=60}if(seconds!=0){arr.push(seconds+" seconds")}return arr.join(', ').split('').reverse().join('').replace(',','dna ').split('').reverse().join('')}function updateCountdowns(){$('tr:not(.template) .countdown').each(function(){var target=$(this).attr('data-target');var now=Math.floor(+new Date()/1000);if(target-now<86400){$(this).addClass('urgent')}else{$(this).removeClass('urgent')}if(target<now){$(this).removeClass('countdown').text('Safe! (according to your computer\'s time)')}else{$(this).text(formatTime(target-now))}})}$('thead, #stats-header').click(function(){$(this).toggleClass('hidden')});getAnswers();
*{margin:0;padding:0;font:12pt sans-serif;}html,body{background:#002b36;color:#839496;width:100%;height:100%;}body>:not(.i):not(#loading){margin:5px;}#loading{background:rgb(64,64,64,0.8);position:fixed;top:0;left:0;width:100%;height:100%;display:table;z-index:100;}#loading-wrapper{display:table-cell;vertical-align:middle;text-align:center;font-size:20pt;color:#ddd;}#fullpage-msg,.warn{padding:5px 5px 5px 5px;margin:10px 0px;}@media (min-width:800px){#fullpage-msg{display:none;}}a{color:#268bd2;}code{font-family:monospace;font-size:16px;background:#073642;padding:1px 5px;white-space:pre;position:relative;}.clickable{cursor:pointer;}code:not(.full){max-height:38px;overflow:hidden;}code.clickable:not(.full):before{content:'';background:linear-gradient(transparent 20px,rgba(7,54,66,0.8) 32px,#002b36);position:absolute;top:0;left:0;width:100%;height:100%;}td,th{padding:5px;vertical-align:top;white-space:nowrap;text-align:left;}thead th,#stats-header{font-size:20pt;margin:10px 0;user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;cursor:pointer;}th{font-weight:bold;}path{fill:#839496;}thead:not(.hidden) .right-arrow,#stats-header:not(.hidden) .right-arrow,thead.hidden .down-arrow,#stats-header.hidden .down-arrow{visibility:hidden;}.hidden+tbody,.hidden+#stats,.template,.inactive{display:none;}small,code{display:block;}small,small a{font-size:8pt;}#stats-header{font-weight:bold;padding:6px;}.urgent{color:#dc322f;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.min.js"></script><script>!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("chart.js")):"function"==typeof define&&define.amd?define(["chart.js"],e):e(t.Chart)}(this,function(t){"use strict";var e=(t=t&&t.hasOwnProperty("default")?t.default:t).helpers,n={toTextLines:function(t){var n,a=[];for(t=[].concat(t);t.length;)"string"==typeof(n=t.pop())?a.unshift.apply(a,n.split("\n")):Array.isArray(n)?t.push.apply(t,n):e.isNullOrUndef(t)||a.unshift(""+n);return a},toFontString:function(t){return!t||e.isNullOrUndef(t.size)||e.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family},textSize:function(t,e,n){var a,r=[].concat(e),i=r.length,o=t.font,l=0;for(t.font=n.string,a=0;a<i;++a)l=Math.max(t.measureText(r[a]).width,l);return t.font=o,{height:i*n.lineHeight,width:l}},parseFont:function(a){var r=t.defaults.global,i=e.valueOrDefault(a.size,r.defaultFontSize),o={family:e.valueOrDefault(a.family,r.defaultFontFamily),lineHeight:e.options.toLineHeight(a.lineHeight,i),size:i,style:e.valueOrDefault(a.style,r.defaultFontStyle),weight:e.valueOrDefault(a.weight,null),string:""};return o.string=n.toFontString(o),o},bound:function(t,e,n){return Math.max(t,Math.min(e,n))}};function a(t,e){var n=e.x,a=e.y;if(null===n)return{x:0,y:-1};if(null===a)return{x:1,y:0};var r=t.x-n,i=t.y-a,o=Math.sqrt(r*r+i*i);return{x:o?r/o:0,y:o?i/o:-1}}function r(t,e,n,a,r){switch(r){case"center":n=a=0;break;case"bottom":n=0,a=1;break;case"right":n=1,a=0;break;case"left":n=-1,a=0;break;case"top":n=0,a=-1;break;case"start":n=-n,a=-a;break;case"end":break;default:r*=Math.PI/180,n=Math.cos(r),a=Math.sin(r)}return{x:t,y:e,vx:n,vy:a}}var i={arc:function(t,e,n){var a,i=(t.startAngle+t.endAngle)/2,o=Math.cos(i),l=Math.sin(i),s=t.innerRadius,d=t.outerRadius;return a="start"===e?s:"end"===e?d:(s+d)/2,r(t.x+o*a,t.y+l*a,o,l,n)},point:function(t,e,n,i){var o=a(t,i),l=t.radius,s=0;return"start"===e?s=-l:"end"===e&&(s=l),r(t.x+o.x*s,t.y+o.y*s,o.x,o.y,n)},rect:function(t,e,n,i){var o=t.horizontal,l=Math.abs(t.base-(o?t.x:t.y)),s=o?Math.min(t.x,t.base):t.x,d=o?t.y:Math.min(t.y,t.base),u=a(t,i);return"center"===e?o?s+=l/2:d+=l/2:"start"!==e||o?"end"===e&&o&&(s+=l):d+=l,r(s,d,u.x,u.y,n)},fallback:function(t,e,n,i){var o=a(t,i);return r(t.x,t.y,o.x,o.y,n)}},o=t.helpers;var l=function(t,e){this._el=t,this._index=e,this._model=null};o.extend(l.prototype,{_modelize:function(e,a,r,l){var s,d=this._index,u=o.options.resolve,f=n.parseFont(u([r.font,{}],l,d));return{align:u([r.align,"center"],l,d),anchor:u([r.anchor,"center"],l,d),backgroundColor:u([r.backgroundColor,null],l,d),borderColor:u([r.borderColor,null],l,d),borderRadius:u([r.borderRadius,0],l,d),borderWidth:u([r.borderWidth,0],l,d),color:u([r.color,t.defaults.global.defaultFontColor],l,d),font:f,lines:a,offset:u([r.offset,0],l,d),opacity:u([r.opacity,1],l,d),origin:function(t){var e=t._model.horizontal,n=t._scale||e&&t._xScale||t._yScale;if(!n)return null;if(void 0!==n.xCenter&&void 0!==n.yCenter)return{x:n.xCenter,y:n.yCenter};var a=n.getBasePixel();return e?{x:a,y:null}:{x:null,y:a}}(this._el),padding:o.options.toPadding(u([r.padding,0],l,d)),positioner:(s=this._el,s instanceof t.elements.Arc?i.arc:s instanceof t.elements.Point?i.point:s instanceof t.elements.Rectangle?i.rect:i.fallback),rotation:u([r.rotation,0],l,d)*(Math.PI/180),size:n.textSize(e,a,f),textAlign:u([r.textAlign,"start"],l,d)}},update:function(t,e,a){var r,i,l,s=null,d=this._index;o.options.resolve([e.display,!0],a,d)&&(r=a.dataset.data[d],i=o.valueOrDefault(o.callback(e.formatter,[r,a]),r),s=(l=o.isNullOrUndef(i)?[]:n.toTextLines(i)).length?this._modelize(t,l,e,a):null),this._model=s},draw:function(t){var e,a,r,i,l,s,d,u,f,h,c,y,g,x,b=this._model;b&&b.opacity&&(r=b.size,i=b.padding,l=r.height,s=r.width,u=-l/2,e={frame:{x:(d=-s/2)-i.left,y:u-i.top,w:s+i.width,h:l+i.height},text:{x:d,y:u,w:s,h:l}},a=function(t,e,n){var a=e.positioner(t._view,e.anchor,e.align,e.origin),r=a.vx,i=a.vy;if(!r&&!i)return{x:a.x,y:a.y};var o=e.borderWidth||0,l=n.w+2*o,s=n.h+2*o,d=e.rotation,u=Math.abs(l/2*Math.cos(d))+Math.abs(s/2*Math.sin(d)),f=Math.abs(l/2*Math.sin(d))+Math.abs(s/2*Math.cos(d)),h=1/Math.max(Math.abs(r),Math.abs(i));return u*=r*h,f*=i*h,u+=e.offset*r,f+=e.offset*i,{x:a.x+u,y:a.y+f}}(this._el,b,e.frame),t.save(),t.globalAlpha=n.bound(0,b.opacity,1),t.translate(Math.round(a.x),Math.round(a.y)),t.rotate(b.rotation),f=t,h=e.frame,y=(c=b).backgroundColor,g=c.borderColor,x=c.borderWidth,(y||g&&x)&&(f.beginPath(),o.canvas.roundedRect(f,Math.round(h.x)-x/2,Math.round(h.y)-x/2,Math.round(h.w)+x,Math.round(h.h)+x,c.borderRadius),f.closePath(),y&&(f.fillStyle=y,f.fill()),g&&x&&(f.strokeStyle=g,f.lineWidth=x,f.lineJoin="miter",f.stroke())),function(t,e,n,a){var r,i,o,l=a.textAlign,s=a.font.lineHeight,d=a.color,u=e.length;if(u&&d)for(r=n.x,i=n.y+s/2,"center"===l?r+=n.w/2:"end"!==l&&"right"!==l||(r+=n.w),t.font=a.font.string,t.fillStyle=d,t.textAlign=l,t.textBaseline="middle",o=0;o<u;++o)t.fillText(e[o],Math.round(r),Math.round(i),Math.round(n.w)),i+=s}(t,b.lines,e.text,b),t.restore())}});var s=t.helpers,d={align:"center",anchor:"center",backgroundColor:null,borderColor:null,borderRadius:0,borderWidth:0,color:void 0,display:!0,font:{family:void 0,lineHeight:1.2,size:void 0,style:void 0,weight:null},offset:4,opacity:1,padding:{top:4,right:4,bottom:4,left:4},rotation:0,textAlign:"start",formatter:function(t){if(s.isNullOrUndef(t))return null;var e,n,a,r=t;if(s.isObject(t))if(s.isNullOrUndef(t.label))if(s.isNullOrUndef(t.r))for(r="",a=0,n=(e=Object.keys(t)).length;a<n;++a)r+=(0!==a?", ":"")+e[a]+": "+t[e[a]];else r=t.r;else r=t.label;return""+r}},u=t.helpers,f="$datalabels";t.defaults.global.plugins.datalabels=d,t.plugins.register({id:"datalabels",afterDatasetUpdate:function(t,e,n){var a,r,i,o,s,d=t.data.datasets[e.index],h=(a=n,!1===(r=d.datalabels)?null:(!0===r&&(r={}),u.merge({},[a,r]))),c=e.meta.data||[],y=c.length,g=t.ctx;for(g.save(),i=0;i<y;++i)(o=c[i])&&!o.hidden?(s=new l(o,i)).update(g,h,{chart:t,dataIndex:i,dataset:d,datasetIndex:e.index}):s=null,o[f]=s;g.restore()},afterDatasetDraw:function(t,e){var n,a,r=e.meta.data||[],i=r.length;for(n=0;n<i;++n)(a=r[n][f])&&a.draw(t.ctx)}})});</script><div id="loading"><span id="loading-wrapper">Loading...</span></div><div id="fullpage-msg"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 111.577 111.577"><path d="M78.962,99.536l-1.559,6.373c-4.677,1.846-8.413,3.251-11.195,4.217c-2.785,0.969-6.021,1.451-9.708,1.451c-5.662,0-10.066-1.387-13.207-4.142c-3.141-2.766-4.712-6.271-4.712-10.523c0-1.646,0.114-3.339,0.351-5.064c0.239-1.727,0.619-3.672,1.139-5.846l5.845-20.688c0.52-1.981,0.962-3.858,1.316-5.633c0.359-1.764,0.532-3.387,0.532-4.848c0-2.642-0.547-4.49-1.636-5.529c-1.089-1.036-3.167-1.562-6.252-1.562c-1.511,0-3.064,0.242-4.647,0.71c-1.59,0.47-2.949,0.924-4.09,1.346l1.563-6.378c3.829-1.559,7.489-2.894,10.99-4.002c3.501-1.111,6.809-1.667,9.938-1.667c5.623,0,9.962,1.359,13.009,4.077c3.047,2.72,4.57,6.246,4.57,10.591c0,0.899-0.1,2.483-0.315,4.747c-0.21,2.269-0.601,4.348-1.171,6.239l-5.82,20.605c-0.477,1.655-0.906,3.547-1.279,5.676c-0.385,2.115-0.569,3.731-0.569,4.815c0,2.736,0.61,4.604,1.833,5.597c1.232,0.993,3.354,1.487,6.368,1.487c1.415,0,3.025-0.251,4.814-0.744C76.854,100.348,78.155,99.915,78.962,99.536z M80.438,13.03c0,3.59-1.353,6.656-4.072,9.177c-2.712,2.53-5.98,3.796-9.803,3.796c-3.835,0-7.111-1.266-9.854-3.796c-2.738-2.522-4.11-5.587-4.11-9.177c0-3.583,1.372-6.654,4.11-9.207C59.447,1.274,62.729,0,66.563,0c3.822,0,7.091,1.277,9.803,3.823C79.087,6.376,80.438,9.448,80.438,13.03z"/></svg> Click the "Full page" link in the top right for vastly superior experience</div><div class="warn template">&#9888; <a href="https://codegolf.stackexchange.com/a/{id}">This answer</a> by {cop} is not formatted correctly ({reason}).</div><table><thead><tr><th colspan="5"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 9 9"><path class="right-arrow" d="M 0 0 L 0 9 L 9 4.5 Z"/><path class="down-arrow" d="M 0 0 L 9 0 L 4.5 9 Z"/></svg> Uncracked answers</th></tr></thead><tbody id="uncracked"><tr><th colspan="3" onclick="showAnswers(answersUncracked, 'uncracked', sortByCop)" class="clickable">Posted by</th><th onclick="showAnswers(answersUncracked, 'uncracked', sortBySize)" class="clickable">Size</th><th onclick="showAnswers(answersUncracked, 'uncracked', sortByTime)" class="clickable">Safe in</th><th>Code</th></tr><tr class="empty inactive"><th colspan="5">There are no uncracked answers</th></tr><tr class="template"><td colspan="3"><a href="https://codegolf.stackexchange.com/a/{cop_id}">{cop_user}</a></td><td>{size} bytes</td><td><span class="countdown" data-target="{safe_on}"></span></td><td><code>{code}</code></td></tr></tbody><thead><tr><th colspan="5"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 9 9"><path class="right-arrow" d="M 0 0 L 0 9 L 9 4.5 Z"/><path class="down-arrow" d="M 0 0 L 9 0 L 4.5 9 Z"/></svg> Cracked answers</th></tr></thead><tbody id="cracked"><tr><th onclick="showAnswers(answersCracked, 'cracked', sortByCop)" class="clickable">Posted by</th><th onclick="showAnswers(answersCracked, 'cracked', sortByRobber)" class="clickable">Cracked by</th><th onclick="showAnswers(answersCracked, 'cracked', sortByLanguage)" class="clickable">Language</th><th onclick="showAnswers(answersCracked, 'cracked', sortBySize)" class="clickable">Size</th><th onclick="showAnswers(answersCracked, 'cracked', sortByLiveTime)" class="clickable">Cracked after</th><th>Code</th></tr><tr class="empty inactive"><th colspan="5">There are no cracked answers</th></tr><tr class="template"><td><a href="https://codegolf.stackexchange.com/a/{cop_id}">{cop_user}</a></td><td><a href="https://codegolf.stackexchange.com/a/{robber_id}">{robber_user}</a></td><td>{language}</td><td>{size} bytes</td><td>{cracked_after_str}</td><td><code>{code}</code></td></tr></tbody><thead><tr><th colspan="5"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 9 9"><path class="right-arrow" d="M 0 0 L 0 9 L 9 4.5 Z"/><path class="down-arrow" d="M 0 0 L 9 0 L 4.5 9 Z"/></svg> Safe answers</th></tr></thead><tbody id="safe"><tr><th colspan="2" onclick="showAnswers(answersSafe, 'safe', sortByCop)" class="clickable">Posted by</th><th onclick="showAnswers(answersSafe, 'safe', sortByLanguage)" class="clickable">Language</th><th colspan="2" onclick="showAnswers(answersSafe, 'safe', sortBySize)" class="clickable">Size</th><th>Code</th></tr><tr class="empty inactive"><th colspan="5">There are no safe answers</th></tr><tr class="template"><td colspan="2"><a href="https://codegolf.stackexchange.com/a/{cop_id}">{cop_user}</a></td><td>{language}</td><td colspan="2">{size} bytes</td><td><code>{code}</code></td></tr></tbody></table><div id="stats-header"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 9 9"><path class="right-arrow" d="M 0 0 L 0 9 L 9 4.5 Z"/><path class="down-arrow" d="M 0 0 L 9 0 L 4.5 9 Z"/></svg> Statistics</div><div id="stats"><div><canvas id="robber-stats"/></div><div><canvas id="answer-stats"/></div></div><small>Snippet made by <a href="https://codegolf.stackexchange.com/u/55934/" target="_blank">NieDzejkob</a>, licensed as <a href="https://creativecommons.org/licenses/by-sa/3.0/" target="_blank">CC 3.0 BY-SA</a>. "Info" icon made by <a href="https://www.flaticon.com/authors/chanut" target="_blank">Chanut</a> from <a href="https://www.flaticon.com/" target="_blank">Flaticon</a>, licensed as <a href="http://creativecommons.org/licenses/by/3.0/" target="_blank">CC 3.0 BY</a>. "Arrow" icons made by <a href="https://codegolf.stackexchange.com/u/12012/" target="_blank">Dennis</a> for <a href="https://tio.run/" target="_blank">Try It Online</a>, licensed as <a href="https://github.com/TryItOnline/tryitonline/blob/master/LICENSE" target="_blank">MIT</a>. Some code shamelessly copy-pasted from <a href="https://stackoverflow.com/a/9609450">this answer</a> on Stack Overflow by <a href="https://stackoverflow.com/u/24950">Robert K</a>, licensed as <a href="https://creativecommons.org/licenses/by-sa/3.0/">CC 3.0 BY-SA</a>. This snippet utilises <a href="http://jquery.com/">jQuery</a> (<a href="https://github.com/jquery/jquery/blob/master/LICENSE.txt">MIT</a>), <a href="http://www.chartjs.org/">chart.js</a> (<a href="https://github.com/chartjs/Chart.js/blob/master/LICENSE.md">MIT</a>) and <a href="https://github.com/chartjs/chartjs-plugin-datalabels/">chartjs-plugin-datalabels</a> (<a href="https://github.com/chartjs/chartjs-plugin-datalabels/blob/master/LICENSE.md">MIT</a>). Color scheme: <a href="http://ethanschoonover.com/solarized">Solarized by Ethan Schoonover</a> (<a href="https://github.com/altercation/solarized/blob/master/LICENSE">MIT</a>).</small>


(Feel free to skip this section if you're not planning to participate as a cop)

This is required for new cop answers to make it possible for the snippet above to parse them.

  • New answers should include a header like this:

    # ???, [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 ??? and add safe to the end, e.g.

    # Ruby, [N] bytes, safe

    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, please also add the language, along with a notice like

    # Ruby, [N] bytes, [cracked](crack-link) by [user]

    where [user] is the name of the user who submitted the first valid crack, and crack-link is a link to the corresponding answer in the Robbers' thread. Please use the short link format you get from the "share" button. Feel free to make the user name a link to their profile page.

    If the language used in the crack is different from the one you intended, your answer is still cracked, and you shall follow this format. However, you can mention in the answer that you intended it to be something else. It's your choice on whether you want to reveal the intended answer, or if you want to let Robbers have more fun.

Good luck Cops!

  • 9
    \$\begingroup\$ How not to compete in this challenge. \$\endgroup\$ – Magic Octopus Urn Feb 8 '18 at 17:55
  • 1
    \$\begingroup\$ Note that if you're using a language with an interpreter on TIO, all someone has to do to crack your submission is try every language on TIO. \$\endgroup\$ – mbomb007 Feb 8 '18 at 23:08
  • \$\begingroup\$ @mbomb007 Take a look at this comment. Aside from requesting that Robbers don't brute-force, there is nothing more that we can do to prevent this behaviour unfortunately. However, I invite anyone to downvote Robbers using scripts to brute-force submissions as it contradicts the spirit of the challenge. \$\endgroup\$ – caird coinheringaahing Feb 8 '18 at 23:16
  • 1
    \$\begingroup\$ @NieDzejkob I'd say that the compiler has to be on Wikipedia/Rosetta Code/Esolangs or be on TIO. \$\endgroup\$ – caird coinheringaahing Feb 13 '18 at 15:45
  • 1
    \$\begingroup\$ @cairdcoinheringaahing Both answers that inspired me to ask that question are a gray area: This Beatnik answer only works in some interpreters, and none of them have their own page. However, a working interpreter is linked on the esolangs page. In the case of this, the language is installed on TIO, but it's not listed on the language list. These answers have already been cracked, but I think that the rules should be modified to be unambigous in the future. \$\endgroup\$ – NieDzejkob Feb 13 '18 at 16:24

161 Answers 161


SuperCollider, 22 bytes, cracked by Dennis

for(1,100,"% "postf:_)

Outputs decimal integers, space separated. The output has a trailing space but no trailing newline.

Explanation: SuperCollider is a domain-specific language for sound synthesis and music composition, so I thought it might obscure enough in this community to escape being cracked. I used to golf in it regularly though, in order to post music on Twitter. (The link has audio recordings as well as the 140-character code that produced them.)

In addition, I used a couple of tricks to make the code not look like typical SuperCollider. A more paradigmatic approach to this task would be

99.do {
    arg i;

which prints the numbers newline-separated.

  • \$\begingroup\$ Cracked. \$\endgroup\$ – Dennis Feb 7 '18 at 20:58

xEec, 47 bytes, cracked by MD XF

h#1 h#0 >a p o# h#10 o$ p h#1 ma t h#101 ms jna

Try it online!

  • \$\begingroup\$ Cracked. \$\endgroup\$ – MD XF Feb 6 '18 at 21:05

Unbalanced, 130 bytes, cracked by user202729


Try it online!

Well I thought I'd give this a go. Can't be terribly hard to crack but should be some fun (I had fun writing this program at least).

For ease of cracking the important parts of the program are first a single parenthesis


Then 100 <s


Then some junk



Unbalanced is a programming language about using the imbalance of braces in the program to do computations.

The first part of the program


Creates three cells set to 1 with an ocean of 99 0s between two them. We then use the subroutine


Which will add travel incrementing each cell until it hits a zero at which point it resets itself back to the begining of each line. This will run until all of the 99 0s have been filled with ascending numbers. Once that's done we do a little clean up


to remove all of the markers we placed.

  • \$\begingroup\$ What output format does this use? Unary, bytes, numbers etc. \$\endgroup\$ – caird coinheringaahing Feb 6 '18 at 20:38
  • 6
    \$\begingroup\$ @cairdcoinheringaahing It can use either bytes or numbers. I'm not picky. \$\endgroup\$ – Wheat Wizard Feb 6 '18 at 20:39
  • \$\begingroup\$ This really looks like Pain-Flak, I was rather surprised when it wasn't. +1 \$\endgroup\$ – MD XF Feb 7 '18 at 0:31
  • 9
    \$\begingroup\$ Unless I'm mistaken, <<<<<<...<<<<<< is not the same as '100 >s'? \$\endgroup\$ – boboquack Feb 7 '18 at 6:06
  • 2
    \$\begingroup\$ Cracked. \$\endgroup\$ – user202729 Feb 7 '18 at 12:00

TacO, 31 bytes, cracked by totallyhuman

$ 100
  *i	*j

The output is a list of unary numbers with 1 representing the digit. The delimiter between the numbers is \t0 (a tab and a zero). There is also a single leading 0. The raw text of the output can be found here. The raw text for the source code is here.

TacO is a 2D language. The instruction pointer begins at the @ symbol and follows the chain of nonwhitespace. The only active code in this program is


The % symbol creates a loop where the first branch yields the number of times the second branch should be executed. The zero gets added to the eventual output then the * symbol which in this case works mostly the same way as %. The i yields which % loop is being run then the 1 gets added i times.

In the original program I through in XX to try and throw people off, hoping they would be looking for languages that where XX would mean 100. The tab+*j was also meant to be a red herring since there is a tab in the input (which is the default output for % I guess). I included the other symbols because there needed to be spaces anyway so they didn't cost any bytes.

  • 3
    \$\begingroup\$ Replacing the tab character with &#9; makes it display properly in the Markdown. \$\endgroup\$ – Esolanging Fruit Feb 7 '18 at 4:27
  • \$\begingroup\$ This is TacO. \$\endgroup\$ – totallyhuman Feb 11 '18 at 22:42
  • \$\begingroup\$ @totallyhuman nice \$\endgroup\$ – dylnan Feb 11 '18 at 23:27

Literate CoffeeScript, 429 bytes, safe

##For# ###@### #####

 ###(# ##i# ### ### ##=1###

###whiLe# ##lEss###than###
 ###||##equalTo## ### ###100#&&##doing#pLusplUs##i###
# #####)##{#### # ###x=exp i##

 ### ###console###stdout###

### #this###Next###exPresSion##

 ###plz###.###----# #-----## ##-----###
####instead## ###Of##loop-the-loop########

 ### ###log x###fRom##math###for x###Gold# ###in### ###[1###evelaTingTo###..100]###}###

run program mode 100

Numbers are newline separated.

Hint: some interpreters are file extension sensitive.


Try it online!

The CoffeeScript compiler recognises files that have a .litcoffee extension as being literate CoffeeScript (as mentioned on Wikipedia). These are meant to be markdown files where the indented code is treated as CoffeeScript. So with the now extraneous newlines removed the code looks like this after it has been tranformed to non-literate CoffeeScript

###(# ##i# ### ### ##=1###
###||##equalTo## ### ###100#&&##doing#pLusplUs##i###
### ###console###stdout###
###plz###.###----# #-----## ##-----###
### ###log x###fRom##math###for x###Gold# ###in### ###[1###evelaTingTo###..100]###}###

In CoffeeScript the block comment character is ### so most of this is either whitespace or inside a block comment. The actually functional code is

       log x for x in [1..100]

This code is equivalent to console.log x for x in [1..100]


AlphaBeta, 8 bytes, safe

One last crack at a short one.


Outputs as raw


g         adds 1 to register 2
 D        sets register 3 to value of register 2
   L      outputs a character to the screen
    x     clears register 1
     e    adds 100 to register e
       O  goto the position register (0) if register 1 != register 2

The [] are no-ops.

Unfortunately, after I posted this answer I discovered that the interpreter linked on the esolang page has a bug where it increments the instruction pointer immediately after the O command. This was discovered and fixed by @Dennis in this answer and fixed in this interpreter. I would have changed it slightly to work with either, but I thought it was too late by then. If this invalidates my answer, so be it.

Dennis has added the fixed interpreter to TIO so :)

Try it online!

  • \$\begingroup\$ Nice misdirection with the brackets. (Who expects no-ops in 8 bytes of source code?) I've added the modified interpreter (fixed w as well) to TIO. Try it online! \$\endgroup\$ – Dennis Feb 19 '18 at 2:29
  • \$\begingroup\$ @Dennis Thank you, to be honest I thought you may crack it. \$\endgroup\$ – MickyT Feb 19 '18 at 4:13

APL (Dyalog), 7 bytes, cracked by Conor O'Brien


Decimal output.

  • 3
    \$\begingroup\$ This seems to be APL, but if it were, it would violate the "may not assume REPL" environment. AFAICT, this works. I am probably missing a language, but I'm posting this comment just to make sure \$\endgroup\$ – Conor O'Brien Feb 7 '18 at 0:23
  • \$\begingroup\$ @ConorO'Brien that's indeed APL. AFAIK this form is considered a full program (as the assignment to stdout is a part of the way it works in tio). If you want to run it as is, you can use the input section rather than the assignment in the code section. \$\endgroup\$ – Uriel Feb 7 '18 at 6:08
  • \$\begingroup\$ Well, then cracked \$\endgroup\$ – Conor O'Brien Feb 7 '18 at 14:46
  • \$\begingroup\$ You didn't obfuscate it enough: +\1/1/10/1/10/+\1/1 \$\endgroup\$ – Adám Feb 11 '18 at 22:59
  • \$\begingroup\$ @Adám I figured that in that form it would be less likely to be spotted as APL, and could look like the instructions are push 1 (\1), push 100 (\100), and range (+) \$\endgroup\$ – Uriel Feb 12 '18 at 1:43

Forth, 74 48 bytes, cracked by Mego

: | 0 do i 1 + 0 do 42 emit loop cr loop ; 100 |

Unary output

  • 3
    \$\begingroup\$ Welcome to the site! I've added a formatted header to this post including a byte count. Feel free to roll this back or edit it further. \$\endgroup\$ – Wheat Wizard Feb 7 '18 at 15:17
  • \$\begingroup\$ Cracked \$\endgroup\$ – user45941 Feb 7 '18 at 15:36

AutoHotkey, 30 bytes, cracked by tsh

 send % i++ . ","

Output is comma separated numbers

  • 4
    \$\begingroup\$ Welcome to PPCG! \$\endgroup\$ – Martin Ender Feb 9 '18 at 0:32
  • 1
    \$\begingroup\$ Cracked? \$\endgroup\$ – tsh Feb 9 '18 at 1:49

R, 494 bytes, cracked by totallyhuman

print =cat   ( c (  1  :  100  )  ) 
#define print(x)main(){for(auto i=.5;i++<sizeof('i')*101;printf("%d ",(char)i));}
print("1 "*100)

Without all the polyglot obfuscation:

  • 3
    \$\begingroup\$ +1 for the Easter Egg when run in the 'obvious' language :D \$\endgroup\$ – caird coinheringaahing Feb 10 '18 at 16:18
  • \$\begingroup\$ This is R. \$\endgroup\$ – totallyhuman Feb 10 '18 at 16:20

Io, 71 bytes, cracked by Potato44

a := "+++++++++[>+.+.+.+.+.+.d.+.+.+.+.<-]";for(q,1,a at(23),q println)
  • \$\begingroup\$ How does this output the numbers? E.g. raw bytes, decimals separated by newlines, etc. \$\endgroup\$ – MD XF Feb 11 '18 at 5:27
  • \$\begingroup\$ (Brainfuck is not my guess) but if this is supposed to be Brainfuck or any derivative (e.g. Agony, Self-Modifying Brainfuck, Xeraph, etc) it doesn't work; it only prints up to 90. \$\endgroup\$ – MD XF Feb 11 '18 at 5:31
  • \$\begingroup\$ Cracked. I think. Untested. \$\endgroup\$ – Potato44 Feb 11 '18 at 14:52

oOo CODE, 161 bytes, cracked by NieDzejkob

My apologies to all the young people here and us older one's as well :). Had some time to kill and this was just a bit of fun. Should be cracked rather quickly.

If UR lEEt `NUfF 2 W0rK 0Ut W0T 'd4 L4NgUAgE Is It Will 5h0W y4 ZEr0 T0 NiN37Y nIN3 pLUs 0NE, bU7 Us A AsCIi Ch4rACt0r 4 tH3 Numb3r Rath3R ThAN Th3 numB3r itS3Lf

This is brainfuck encoded using the case of each set of three letters. Once decoded the brainfuck program looks like ++++++++++[>++++++++++<-]>[<+.>-]


Spiral, 136 bytes, safe

     X          3X&#%!;
"123 0******v^v+^v+^v+^v+*****v+*v1"

Output is newline-separated.


Unobfuscated (67 bytes):

123 0******v^v+^v+^v+^v+*****v+*v1

The additional characters in the obfuscated version are not no-ops (except for the quote marks), they just are never reached.


The instruction pointer of the program begins at the 0. At each step, the IP tries to turn 90 degrees right from its current direction. If there is whitespace in that direction, it turns left until it finds something that is not whitespace. Once it has found a non-whitespace character to move to, it moves to that position and executes the command that the character represents.

So, in this case, the IP starts moving right from the zero on the last line:


* increments the value in the register by one. This happens six times, and then v pushes the number 6 from the register to the stack. ^ copies the value from the stack to the register, and the second v pushes the copy to the stack. Then + pops the two values from the stack and pushes their sum to the stack.

At the end of the line (just before reaching the 1), there are two numbers in the stack, 1 (on top) and 100. 1, 2, and 3 are labels. When one of them is reached, the IP jumps to the second occurrence of the same character in the code. So, from the end of the last line, the IP jumps to the beginning of the last line, to: 123. From there it immediately jumps to the first line of the code:


^ copies the number 1 from the stack to the register, , pops it from the stack and prints it as a decimal number. *v increments the register by one and pushes it into the stack. ~ compares the two topmost values on the stack, and pushes a zero into the stack if they are equal (-1 or 1 otherwise, depending on which value is larger).

At this point, for the first time in this program, there is a character 90 degrees to the right from the instruction pointer's current position and direction. The IP tries to move to the X, which pops the value of the comparison from the stack. Compared to the other commands, X is special in that way that the IP only moves to it if the value popped from the stack is 0. Otherwise the IP treats it as whitespace and turns left until it finds some direction to go. Therefore the X branch is only entered when the two values in the stack are equal, that is, the counter (the number just printed) reaches 100. After that ! ends the program.

When the counter is less than one hundred, the IP resumes going eastward on the first line. ******v^v+ places number 10 in the stack, . pops it and prints it as an ASCII character (a newline, in this case). 3 jumps back to 123, from which the IP jumps back to the first line and a new iteration begins.

(In the obfuscated version the 3 is under the ., this doesn't affect the behaviour, because the IP turns right always when possible (unless it's in left-turning mode, but this program does not change the mode at any point.))

  • \$\begingroup\$ Not Prelude, Hexagony, Brainbool, Boolfuck, Brainfuck, Hyper-Dimensional Brainfuck, Random Brainfuck, Fisson, Fission 2, Self-modifying Brainfuck, Symbolic Brainfuck, ><>, Gol><>,Triangular, Lost, Befunge-93, 96, 97 or 98, in case anyone wants to try to crack this. \$\endgroup\$ – NieDzejkob Feb 15 '18 at 15:46
  • \$\begingroup\$ @NieDzejkob Seems that the obfuscation worked, as I tried to make it look a bit like some of those languages. \$\endgroup\$ – Steadybox Feb 15 '18 at 19:31

Alarm Clock Radio, 62 (+3 for -O2) = 65 bytes, safe


This is totally brain[bleep]! Metaphorically speaking, at least :D

It is a BF derivative, however!


Alarm Clock Radio is a BF derivative without < or -, but it has a cyclic tape. -O2 is used to limit the tape size to 2 cells.

-O2 specifies the

++++++++++++++++++++++++++++++++++++++++++++ set pointer to 44
@ wait 44 seconds
[+++>+>]+   set tape to (156 1)
>[+>.+>]    until 156 is 0 (by overflow), output increasing characters

Since 256 - 156 == 100, this loops 100 times.

  • 1
    \$\begingroup\$ (there are 44 +s before the @) \$\endgroup\$ – user202729 Feb 9 '18 at 11:46
  • \$\begingroup\$ Is this braincurses? \$\endgroup\$ – No one Feb 15 '18 at 3:24
  • \$\begingroup\$ @Noone no it is not, I don't think anyway \$\endgroup\$ – Conor O'Brien Feb 15 '18 at 3:33
  • \$\begingroup\$ So this is probably a well known language with so many interpreters, and the problem is to find out which interpreter had the right command line option? \$\endgroup\$ – jimmy23013 Feb 15 '18 at 14:05
  • \$\begingroup\$ @jimmy23013 I doubt the flag is necessary, considering it was edited in 10 hours later. \$\endgroup\$ – totallyhuman Feb 15 '18 at 20:05

Giac/Xcas, 43 bytes, safe


I hope this isn't too easy

  • 1
    \$\begingroup\$ It is not Go, and it does not need to be run in a REPL. \$\endgroup\$ – iczero Feb 9 '18 at 14:53
  • 1
    \$\begingroup\$ Note that languages must have free interpreters. Matlab can't be used. If this is Matlab then the answer is invalid. \$\endgroup\$ – user202729 Feb 9 '18 at 15:29
  • 2
    \$\begingroup\$ It's not Matlab either, and the interpreter is FOSS. \$\endgroup\$ – iczero Feb 9 '18 at 15:34
  • 1
    \$\begingroup\$ Yes, the list of numbers is printed. \$\endgroup\$ – iczero Feb 10 '18 at 4:07
  • 1
    \$\begingroup\$ Does this have an esolangs article or a rosetta code article or a wikipedia article? \$\endgroup\$ – MD XF Feb 17 '18 at 19:46

Replace, 473 bytes, safe

Output is space separated, and is prepended with OUTPUT:\n.

1?2v ?-[>++<-----]>--[.-]>
Print=>{not Palindromic[_]or#String[_]<2}\1:100
"    *
     ^                                       \
2 1/3
3 1/3 4
1 1/8
3 3/9
00/ 5 6 7
9 3/t1
1 4 3/1 t2
4 8/t3
8 9/t4
(?<=8 )(?=t)/9 
9  5/t5
(.) 7 5|6 (.) t1/t\1\2
4 1/t8
t2 4.+/t9
_(.)(.)/\1 \2
910/9 10
     >                                       /


  • \$\begingroup\$ Unfortunately it's not ><> \$\endgroup\$ – NieDzejkob Feb 11 '18 at 22:34
  • \$\begingroup\$ @NieDzejkob nor Gol><>, which misses some of the numbers; this is an impressive polyglot. \$\endgroup\$ – MD XF Feb 12 '18 at 2:42
  • \$\begingroup\$ This is safe; please reveal the language! \$\endgroup\$ – MD XF Feb 19 '18 at 4:09
  • \$\begingroup\$ I tried /// and itflabfriugherigoerujg (idk) but I didn't know of others. Nice one! \$\endgroup\$ – totallyhuman Feb 20 '18 at 23:12
  • \$\begingroup\$ @totallyhuman thanks! It was an interesting task to find "deja vu" languages \$\endgroup\$ – Conor O'Brien Feb 21 '18 at 0:16

Alphabetti spaghetti, 11 bytes, safe


Outputs decimal with newline after every number.

  • \$\begingroup\$ "If your code contains bytes outside of printable ASCII + newline, please include a hex dump to make sure your code is actually testable" -> 0x0A is not printable ASCII. \$\endgroup\$ – user45941 Feb 18 '18 at 3:44
  • \$\begingroup\$ There shouldn't be a line feed and I can't seem to find it. The code is only those visible letters. \$\endgroup\$ – Lerpo Feb 18 '18 at 5:50
  • \$\begingroup\$ My bad, it was due to me messing up the xxd invocation. \$\endgroup\$ – user45941 Feb 18 '18 at 6:33
  • \$\begingroup\$ This is safe; please reveal the language! \$\endgroup\$ – MD XF Feb 19 '18 at 4:10
  • \$\begingroup\$ The provided interpreter on esolangs does not build correctly: main.c:34:2: error: too many arguments to function ‘init’ \$\endgroup\$ – a spaghetto Feb 21 '18 at 16:58

Mouse, 35 bytes, safe

A little late to the party, but here's one:



Mouse is a simple stack based language that was described in Byte magazine in 1979 or so. Expressions are postfix. Single letters represent variables. When a variable name is scanned in the code, the address of the variable is pushed on the stack. The code above works with the Pascal version of the interpreter which pushes a '1' for A. A C version of the interpreter pushes a '0' for A.

The . operator retrieves the value in the variable indexed by the top of the stack. = pops the top two values from the stack and stores the value from the top into the variable indexed by the second from the top.

(..^..) is a loop; the^ pops the top of the stack and exits a loop if the value is zero ! pops and prints the top of the stack. "..." outputs the characters in quotes.

Because 1 and A both cause the value 1 to be pushed on the stack, 1. is equivalent to A.. This is used to obfuscate the code, e.g., A1.1+= instead of AA.1+=.


2T5*=                             var[2] = T * 5 (i.e. B = 20*5)
     (                            loop
      A1.1+=                      A = var[1] + 1  (i.e. A = A + 1)
            1.!                   push var[1] (i.e., A) and output it
               B2.1-=             B = var[2] - 1 (i.e. B = B - 1)
                     2.^          push var[2] (i.e. B) and exit loop if zero
                        "\n"      output a newline
                            )     end of loop
                             B    junk filer
                              $$  end of program
  • \$\begingroup\$ This is safe; please reveal the language! \$\endgroup\$ – MD XF Feb 19 '18 at 4:09

Literate Python, 162 bytes, safe

def define_i():

    global i

    i = 0


while i < 100:

    i += 1


def ruin():

    for i in range(99):

        print(i + 2)


Literate programming is a programming style where a program is written as a document that describes the behavior of the program along with its actual code, so programs mostly consist of paragraphs of prose followed by a few lines of code. Needless to say, being on PPCG, I'm not particularly interested in this concept :)

I'm not sure whether this counts. I'm heavily basing the validity of this answer off of this answer by Dennis, which uses an implementation of C with different behavior that is not present on Wikipedia or TIO.

Here, the "compiler" is this Ruby script, which extracts the actual code from a literate programming file (it is intended for Ruby programs and as such generates .rb files, but the Python interpreter doesn't care). When converting a literate program to a real program, the script simply searches for indented sections with blank lines around them. This means that the code that is actually executed looks like this:

global i
i = 0
i += 1
for i in range(99):
    print(i + 2)

For some reason, a top-level global statement is not an error and is simply ignored, so this program prints out the integers from 1 to 100.

  • \$\begingroup\$ Does this print anything outside of the 1-100 area? (i.e. are there trailing characters) \$\endgroup\$ – Solver Feb 13 '18 at 11:15
  • \$\begingroup\$ @Solver There is a trailing newline, just like there would be if Python was the correct answer. \$\endgroup\$ – Esolanging Fruit Feb 13 '18 at 15:07
  • \$\begingroup\$ One more day to be safe... \$\endgroup\$ – RaviRavioli Feb 20 '18 at 1:50
  • \$\begingroup\$ This is safe now. \$\endgroup\$ – Christopher Feb 20 '18 at 19:24
  • \$\begingroup\$ @Christopher Revealed the language. \$\endgroup\$ – Esolanging Fruit Feb 21 '18 at 5:10

Befunge-98, 40 bytes, cracked by totallyhuman

"0" < q <= s' * 1e' * g * 1061 * 19 * 77

Outputs as decimal integers.

  • \$\begingroup\$ Cracked. \$\endgroup\$ – totallyhuman Feb 6 '18 at 21:23
  • \$\begingroup\$ @totallyhuman that was faster than I expected \$\endgroup\$ – ovs Feb 6 '18 at 21:27

Brainf*ck, 322 bytes, cracked by totallyhuman

m=-9;g=(str((2>m)+x) for x in range(lol));print("\n".join(g));1 < 2 or e#]

This is way too long to win, but it probably won't be safe anyways.


Foo, 30 bytes, cracked by MD XF

It wouldn't be the Programming Language Quiz without Foo!


Outputs in decimal, with a newline after each number.

  • \$\begingroup\$ Cracked. (didn't see that coming) \$\endgroup\$ – MD XF Feb 7 '18 at 0:13

Commentator, 223 bytes, cracked by totallyhuman

print "H e l l o, W o r l d!", end = 10
for i in range( 1 0 0 ):
        print i
;{-Haskell ?-}
(({- Execute some# brainflak here#}))
;-}Perl: bvgk,l/;'juhedwsed/*{-:
05AB1E: 12DD/* Way to convert to float, nice :)

I might as well join in the fun! I'm pretty sure this doesn't work in any other languages, but Perl can be weird, so you never know. This outputs in bytes, so the output should look like:


MATL, 54 bytes, cracked by ovs

False T
For nnz(100) T+1 
'cout <<' T
bux bux Q

Well, there's an emoji in there... )o:

It's actually the c in 'cout'(code-point 99) that makes the range end at 100, not the number 100 in the code.

Outputs as a list of numbers, separated by spaces.


F             % Push False (0)
 a            % any(). Stack: 0
  l           % ones(). Stack: 0, 1
   s          % sum(). Stack: 0, 1
    e         % reshape(). Stack: 0
      T       % Push True (1). Stack: 0, 1
F             % Push False (0). Stack: 0, 1, 0
 o            % parity(). Stack: 0, 1, 0
  r           % Push random number. Stack: 0, 1, 0, 0.4234..
    n         % numel(). Stack: 0, 1, 0, 1
     n        % numel(). Stack: 0, 1, 0, 1
      z       % nnz(). Stack: 0, 1, 0, 1
       (      % Assignment indexing. Stack: 0, 0
        100   % Push 100. Stack: 0, 0, 100
           )  % Reference indexing (nothing there). Stack: 0, 0
             T     % Push True(1). Stack: 0, 0, 1
              +    % Add last two numbers: Stack: 0, 1
               1   % Push 1. Stack: 0, 1, 1
'cout <<'        % Push string, 'cout <<'. Stack: 0, 1, 1, 'cout <<'
          T      % Push True (0). Stack: 0, 1, 1, 'cout <<', 1
)                % Reference indexing using T as index to the string. Stack: 0, 1, 1, 'c'
 o               % Convert to double. Stack: 0, 1, 1, 99
  :              % Range from 1 to 99. Stack: 0, 1, 1, [1, 2, ... 99]
b                % Bubble. Stack: 0, 1, [1 2, ... 99], 1
 ux              % Unique, and delete last element. Stack: [0, 1, [1, 2, ... 99]
    bux          % The same again. Stack: 1, [1, 2, ... 99]
        Q        % Increment. Stack: 1, [2, 3, ... 100]
hu               % Horizontal concatenation and unique. Stack: [1, 2, ... 100]
  • \$\begingroup\$ cracked \$\endgroup\$ – ovs Feb 7 '18 at 15:04
  • \$\begingroup\$ Yeah, nnz is very revealing. \$\endgroup\$ – Erik the Outgolfer Feb 7 '18 at 15:14
  • 1
    \$\begingroup\$ In hindsight, I should maybe have chosen something else than those functions as nnz is a common MATLAB function, and that makes you think of MATL. But nnz(100) is something very different in MATL than in MATLAB. \$\endgroup\$ – Stewie Griffin Feb 7 '18 at 19:53
  • \$\begingroup\$ Explanation added. :) \$\endgroup\$ – Stewie Griffin Feb 11 '18 at 20:43

Coconut, 244 bytes, cracked by Dennis

p = print; r = range; one = 1; hundred = 100; i = 'index'  # set up variables 
for i in r(one, hundred + one):  # loop over each number in interval [1, 101) ∩ ℤ to print	  	
	if i==hundred:


Try it online!

  • \$\begingroup\$ Damn, that's sneaky! +1 \$\endgroup\$ – caird coinheringaahing Feb 14 '18 at 19:51
  • \$\begingroup\$ To save some TIO computing power: Python 2 complains about 'print' (it's a command, not function); Python 3 complains about inconsistent tab/spaces. \$\endgroup\$ – user202729 Feb 15 '18 at 5:03
  • \$\begingroup\$ This is Coconut. \$\endgroup\$ – Dennis Feb 15 '18 at 14:30
  • \$\begingroup\$ @Dennis ...Wait, it works in Coconut? o0 \$\endgroup\$ – totallyhuman Feb 15 '18 at 14:35
  • 3
    \$\begingroup\$ One cookie, please. \$\endgroup\$ – Dennis Feb 15 '18 at 15:56

Width, 249 bytes, safe

Oml, my GL :G
      		  MM :Z 
	  	  i'm GR8 ;]
GL mom! 	
	  	  F#$! i'm my RAG3! >:[
 	 	  111'M Gr8! =] 

w0W i'm IQ=1
 	  	  Ik! ;]

		  i Wi11 
                  WOw! 1 RAN and WON

Try it online!

Is this a program, or did I accidentally screenshot my text history?

Output is in the form [1, 2, 3, ... 99, 100]

Width gives you a lot of leeway by:

  • Only executing alphabetic characters
  • Allowing you to choose between sets of characters for each command (for example, command 3 can be any of a b d e g h n o p q u L, though command 9 can only be W)

All the whitespace nonsense, the IQ=100 and the emoticons were red herrings.

The executing code is


Which pushes the string print(list(range(1,101))) and evaluates it using the inbuilt Python eval command. BTW, I'm pretty sure the looping mechanism for that language is broken, since it kept hitting a recursion limit when I tried to use it... :(

  • \$\begingroup\$ This is safe; please reveal the language! \$\endgroup\$ – MD XF Feb 19 '18 at 4:09

VoidLang, 2627 bytes, cracked by moonheart08


I couldnt resist to use my own toy language.

  • \$\begingroup\$ This was really a pain to copy so I could paste into an interpreter. Pastebin where you can select-all. \$\endgroup\$ – MD XF Feb 13 '18 at 3:27
  • \$\begingroup\$ @MDXF double clicking it selects the entire text on my computer \$\endgroup\$ – dylnan Feb 13 '18 at 6:16
  • \$\begingroup\$ What's the output format? \$\endgroup\$ – totallyhuman Feb 13 '18 at 15:56
  • \$\begingroup\$ @totallyhuman the output format is numbers with | as separator \$\endgroup\$ – iovoid Feb 14 '18 at 2:46
  • \$\begingroup\$ I know what this is, and you know it @iovoid. Cracked when I wake up tommorow \$\endgroup\$ – moonheart08 Feb 16 '18 at 4:08

Underload, 659 bytes, cracked by MD XF

lpvO`.U%C$j<{YNXzbF[=/n'A5 7KYL3$3IZvrP>P%LJ&`fv[5]$3(
L:hw2s ="dY0g/4YS14#>Y.GIs=KMm"H[&]r3[G])VgE(hCLyP8cs[
*&nL0Jg]{/{J),[[{[s]j}]]=f7f B:5k}"B{1A}}{*T}1Tr/cRX w
t2@^.{h}K7lo{<d}xozh>wb?Hello worldHello worldHello wo

This is Underload. The Underload interpreter on TIO ignores invalid commands (anything other than :*()^aS!~), so the program looks like this:

I wrote a Python script that generated random ASCII (excluding Underload commands) with matching brackets. I then filled in the result with my Underload program.

  • \$\begingroup\$ Is this Gammaplex? Can't find a working interpreter to test it out \$\endgroup\$ – MD XF Feb 8 '18 at 4:13
  • \$\begingroup\$ @MDXF I'll just answer your question to save you time: No. \$\endgroup\$ – Esolanging Fruit Feb 8 '18 at 4:49
  • 4
    \$\begingroup\$ Cracked, finally! \$\endgroup\$ – MD XF Feb 13 '18 at 5:08
  • 2
    \$\begingroup\$ @MDXF nice crack and EsolangingFruit nice obscuring ( I can't spell obfuscation) \$\endgroup\$ – MickyT Feb 13 '18 at 5:24
  • \$\begingroup\$ The matching brackets/braces/parenthesis gave it away for me. \$\endgroup\$ – MD XF Feb 13 '18 at 5:52

mmo (MMIX executable), 92 bytes, safe


00000000: 9809 0100 9801 0001 584b 4344 e355 0064  ........XKCD.U.d
00000010: 3737 3637 e437 2000 af55 ff0b a255 5537  7767.7 ..U...UU7
00000020: 2755 5501 5555 fffe e055 2000 ad55 ff03  'UU.UU...U ..U..
00000030: 0000 0601 0000 0000 980a 00ff 2000 0000  ............ ...
00000040: 3755 5500 980b 0000 204d 2061 2069 246e  7UU..... M a i$n
00000050: 584b 4344 8100 0000 980c 0004            XKCD........

Hexdump (xxd -p):


Output is bare characters to stdout.

I'm surprised no-one got this. I thought the 0x98 characters appearing at five separate positions, all multiples of four, would give it away quickly.

A tetrabyte-by-tetrabyte explanation (including loader instructions):

98090100 lop_pre 1,0         (preamble, mmo v1, 0 tetras)
98010001 lop_loc 0x00,1      (the next tetra says where to load)
58484344 "XKCD"              (because why not?)
E3550064 SETL  $85, 100      (i = 100)
37373637 NEGUI $55, 54, 55   (data = -1)
E4372000 INCH  $55, 0x2000   (data = [instruction segment start - 1])
AF55FF0B STOUI $85, $255, 11 (store 100 to octabyte after M₈[$255]¹)
A2555537 STBU  $85, $85, $55 (data[i] = i)
27555501 SUBUI $85, $85, 1   (i--)
5555FFFE PBPB  $85, @-16     (jump back two instructions if i > 0)
E0552000 SETH  $85, 2000     ($85 = data+1)
AD55FF03 STOI  $85, $255, 3  (store $85 to M₈[$255]¹)
00000601 TRAP  0, 6, 1       (write first 100 data bytes to stdout²)
00000000 TRAP  0, 0, 0       (halt)
980A00FF lop_post 255        (begin postamble, rG = 255)
37555500                     ($255 = 0x2000000037555500)
980B0000 lop_stab            (begin symbol table)
81000000                     (val["Main"]="XKCD")
980C0004 lop_end 4           (symtab is 16 bytes long)

1) Octabyte storage disregards the last three bits of the location to store.
2) Syscall 6 is fwrite, which takes as arguments the Z operand for file descriptor (1 is stdout), M₈[$255] as the buffer pointer, and M₈[$255+8] as the buffer length.

I didn't obfuscate this at all, except by arranging for a lot of repeated bytes (all the Us and 7s); I just wrote a simple algorithm and hand-assembled it.


Labyrinth, 17 bytes, cracked by totallyhuman


Try it online!

Output is decimal and linefeed-separated.


[] and letters aren't commands in Labyrinth, so they act as walls and they might as well be spaces:

 \ _

The final @ is also a red herring, because the control flow never gets there. The main program is just the following loop:

#    Push the current stack depth. This is i-1 (where i is the number printed in the
     current iteration).
#    Push the current stack depth. This is i.
!    Print i as a decimal integer.
_99  Push 99.
-    Subtract it from i-1. This gives 0 iff we want to terminate the program. In that
     case the IP moves to the @, otherwise it continues the loop.
\    Print a linefeed.

@ terminates the program.

  • \$\begingroup\$ Cracked. \$\endgroup\$ – totallyhuman Feb 6 '18 at 23:44
  • \$\begingroup\$ @totallyhuman and now with an explanation of the code, please. ;) (I'll edit the post tomorrow when I'm at a PC again.) \$\endgroup\$ – Martin Ender Feb 6 '18 at 23:57
  • \$\begingroup\$ Hah, no. I tried three of your languages before I got to this one. Remarkably like Retina (I assume that's what you were going for) though. Maybe I'll go through Labyrinth's docs though. :P \$\endgroup\$ – totallyhuman Feb 7 '18 at 0:00

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.