68
\$\begingroup\$

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>

Formatting

(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!

\$\endgroup\$
14
  • 12
    \$\begingroup\$ How not to compete in this challenge. \$\endgroup\$ 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
  • 1
    \$\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\$ 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\$ 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

177 Answers 177

3
\$\begingroup\$

Labyrinth, 17 bytes, cracked by totallyhuman

[##!]
[\X_]
@-99@

Try it online!

Output is decimal and linefeed-separated.

Explanation

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

 ##!
 \ _
@-99@

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.

\$\endgroup\$
3
  • \$\begingroup\$ Cracked. \$\endgroup\$ 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\$ 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\$ Feb 7 '18 at 0:00
3
\$\begingroup\$

Prelude, 41 bytes, cracked by Conor O'Brien

for{# [1+1];
64+(1-v(1-)++);
100^x; rev!}

Try it online!

Output as code points.

\$\endgroup\$
1
3
\$\begingroup\$

ELVM IR, 587 bytes, cracked by Dennis


	.text
main:
	mov D, SP
	add D, -1
	store BP, D
	mov SP, D
	mov BP, SP
	.file 1 "-"
	.loc 1 2 0
	mov A, 1
	mov B, BP
	add B, 2
	store A, B
	.L0:
	mov B, BP
	add B, 2
	load A, B
	mov D, SP
	add D, -1
	store A, D
	mov SP, D
	mov A, 101
	mov B, A
	load A, SP
	add SP, 1
	lt A, B
	jeq .L3, A, 0
	jmp .L4
	.L3:
	jmp .L2
	.L4:
	mov B, BP
	add B, 2
	load A, B
	mov D, SP
	add D, -1
	store A, D
	mov SP, D
	putc A
	add SP, 1
	.L1:
	mov B, BP
	add B, 2
	load A, B
	mov D, SP
	add D, -1
	store A, D
	mov SP, D
	add A, 1
	mov B, BP
	add B, 2
	store A, B
	load A, SP
	add SP, 1
	jmp .L0
	.L2:
	exit
\$\endgroup\$
2
  • 2
    \$\begingroup\$ Cracked. \$\endgroup\$
    – Dennis
    Feb 7 '18 at 0:18
  • 1
    \$\begingroup\$ @Dennis Knew you'd be the one to crack this, nice job \$\endgroup\$
    – MD XF
    Feb 7 '18 at 0:31
3
\$\begingroup\$

Element, 15 bytes, cracked by RIyeh

1 100'[2:`1+a`]

Not too hard.

\$\endgroup\$
5
  • \$\begingroup\$ Was this meant to work in Surface? If so, it counts up forever. \$\endgroup\$
    – MD XF
    Feb 7 '18 at 0:32
  • \$\begingroup\$ @MDXF Nope. 15char \$\endgroup\$ Feb 7 '18 at 0:33
  • 1
    \$\begingroup\$ Cracked by Rlyeh \$\endgroup\$
    – NieDzejkob
    Feb 7 '18 at 13:53
  • \$\begingroup\$ Oh hey, it's my language! Also, here's the same thing in only 12 bytes: d,'[1+2:`a`] \$\endgroup\$
    – PhiNotPi
    Feb 11 '18 at 3:47
  • \$\begingroup\$ @PhiNotPi oh nice. I'd never used Element, and I just read the dovs. It looks really cool. \$\endgroup\$ Feb 11 '18 at 16:10
3
\$\begingroup\$

MY, 4 bytes, cracked by ErikTheOutgolfer

⌶tIv

This is in the Dyalog APL classic codepage, if that's acceptable. APL snippet that can be used as a code page.

Note, the code uses the byte values of characters in its source, not the APL characters.

Output format: Array of integers

Here's the hex if you need it:

0a24 4926
\$\endgroup\$
6
  • 2
    \$\begingroup\$ You changed the codepage to mislead us >_> \$\endgroup\$ Feb 7 '18 at 10:40
  • \$\begingroup\$ I did, because if I had it in the original codepage, it'd be too easy \$\endgroup\$
    – Adalynn
    Feb 7 '18 at 11:51
  • \$\begingroup\$ So is really 0x0a, a newline? \$\endgroup\$
    – MD XF
    Feb 8 '18 at 4:10
  • \$\begingroup\$ Yes, that is really 0x0a. \$\endgroup\$
    – Adalynn
    Feb 8 '18 at 14:15
  • \$\begingroup\$ Gotcha. I have to swear it wouldn't have been easy if the language's encoding was used instead of Dyalog's. \$\endgroup\$ Feb 8 '18 at 15:52
3
\$\begingroup\$

Attache, 58 bytes, cracked by Dom Hastings

??MultivariateHypergeometricDistribution
Map[Print,1..100]

Try it online!

Verbose languages are pretty cool :>

Fortunately, Attache is pretty short

Prints newline-separated list of numbers.

\$\endgroup\$
1
3
\$\begingroup\$

Brain-Flak (Brainhack), 445 bytes, cracked by Christopher

#begin(
 #import(Integer)
 #import(String)
 #import(STDOUT)
 #define(Name:Main)(In:None)(Out:String,Int)(Mixed:TRUE)(Flags:None)(Requires:"String.format")(Coding:"UTF-8"))
 #begin Main(
  Integer.ranges.from$100.forEach{STDOUT.write(String.format{$0 }.with*$0=Self)(dropWhere{!$0}[ignoreIf:(0)])}
  Except{OutOfBounds}
 )
STDOUT.stream.read.forEach{with*$0=Self(Integer.ranges.from$100.filter(by:{1...101~=$0})[ignoreIf:(0)])}(if!Error){exit$0;}

Output is a space-separated list of integers in decimal.

\$\endgroup\$
2
3
\$\begingroup\$

1+, 35 bytes, cracked by Rlyeh

11+""*""*"+""+++1\1<#":1+^"/^"\^<#:

Outputs numbers separated by newlines. This one is probably going to be easy, but I had some fun with it nonetheless.

Explanation time!
11+""*""*"+""+++                 [construct 100] [stack: 2 100]
1\1<                   [push a 1 and create a 0] [stack: 100 1 0]
#   [loop start, 0 required for first iteration] [stack: 100 x]
":                         [duplicate and print]
1+                                   [increment]
^"/^"\^ [duplicate both the counter and the 100] [stack: 100 x 100 x]
<                             [compare x to 100] [stack: 100 x (0 or 1)]
#    [jump back to first label if counter < 100]
:                      [print 100 one last time]

The basic idea for this program was to use a counter starting at 1 which would be printed, incremented and then compared to 100, using 1+'s only built-in comparison operator <, sending program flow either to the first or second #.

In the posted version, the 100 is constructed once (1+, as the name may suggest, only has the constant 1, any other value must be created somehow), then stored below the counter on the stack for the duration of the printing process.
I later (after posting) realized that this was unnecessary, because doing so requires a long sequence of operations; I managed to get it down to 27 bytes by reconstructing the 100 every time (and using a shorter path for constructing it):

111+1<#":1+"11+"1++"+"*^<#:
\$\endgroup\$
4
  • 1
    \$\begingroup\$ Is the language 1+? \$\endgroup\$
    – Rlyeh
    Feb 9 '18 at 13:38
  • \$\begingroup\$ @Rlyeh Yes, it was. \$\endgroup\$
    – ivzem
    Feb 9 '18 at 15:09
  • \$\begingroup\$ It looked like it but I wasn't sure, couldn't find an online interpreter and ended up installing the wrong python. \$\endgroup\$
    – Rlyeh
    Feb 9 '18 at 15:32
  • \$\begingroup\$ Cracked \$\endgroup\$
    – Rlyeh
    Feb 9 '18 at 15:42
3
\$\begingroup\$

Lily, 27 bytes, cracked by Cowabunghole

for i in 1...100:{print(i)}

Seems simple, but I feel like this is fairly (maybe) obscure. Prove me wrong!

\$\endgroup\$
1
3
\$\begingroup\$

Implicit, 212 bytes, cracked by Dennis

int f(int x_1)
{
    int i, foóßar = 1;
    int *arr = 0x23d3f44e >> 0xa;

    for (i = ']'; 100 % foóßar++, *(arr+i/1234) += ']'; 0-101)
        putchar(&arr[i]);

    return -8;
}

int main(void)
{
    f(42);
}

Obviously this is not C, it's my language. Stripping no-ops gives us this:

intf(intx_1)inti,foóßar=;int*arr=x23d3f44e>>xa;for(i=']';%foóßar++,*(arr+i/1234)+=']';-101)putchar(&

The & ends the program.

All alphabetical characters push their codepage value to the stack. Let's replace every run of alphabetical characters we don't care about with Z.

Z(Z_1)Z,ZóßZ=;Z*Z=Z23Z3Z44Z>>Z;Z(Z=']';%ZóßZ++,*(Z+Z/1234)+=']';-101)Z(&

( starts a loop and ) ends it. The loop continues while the top of stack is nonzero. Pushing an ASCII character and then performing _1 always sets the top of stack to zero, so we can completely ignore the first loop.

Pushng Z and then dividing by 1234 also always results in zero, so we can ignore the inner loop (and all the code inside it) too.

The last loop is only an open-loop and immediately exits, so we can kill that too. Our code thus becomes:

Z,ZóßZ=;Z*Z=Z23Z3Z44Z>>Z;Z(=']';%ZóßZ++,*+=']';-101)Z&

; means 'pop'. If we take out any code that pushes to the stack and then is immediately popped, the code becomes:

Z,óßZ*Z=Z23Z3Z44Z>>Z(=']%ZóßZ++,*+=']-101)Z&
  • The first comma swaps the top two stack values, but there's only one, so we can remove it.
  • The Z23Z3Z44Z>>Z just pushes a ton of Zs to the stack, which are never used, so we might as well just be pushing Z.
  • Most of the mathematical operations are never used, so let's replace those with Z too.
  • ' (read string) is useless because we never provide any input.

Our code golfs down to:

ZóßZ(Z]%ZóßZ]-101)&

Okay, so now we reveal what's really going on.

  • ó is equivalent to ].[ (pull register to stack, increment, push to register).
  • ß is equivalent to @10 (print ASCII 0x10).

Since we pull the register every time we actually care to interact with memory, we can completely ignore everything non-register-related that interacts with the stack when the register isn't the top of stack:

óß(]%óß]-101)&

So, the program increments the register, prints a space, opens a loop, pulls the register, prints it, prints a space, pulls the register, subtracts 101, and loops while register - 101 is nonzero. Then it exits.

:)


Side note: The shortest Implicit program to perform this task would be (;.%ß<100ö.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Cracked. \$\endgroup\$
    – Dennis
    Feb 9 '18 at 5:18
3
\$\begingroup\$

Wise, 41 bytes, cracked by Potato44

   ~-<<:>>-~
||<<<:<:>:>>>||
   |[: ?-~]|

Outputs as decimal numbers.

Wise has only bitwise operators. The executing code is:

~-<<:<<<:<||[:?-~]|

and everything else is decoration or countering the decoration.

~-<<:<<<:<|| Creates the number 100 
[            While the number is not 0
 :?          Dupe and push the copy to the bottom of the stack
 -~          Decrement the number
]|           End the loop and pop the extra 0 by OR'ing it with the 1
             And output implicitly
\$\endgroup\$
2
  • 2
    \$\begingroup\$ Cracked. I suddenly realized your answer is Wise when I thought one of the other answers might have been Wise. \$\endgroup\$
    – Potato44
    Feb 9 '18 at 15:41
  • 4
    \$\begingroup\$ You might say your answer has been wisecracked....... I'll see myself out. \$\endgroup\$ Feb 9 '18 at 21:44
3
\$\begingroup\$

O, 9 bytes, cracked by PhiNotPi

Shouldn't be difficult, not trying to obscure it, so it may work in other than the intended language

['d#,;r]o

Output:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
\$\endgroup\$
1
3
\$\begingroup\$

QuakeC, 144 bytes, cracked by totallyhuman

$flags as spam
void(string s)dprint=#25;string(float f)ftos=#26;void()main={local float j;j=1;while(j<101){dprint(ftos(j));dprint(" ");j=j+1;}};

Outputs decimal numbers, separated by spaces.


As an aside, in QuakeC, built-ins are assigned numerical IDs which you can then forward declare as proper functions in order to use them. #25 and #26 are the IDs used for dprint and ftos in actual Quake, but some less-compliant (but significantly easier to use than booting up a real Quake server) VMs have different IDs.

The $flags as spam is a no-op: $ is deliberately ignored by Quake C compilers, since it's used for pragmas by the modelgen tool.

\$\endgroup\$
2
3
\$\begingroup\$

Eitherfuck, 35 bytes, cracked by Ryleh

#+,<<+-----<-----0+++++[+++++<][+<]

This is definitely Brainfuck. Try it online!

\$\endgroup\$
3
  • \$\begingroup\$ It looks like Eitherfuck \$\endgroup\$
    – Rlyeh
    Feb 11 '18 at 16:41
  • \$\begingroup\$ @Rlyeh Link to crack? \$\endgroup\$
    – MD XF
    Feb 11 '18 at 18:46
  • \$\begingroup\$ Cracked \$\endgroup\$
    – Rlyeh
    Feb 12 '18 at 4:37
3
\$\begingroup\$

23.dezsy, 35 bytes, cracked by totallyhuman

22,1,16,10,10,-1,1,10,2,12,27,0,211

Outputs one number per line.

\$\endgroup\$
4
  • \$\begingroup\$ Prints 01234567891011121314151617181920210012345678910111213141501234567890123456789 in CJam, hope that isn't what you were going for... Edit, does the same thing in Convex. \$\endgroup\$
    – MD XF
    Feb 11 '18 at 2:58
  • \$\begingroup\$ @MDXF No, it's not CJam or Convex. \$\endgroup\$
    – jimmy23013
    Feb 11 '18 at 3:22
  • \$\begingroup\$ This is 23. \$\endgroup\$ Feb 11 '18 at 23:49
  • 1
    \$\begingroup\$ @totallyhuman Correct. I thought this is one of the most obscure languages that is eligible and has been used on PPCG. \$\endgroup\$
    – jimmy23013
    Feb 12 '18 at 5:01
3
\$\begingroup\$

MiLambda, 52 bytes, cracked by @ErikTheOutgolfer

v
E
Ξ
ς
v<
E`A:*[>+.<]
υ^
ε
Ξ
ς
v<
Δ
Θ
>σλ

The output format is raw characters.

This is MiLambda, a 2D language where most of the commands are Greek letters. I tried to make the program look non-2D by putting each command on a separate line and deflecting the IP down at the beginning of the program. The loops don't necessarily look like loops (since υ isn't exactly an obvious conditional direction change); this could have been better hidden if I had been able to get vertical conditional directionals to work. To obfuscate it a bit, I just put A:*[>+.<] on one of the lines (A:* looks like something from a stack-based language to compute 100, and [>+.<] looks like a character counting loop in some BF derivative).

\$\endgroup\$
3
  • \$\begingroup\$ cracked \$\endgroup\$ Feb 7 '18 at 12:49
  • \$\begingroup\$ Removing the language name from the title messes up the leaderboard snippet \$\endgroup\$
    – Jo King
    Feb 13 '18 at 7:48
  • \$\begingroup\$ @JoKing Realized that just after changing all of my answers over :( \$\endgroup\$ Feb 13 '18 at 7:50
3
\$\begingroup\$

><>, 82 bytes, cracked by Jo King

def i = 1 ** (1+0): {if i == 99, $g = ?#: {$d or $n} i -> 98 + 0.0: put i++: loop}

Prints numbers in decimal, separated by carriage returns, including a leading one.

This lasted a long time considering that ><> is my main language to golf in… Ignoring the extra stuff pushed to the stack and the meaningless shuffling, this is how it works:

def i = 1 ** (1+0)   Push 1 (rather circuitously)
:                    Duplicate
{if i == 99, $g      Push 1,0 and get the char at
                        that position (it's "e"=101)
= ?#                 If the thing on the stack equals
                        101, crash the program
: {$d or $n          Print CR then the number
} i -                Increment (by subtracting -1)
> 98 + 0.            Push 17,0 then jump back to that
                        position (the first ":").
0: put i++: loop}    And the fish never reaches here!

\$\endgroup\$
1
3
\$\begingroup\$

Java (OpenJDK 8), 166 bytes, cracked by Jo King

/*‮*/ inter\u0066ace S‭{/*//Hello World!‮*/static void main(/**/String[]a‮){for(char b‮=0;b‮++
<10/*‮*/*10;)System\u002e/*‭*/out/*‮*/.print(b‮);}}

‮!ti tnaw uoy erehw ti gnitteg no kcul dooG
‮.TUODTS ot 46x0 ot 10x0 morf sedoc iicsa eht stuptuo tI
‮... sseug ot ysae ytterp eb dluohs sihT

\$\endgroup\$
2
  • 4
    \$\begingroup\$ hex dump please? I can't even select the code, and when I try to navigate ‮);}} with the arrow keys, it gets stuck in an infinite loop :( \$\endgroup\$
    – Jo King
    Feb 12 '18 at 7:50
  • \$\begingroup\$ This is Java \$\endgroup\$
    – Jo King
    Feb 12 '18 at 8:00
3
\$\begingroup\$

BitCycle, 140 bytes, safe

exec("""
0v&~2*50
0v~^1|+x
00~110=m
0v~^e:'d
+:(~100)
v[~^aCC]
0}~1{Xv#
v&~^|25~
(v4*25+)
+H-x-_+_
e^2,|b@5
1mXv,100
Y^_~+,h.
n!`"<"`~
""" )

Outputs in unary, with 1 for the numbers and 0 for the separator.

Or, you can add the -u flag to get output in decimal, separated by commas.


Here's the code I started with pre-obfuscation:

     v ~
     v~^
00000 ~
     v~^

    +  ~
    v ~^
00000>~
v   < ~^

    >  v
 v    <
>A\C\ ^
 ^  / @
1BCv
 ^ ~+
 !  <  <

This element:

 v ~
 v~^
> ~
 v~^

is one of the best ways I've found to generate large numbers. It takes one or more zero bits in at the > and sends four times as many zero bits out the bottom v. Here, to get 100 zero bits, I fed five of them into this "quadruplicator," and then fed the output plus five more into a second quadruplicator.

Then the bottom part counts up from 1 to whatever number of zero bits it gets in the A collector. (Detailed explanation available on request.) Once A is empty, a bit hits the @, which halts the program.

For the obfuscated version, I packed everything in a little tighter, replaced the spaces with various no-ops, changed some of > < to } { or + or ~ and \ / to - | (equivalent under certain circumstances) to look less like a 2D language, and finally threw in the exec for good measure.

\$\endgroup\$
3
\$\begingroup\$

MashedPotatoes, 641 bytes, safe

synchronized(std::ignore){std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;std::cout<<"Hello,world!"<<std::endl;goto nullptr;WHILE 0.0f>`uniq-c`
s/++i//g
WEND goto __dict__;(format t"goto void(0);WHILE <> <(int)std::ignore
use strict qw/Object/;
WEND goto nullptr;goto __dict__;proc $ARGV{STDERR} {OUTPUT=*read-eval*}")}

Prints 1 to 100 as numbers, separated by newlines. Probably not too difficult but whatever.

I was worried it would be too easy since I used a language of my own design, but I couldn't resist the opportunity to actually use this language for one of the few things it can actually do without being too awful.

\$\endgroup\$
2
  • 2
    \$\begingroup\$ This is the safe answer that uses the most bytes. That makes me the winner, right? \$\endgroup\$ Feb 19 '18 at 5:28
  • \$\begingroup\$ Haha, this language is awesome. Perfect for obfuscation challenges (too bad it's kind of a one time thing). \$\endgroup\$ Feb 21 '18 at 17:06
3
\$\begingroup\$

Glypho (shorthand), 39 bytes, safe

11+dd*1+*d*d1-+[d1-+>-+o11+dd*1+*d*1+>]

Try it online!

I like using languages that are in plain sight but somehow manage to evade what people think of. That's why every cop of mine is on TIO.

\$\endgroup\$
2
  • \$\begingroup\$ This is safe; please reveal the language! \$\endgroup\$
    – MD XF
    Feb 23 '18 at 1:00
  • \$\begingroup\$ Aw dangit, I could have easily identified this but I didn't see it in time. \$\endgroup\$
    – Lynn
    Feb 23 '18 at 19:28
3
\$\begingroup\$

ELF (x86/x64, Linux), 383 bytes, safe

0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 0300 0100 0000 b080 0408 2c00 0000  ............,...
0000020: 0000 0000 0000 0000 3400 2000 0100 0000  ........4. .....
0000030: 0000 0000 0080 0408 0080 0408 7f01 0000  ................
0000040: 7f01 0000 0500 0000 0010 0000 31c0 5068  ............1.Ph
0000050: 2a01 0000 b0a2 89e3 89e1 cd80 4074 f583  *...........@t..
0000060: c408 b964 0000 0051 9185 c07d 1450 6a2d  ...d...Q...}.Pj-
0000070: 31db 4389 da89 d8b0 0489 e1cd 8059 58f7  1.C..........YX.
0000080: d831 dbb3 0a53 31d2 f7f3 83c2 3052 09c0  .1...S1.....0R..
0000090: 75f4 89e1 31db 4389 da89 d8b0 04cd 8058  u...1.C........X
00000a0: 3c0a 75ee 5949 83f9 9b75 bce9 ca00 0000  <.u.YI...u......
00000b0: 31c0 b002 cd80 09c0 7592 5958 09c0 75fb  1.......u.YX..u.
00000c0: 31db 31c0 b02d cd80 89c5 ba5f b8f6 ea81  1.1..-....._....
00000d0: f20f f9a2 a231 c949 418b 048c 09c0 0f84  .....1.IA.......
00000e0: 9600 0000 3910 75f0 8078 043d 75ea 8d70  ....9.u..x.=u..p
00000f0: 0556 31db 31c9 ac3c 3a74 0708 c074 0341  .V1.1..<:t...t.A
0000100: ebf4 39d9 0f47 d908 c075 e98d 5c1d 0c31  ..9..G...u..\..1
0000110: c0b0 2dcd 805e 89ef ac3c 3a74 0708 c074  ..-..^...<:t...t
0000120: 03aa ebf4 b874 6447 df35 5b1c 23b8 ab35  .....tdG.5[.#..5
0000130: 0217 1402 ab35 436f 41f3 ab89 e2b8 7a00  .....5CoA.....z.
0000140: 8728 5035 1e38 c15d 5035 0354 6914 5035  .(P5.8.]P5.Ti.P5
0000150: 0003 404f 5035 1455 4001 5035 1b4e 5b5f  ..@OP5.U@.P5.N[_
0000160: 5089 e331 c050 5355 89e1 89eb b00b cd80  P..1.PSU........
0000170: 89d4 8a46 ff08 c056 759b 31c0 40cd 80    ...F...Vu.1.@..

I think you can see that I like hiding my programs in binary files. Output format: decimal numbers. Oh, and to save CPU time on TIO: the obvious "language" timeouts.


... since this was explicitly designed so that it does not work on TIO - the numbers are printed after waiting 4 minutes and 58 seconds, as per

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

The separator used is 0A 2D, or


-

If using integers, you should output with a constant non-digit delimiter between each number.

Outputs 295 leading bytes, and a single trailing one. Much less than a thousand (evil laugh).

You may also output with leading and trailing characters [...] but please be sensible (don't output a thousand bytes of rubbish either side of the count for instance).

Also, try running it on a desktop computer. You won't regret. I promise.

\$\endgroup\$
2
  • 2
    \$\begingroup\$ The funny part is that I ran this, but discarded the solution because of the garbage output. \$\endgroup\$
    – Dennis
    Feb 24 '18 at 20:54
  • \$\begingroup\$ @Future readers: 2a01 at offset 0x50 is the timeout, change it to 0100 if you want it to run in TIO. (Setting it to zero removes the easter egg.); Pedantic edit, it's probably 2a010000 little-endian but whatever \$\endgroup\$
    – Oskar Skog
    Jun 11 at 20:27
3
\$\begingroup\$

CPL, 80 bytes, safe

N(s)=value of§if(s=100)then Join(100,NIL)result is Join(s, N(s+1))§Main()=N(1)

One caveat: The only interpreter for this language I could find has an issue: it only allows programs to be used as libraries providing a set of functions, not as a full program. To make a full program that gives output possible, once you've transpiled this to a Python program, add print(Main()) to the end of the intermediate Python program before running it.

If this makes this answer ineligible, that's fine, I'll mark it as non-competing, but I think it's a fun challenge nonetheless.


The wikipedia page links to this translator into Python: http://norvig.com/sciam/cpl.g

If you dig around on Peter Norvig's site, you can find his full description of the language: http://norvig.com/sciam/sciam.html

\$\endgroup\$
1
  • \$\begingroup\$ This post is safe now. \$\endgroup\$
    – DELETE_ME
    Mar 1 '18 at 4:15
3
\$\begingroup\$

Cascade, 59 bytes, cracked by exedraj

v>@/<
1%_\|
/]8\<
d+^}|
_/{-/
^*d|1
9#h\/
k-Q.|
e3d+/
4!5|5

Have fun! Output is newline separated integers.

Try it online!

Explanation

After deobfuscating, the code becomes:

  @/ 
  _  
 ] \ 
d ^ |
 / -/
^ d|1
 # \/
 - .|
e d+/
  5|5

And here's a sort-of explanation:

enter image description here

It's complicated, but I'm quite proud of myself for making this.

\$\endgroup\$
2
  • \$\begingroup\$ this is cascade \$\endgroup\$
    – lyxal
    Aug 14 at 8:02
  • \$\begingroup\$ @exedraj How did you get it? \$\endgroup\$
    – emanresu A
    Aug 14 at 8:48
3
\$\begingroup\$

Self-modifying Brainfuck, 250 bytes, Cracked by pxeger

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

Explanations

SMBF

The actaul code executed is

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

Try it online!

The bit up until the , is a red herring, parts of code for other languages. The , takes input, setting a null byte, and somehow [>++<-----]> results in 100. Then, [->+.<] prints the characters up to that in ascending order.

Python 3

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

The actual code executed is:

5<4
I=((print))
n=""
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))

A lot of this is for polyglotting with Vyxal, which has the same comments so executes the same code.

The i command in Vyxal is indexing, which errors if the first argument isn't a number. We deal with this by aliasing print and putting it in double parentheses, so Vyxal never executes it.

The n="" is so printing it doesn't error.

The (1/2 and 1 or 0) is just a red herring to make you think it's python 2 or something.

So in the end, we're just printing every number between 1 and 100. But it's as numbers, and there's a space before each one.

Vyxal

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it Online!

The executed code is the same as Python's:

5<4
I=((print))
n=""
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))

As stated before, i indexes, and often errors. Sk4 takes care of the i in in. range ends up pushing a 1, so (100) pushes 100 once. : I does nothing, so (n, prints the iteration number of looping over that 100 times, printing 0...99 inclusive.

><>

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

The executed code is:

5<                                   \"i"
                                      *>:"d"$-o:1-?v;
                                    :  ^         -1<
                                    a
                                    \\

The "i" is for Deadfish~. Basically, the bit up until the * on the second line pushes 100 to the stack by multiplying a (10) by itself. The bit after that on lines 2 & 3 is a simple looping counter, outputting each character. But this prints 0x00 to c, not 0x01 to d, so it's completely invalid.

Deadfish~

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

Deadfish~ almost works, but the o and d in the ><> program completely (intentionally) throw it off.

The actual executed code is:

{{di(i)dci}doi}h

The iiiiidiisiodso at the end is a red herring, and isn't even executed.

This almost prints 1 to 100, but doesn't quite work.

Befunge-93 (And several variants)

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

The executed code is:

5<                         v:-1  <"d"\"i"

                           >,   :|

                                 @

We start by pushing 100 on the stack with "d", then decrement and print until it reaches 0, at which point the redirect | sends the IP to the @, which terminates the program. This prints c to 0x00, which is wrong.

\ is a mirror for ><>, but rotates the stack in Befunge-93, which does nothing important.

brainfuck

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

The executed code is the same as SMBF's:

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

However, because the tape's full of 0s instead of the program's codepoints, it does the wrong thing and prints 0x00 to 0xff.

Cascade

5<4# ++++++++v++{++{+<     v:-1  <"d"\"i"
I=((print))#d+"100"ci}$'mai n'  \ " > *>:"d"$-o:1-?v;
n=""#printf  >-}++++=^;-#  >,   :|1h:  ^         -1<
for Sk4 in range(100): I(n,Sk4+(1/2 and 1 or 0))
##-[>++<-----]>[->+.<][>^<++++>]1@3 \\iiiiidiisiodso

Try it online!

I'm not sure this counts. I intended to do this with an actual loop, but I couldn't figure out how to make it small enough, so I just went with printing 0x01 to 0x03.

Executed code (Unwrapped):

 @
 <
\ "
 |1
 /2
  3
  "

Red herrings

The (1/2 and 1 or 0) resembles something used to determine Python 2 from Python 3. Of course, this won't work in Python 2, because print is a statement.

The $'mai n' is intended to look like Rail. This doesn't work because of the space, and if it did, it wouldn't do anything.

The printf is just an excuse for an extra i for Deadfish~.

The iiiiidiisiodso was a double red herring, because originally I wanted the actual lang to be Deadfish~. But I decided that was too obvious. I later added the brainfuck as a red herring, then realised it almost worked in SMBF, and tweaked it a little

The [>^<++++>] is just a mess to fill space, but looks like it could do something in some bizzare BF-derivative.

The area with all the +-{}= near the first 100 was meant to resemble my new language Tarfish, which I thought people might think I'd use.

This took several hours to make, and I'm proud of it.

\$\endgroup\$
5
  • \$\begingroup\$ Befunge-93. This took just a few minutes to crack because of my mighty language bruteforce tool \$\endgroup\$
    – wasif
    Sep 5 at 14:16
  • \$\begingroup\$ Here is the tool! \$\endgroup\$
    – wasif
    Sep 5 at 14:17
  • 5
    \$\begingroup\$ @wasif One, it's not Befunge-93 - the letters need to be ascending, and there needs to be a d and no 0x00. Two, please don't bruteforce, it's against the spirit of the challenge, and Dennis has specifically asked not to do it. \$\endgroup\$
    – emanresu A
    Sep 5 at 19:54
  • \$\begingroup\$ Cracked! \$\endgroup\$
    – pxeger
    Sep 8 at 8:44
  • \$\begingroup\$ EOF is SMBF is -1 (actually 255), though +-[>++<-----] then results in 102, not 100 \$\endgroup\$
    – Jo King
    Sep 8 at 9:02
2
\$\begingroup\$

Deadfish~, 7 bytes, cracked by Uriel

{{iow}}

The output should be this:

1Hello, World!2Hello, World!3Hello, World!4Hello, World!5Hello, World!6Hello, World!7Hello, World!8Hello, World!9Hello, World!10Hello, World!11Hello, World!12Hello, World!13Hello, World!14Hello, World!15Hello, World!16Hello, World!17Hello, World!18Hello, World!19Hello, World!20Hello, World!21Hello, World!22Hello, World!23Hello, World!24Hello, World!25Hello, World!26Hello, World!27Hello, World!28Hello, World!29Hello, World!30Hello, World!31Hello, World!32Hello, World!33Hello, World!34Hello, World!35Hello, World!36Hello, World!37Hello, World!38Hello, World!39Hello, World!40Hello, World!41Hello, World!42Hello, World!43Hello, World!44Hello, World!45Hello, World!46Hello, World!47Hello, World!48Hello, World!49Hello, World!50Hello, World!51Hello, World!52Hello, World!53Hello, World!54Hello, World!55Hello, World!56Hello, World!57Hello, World!58Hello, World!59Hello, World!60Hello, World!61Hello, World!62Hello, World!63Hello, World!64Hello, World!65Hello, World!66Hello, World!67Hello, World!68Hello, World!69Hello, World!70Hello, World!71Hello, World!72Hello, World!73Hello, World!74Hello, World!75Hello, World!76Hello, World!77Hello, World!78Hello, World!79Hello, World!80Hello, World!81Hello, World!82Hello, World!83Hello, World!84Hello, World!85Hello, World!86Hello, World!87Hello, World!88Hello, World!89Hello, World!90Hello, World!91Hello, World!92Hello, World!93Hello, World!94Hello, World!95Hello, World!96Hello, World!97Hello, World!98Hello, World!99Hello, World!100Hello, World!

The OP explicitly allowed this in chat. Pretty trivial, but I wanted to see how the community reacts to such solutions.

\$\endgroup\$
1
  • \$\begingroup\$ Cracked. \$\endgroup\$
    – Uriel
    Feb 6 '18 at 21:18
2
\$\begingroup\$

Befunge-93, 97 bytes, cracked by DLosc

Starting off with an easy one.

shovv fRom-0to*1E#' <iostream
?>e[10]++;B:12\;g\=`||(
@. >!1:then.do+^\x61@
:^A&>#+:$#<math>eaa$q
\$\endgroup\$
1
2
\$\begingroup\$

Locksmith, 492 bytes, cracked by totallyhuman

Perhaps it wasn't too smart to use a language of my own.

I wanted to see if I could secure a victory through obfuscation...

import java.util.Random;
interface Main{
  public	static void  main(String[]args){
for(int	i  	=0; i  <		90*  11; i ++)
System. out.println(i);
f(   	 	7);
g();
}
public static 	int f(int n){System.out.println(n);if(n<=0)return+n&3;
else return f(	n/7)*6	+7*f(n-5)+7;
}
public static void g(){
Random k=new Random(45);
String j="YmlULmxZXERFZmNvbg==";
int m;
for(int i=m=0;i<121;i++){
m+=j.charAt(0)+j.	charAt(i&1)+k.nextInt();
}
System.out.println(k.nextInt((int)Math.pow(7201,19))^6^m);
}
}

Try it online!

Equivalent to:

09011
70
3767
57
4501210
1
7201196
\$\endgroup\$
2
  • \$\begingroup\$ Cracked. \$\endgroup\$ Feb 7 '18 at 0:45
  • 5
    \$\begingroup\$ I did try Whitespace and other Java versions though. :P Eventually realized you make a ton of esolangs and I've been eyeing Locksmith for a while now... \$\endgroup\$ Feb 7 '18 at 0:55
2
\$\begingroup\$

Fantom, 55 bytes, cracked by totallyhuman

unfortunatelly don't have much time to obfuscate this

class A{static Void main(){(1..100).each|x|{echo(x)}}}
\$\endgroup\$
1
2
\$\begingroup\$

PARI/GP, 23 bytes, cracked by DevelopingDeveloper

#for (o=1,100,print(o))

Thought maybe since it was such an uncommon language nobody would know about it :(

\$\endgroup\$
1

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.