Significant Whitespace: Cops For the purpose of this challenge, we'll define whitespace as only linefeeds (0x0A) and spaces (0x20). Note that most languages and regex flavours consider many other characters as whitespace as well, both inside and outside the ASCII range so you might not be able to make use of the corresponding built-ins.

The Cops' Challenge

You should write a program or function in a language of your choice, which takes a string, consisting of ASCII (except NUL) characters, as input and outputs it with all whitespace removed. For example if you received the following input:

H e l l o,
 W o r l  d!


You should output

Hello,World!


Your submission will then be your source code with all whitespace removed (the same process as passing your solution as input to itself, although your solution may also contain characters outside the ASCII range). Your goal is to make it as hard as possible to figure out where whitespace needs to be inserted to recover a valid solution in your language of choice. Note that robbers may insert fewer whitespace than you removed, but not more. Also remember that robbers don't have to match your exact code, they just have to find any valid solution.

Your answer should contain the following:


The language (and version if necessary) in which you wrote your solution.
The byte count of your solution before removing whitespace.
Your solution with whitespace removed.


Your solution may be either a program or function, but not a snippet and you must not assume a REPL environment. You may take input via STDIN, command-line argument or function argument and output via STDOUT, function return value or function (out) parameter.

In the interest of fairness, there must be a freely available interpreter or compiler for your chosen language.

You must not use built-ins for hashing, encryption or random number generation (even if you seed the random number generator to a fixed value). Your solution must be able to process any string of 100 characters or less in under 10 seconds on a reasonable desktop machine.

If your answer has not been cracked within 7 days (168 hours), you may reveal your own solution at which point your answer is considered safe. As long as you don't reveal your solution, it may still be cracked by robbers, even if the 7 days have already passed. The shortest safe answer wins (measured before removing whitespace).

If your answer does get cracked, please indicate this in the header of your answer, along with a link to the corresponding robber's answer.

Go here for the robbers' part.

Uncracked Submissions



&lt;script&gt;site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 103182;&lt;/script&gt;&lt;script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'&gt;&lt;/script&gt;&lt;script&gt;jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&amp;sort=creation&amp;site='+site+'&amp;filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&amp;sort=creation&amp;site='+site+'&amp;filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('&lt;textarea&gt;').html(s).text()};function r(l){return new RegExp('&lt;pre class="snippet-code-'+l+'\\b[^&gt;]*&gt;&lt;code&gt;([\\s\\S]*?)&lt;/code&gt;&lt;/pre&gt;')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('&lt;style&gt;').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('&lt;script&gt;').text(d(j[1])))})})&lt;/script&gt;
Haskell, 100 bytes, cracked by nimi

main=interact$iddoidlinesidwordsdoidoidoid=doiddoid&lt;-dooiidoid&lt;-dooiddoiddodoid

This is a full program and a dadaistic poem.

Code with withspace (Try it online!)
main=interact$id doid lines id words
doid oi d o id=do
 iddoid&lt;-do oi id
 oid&lt;-do o iddoid
 do d oid

Still looking quite poetic, if you ask me.
De-obfuscated
main = interact f
f s = do
 l &lt;- lines s
 w &lt;- words l
 id w

Explanation
The do-notation is only syntactic sugar, so f can equivalently be written as
f s = lines s &gt;&gt;= words &gt;&gt;= id

For lists the &gt;&gt;=-operator is defined as concatMap, so f becomes
f = concat . map id . concat . map words . lines

So given an input &quot;a b\nc&quot;, lines splits the input at newlines [&quot;a b&quot;,&quot;c&quot;], words splits each line at white space yielding [[&quot;a&quot;,&quot;b&quot;],[&quot;c&quot;]] (as I realised only now this includes newlines, so lines actually isn't needed). Concatenating once gives [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;], id is the identity function and as such has no effect and the final concatenation yields the string &quot;abc&quot;.