Output "Lorem ipsum" with minimal number of characters I remember people saying that code size should be measured in bytes, and not in characters, because it's possible to store information with weird Unicode characters, which have no visual meaning.

How bad can it be?

In this challenge, you should output the following Lorem Ipsum text, taken from Wikipedia:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.


Please specify the number of characters (not bytes) in your code. Code with the minimal number of characters wins.

Your code should only contain valid Unicode characters, as described here, that is:


Code points up to U+10FFFF
No surrogates (the range D800–DBFF is forbidden)
No characters FFFE and FFFF
No null characters (code 0)


If your code cannot be displayed, provide a version with offending characters redacted, and a hexdump.

Some notes:


The output must be one long line (445 characters). If your system cannot do that (e.g. you're printing it on paper), output a closest approximation. Trailing linebreaks don't matter.
Built-in functions that generate Lorem Ipsum text are not allowed
Please specify a valid text encoding for your code, if relevant
JavaScript (ES7), 326 283 273 249 243 242 chars

_=&gt;""[r='replace'](/./gu,c=&gt;(c.codePointAt()-4**8).toString(32))[r](/\d/g,d=&gt;"  , exum. ".substr(d,2))[r](/^.|\. ./g,x=&gt;x.toUpperCase())


How it works

The first step in my compression technique is to convert the whole string to lowercase (not mandatory, but looks better), and replace each pair of chars in , exum.  (as well as the trailing space by itself) with its index in the string plus 2. This makes the text a valid base-32 number:

lorem9ips69dolor9sit9amet2consectetur9adipiscing3lit2sed9do3iusmod9tempor9incididunt9ut9labore3t9dolore9magna9aliqua8ut3nim9ad9minim9veniam2quis9nostrud94ercitation9ullamco9laboris9nisi9ut9aliquip943a9commodo9consequat8duis9aute9irure9dolor9in9reprehenderit9in9voluptate9velit3sse9cill69dolore3u9fugiat9nulla9pariatur84cepteur9sint9occaecat9cupidatat9non9proident2sunt9in9culpa9qui9officia9deserunt9mollit9anim9id3st9laboru7


The next step is to convert each 4-char run to decimal, then get the character at that code point. This can be done with the following function:

f=s=&gt;s.replace(/..../g,x=&gt;(n=parseInt(x,32),String.fromCharCode(0xD800+(n&gt;&gt;10),0xDC00+(n&amp;0x03FF))))


(Note: Since all digits are 2 or greater, the minimum possible value of four digits is 2222₃₂. This is equal to 95978₁₀, or 176EA₁₆; therefore, code points will never be in the restricted range.)

And now we have our compressed string:




That's 445 chars compressed into 106 chars. The decompression simply reverses this process:


Convert each char to its code-point in base-32, minus 65536.
Replace each digit n with "  , exum. ".substr(n,2).
Convert each letter after a period or at the beginning of the string to uppercase.


The only ES7 feature used is **. Replace 4**8 with 65536 to run in a browser that doesn't yet support ES7.