Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Your task is to print the following:

 _     _                            _______                           _ 
| |   | |                          (_______)          _              | |
| |__ | | ____ ____  ____  _   _    _____   ____  ___| |_  ____  ____| |
|  __)| |/ _  |  _ \|  _ \| | | |  |  ___) / _  |/___)  _)/ _  )/ ___)_|
| |   | ( ( | | | | | | | | |_| |  | |____( ( | |___ | |_( (/ /| |    _ 
|_|   |_|\_||_| ||_/| ||_/ \__  |  |_______)_||_(___/ \___)____)_|   |_|
              |_|   |_|   (____/

Remember, this is , so the code with the smallest amount of bytes wins. Good luck.

share|improve this question
2  
@FryAmTheEggman this is quite different from the supposed duplicate Rickroll. Only a few symbols are used: |()/\_ which leads to completely different forms of compression. We have had similar ASCII art challenges before, but I'd like to see this question run to see if anyone takes advantage of the geometry. On the other hand it's not hugely remarkable, and you'r right, we don't need an Easter tag. – Level River St Mar 27 at 1:06
1  
@FryAmTheEggman The best solution to a kolmogorov-complexity depends heavily on the structure of the output. This isn't text, so it isn't a dupe. – lirtosiast Mar 27 at 1:08
7  
@lirtosiast The limited character set might matter, but I feel like this will almost certainly be dominated by the same techniques as in the text based questions. That's just my opinion though, the community gets to decide which of our views to enforce, after all. – FryAmTheEggman Mar 27 at 1:25
4  
Possible duplicate of Minecraft Mirrored – muddyfish Mar 28 at 9:13
1  
This is different, as there is no input, and so it is not necessary to take input and analyze it. – thepiercingarrow Mar 29 at 15:59

23 Answers 23

up vote 9 down vote accepted

Bubblegum, 130 bytes

0000000: 758f b579 0530 18c4 7a4f a1d2 7fe5 8102  u..y.0..zO......
0000010: 5ae4 760f 5de8 91ee b3cc 8400 f523 2c3c  Z.v.]........#,<
0000020: 4656 0850 3f60 5b86 5fe4 8290 15a2 84a0  FV.P?`[._.......
0000030: 5a61 4d0b b64f 2b35 c476 eb1e 844e c841  ZaM..O+5.v...N.A
0000040: 08c8 731d 1a02 ead0 1547 1d70 beba 9fd6  ..s......G.p....
0000050: 31bf 5fdb 6c72 1d7b 1051 ed8a a884 7c76  1._.lr.{.Q....|v
0000060: 0fa7 db91 1503 c43c 9b18 124f cdb3 4220  .......<...O..B 
0000070: 9631 716b a71c 3bd6 ed8b 0b62 7ebd 55cf  .1qk..;....b~.U.
0000080: 7a07                                     z.

Try it online.

Compressed using zopfli --deflate --i10000.

share|improve this answer
    
Isn't this 588 bytes? – thepiercingarrow Mar 27 at 9:39
10  
@MarkWright What quartata posted is a hexdump of the actual code – Sp3000 Mar 27 at 11:08
    
Ah, okay thanks. – thepiercingarrow Mar 27 at 14:51

JavaScript (ES6), 377 373 360 359 345 bytes

Thanks to @Neil for a one byte savings, and to @edc65 for another 14!

Figured I'd give it a shot. Compresses common repeating patterns in the text.

_____ (5 underscores) is stored as _5

      (5 spaces) is stored as  5

 | | | | | (5 of the  | pattern) is stored as ~5


console.log(` _ 5_ 28_7 27_
|~ 2~2 26(_7) 10_ 13~2
|~_2~2 _4 _4 2_4 2_ 3_ 4_5 3_4 2_3|~_ 2_4 2_4|~
| 2_2)|~/ _ ~ 2_ \\| 2_ \\|~3 ~ 2_3) / _ ~/_3) 2_)/ _ 2)/ _3)_|
|~ 2~ ( (~9_|~ ~2_4( (~2_3~2_( (/ /|~ 4_
|_| 2~_|\\_|2_|~|_/|~|_/ \\_2 ~ ~_7)_|2_(_3/ \\_3)_4)_| 2~_|
 13~_| 2~_| 3(_4/`.replace(/(.)(\d+)/g,(_,a,b)=>a.repeat(b)).replace(/~/g,' |'))
share|improve this answer
    
Note the ES6 =>. – CalculatorFeline Mar 27 at 3:43
    
Seems like bytes might be saved by RLEing _s. – CalculatorFeline Mar 27 at 4:14
    
@CatsAreFluffy What do you mean by that? It compresses runs of _ with an _ followed by how many there are in the run – jrich Mar 27 at 4:15
    
Oops, I was still on the 377 byte version. – CalculatorFeline Mar 27 at 5:07
    
~1 or _2 hardly seems worth it. (Why not use |2 for instance?) – Neil Mar 27 at 20:12

BinaryFuck, 565 378 bytes

This basically stores the characters used in the array, then navigates through the array, printing them accordingly. Currently quite long, will shorten it up.

1000010000000000000000110011110001010010000011011111010010110001011011000000010010111011001111011110010010010000010000010000000000000010000010000000000010000010000000000011011011011011011011011011001111010010000000000110001010000000000000000010000000000011011111010010001010001001001001010010001010000000000000000000000000000010001001001001010000000000000000000000000000000011011011011100010100011100100100100100010100011100100100100100100100100100100100100100100100100100100100100100100100100100100100100010100100100100100100100011100100100100100100100100100100100100100100100100100100100100100100100100100100100010100011100010010010010100011011011011011100010100011100010100100100011100010100011100010100100100100100100100100100100100100100100100100100100100100100100100100100100011011100010010010100100100100100100100010100011011100100100100100100100100100100010100011100100100100100100100100100100100100100100011100010100011100010010010010010100011011011011011100010100011100010010100100011100011100010100011100010100010100100100100011100010100100100100011100100010100100100100011100100010100011100100100010100011100100100100010100100100100100011100100100010100100100100011100100010100100100011011100010100011100010010100011100100010100100100100011100100010100100100100011011100010100011100010010010010010100011011011011011100010100100010100100010100011011011100010100011100011011100010010010100010100011100100011100010100100010100011100010010010100011011011011100010100100010100011100010010010100011011011011100010100011100010100011100010100011100010100100011100010100100010100100100010100011011100011011011100010010010100010100011100100011100011011100010010010010100100100010100011011100100010100010100011011011011011100010010010100010100011100100010010100011011011011011100010010010100010100100100010100011100011011100010010010010010100011011011011011100010100011100010100100100011100010100011011100010010100011011100010010100011100010100011100010100011100010100011100010100011100010100011100010100011100010100011100010100011100010010100011011100010100011100010100100011100010100011100010010100100100100011011011100010010100011011100010010100011100010100011100010010100100100011100011100010100011100010010100011011011100010010100011011100011100010010010100011011011100010010100010100011100010100100100100010100011100010010010010100011011011011011100010010100011011100010100100100011100010010100011011100010010010010100011011100011011100100010010100011011100010100011100100010010100011011011011100010010100010100011100100010010100011011011011100010010010100010010010100011011100100011100100011100010100100011100010010100100100100100100100010100011100011011100100010010100011011011100010010010100100100011011011011100010010010100010010010100011011100100100010100011100100100100010100011100011011100010100100100011100010010100011011100010010010010010100011011011011100100100100100100100100100100100100100100011100010010100011011100010100100100011100010010100011011100010100100100011011100010010010100100100100011011011011100

Here is the ungolfed code:

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

EDIT: by rearranging the order of the characters in the cells, I saved 186 bytes!

share|improve this answer
8  
That's not how a byte count works. If you can't pass the exact sequence of bytes to the interpreter, you can't claim that number of bytes as your byte count. – Doorknob Mar 27 at 15:13
1  
If there is a BF-interpreter which takes in 3-bits/char. Please add a link to the interpreter and a hexdump/pastebin of the encoded code, if you wish to claim 565 bytes. – Downgoat Mar 27 at 15:23
2  
Yes, there is a 3-bit brainfuck interpreter. Add a link to this in your answer along with a hexdump/binary representation of your code. The language wouldn't be brainfuck anymore so you'd have to specify "CompressedFuck" in the header. I recommend keeping it as-is as when seeing brainfuck people don't expect it to be very short. – Downgoat Mar 27 at 15:28
1  
This doesn't look like a valid BinaryFuck program; it doesn't start with a 1. Please provide a link to an interpreter and the hexdump of the source code so your results can be reproduced. – Dennis Mar 27 at 16:12
2  
If you're going to claim 3 bits per instruction as per Binaryfuck, you need to post the Binaryfuck source code (probably in a hex dump or base64-encoded) and calculate bytes based off of that. As it stands, this submission is a brainfuck submission with 1012 bytes, of which 3 are extraneous (the newlines). – Mego May 29 at 8:14

JavaScript (ES6), 380 bytes

For completeness this is my effort to use a different compression method, although as it turns out it's not as efficient as run length encoding. Each digit specifies that the last N already generated characters are repeated. Subsequent digits can repeat already repeated characters, e.g. | 23 turns into | | |. I only wish I could compress a run of three characters.

f=(s=` _  26  2479__23   2499_ 
| 2  6  2379(__23)   25_  237|2
| |__ |2 __25  __2  _ 4   ___2   __2  ___| |_  ___6_| |
|  __)| |/ _  |  _ \\6| 24 |  ___) / _  |/___)  _)/ _  )/ ___)_|
| 2  | (2 |248 |_| 23|__2( 2| |___ |2_( (/ /| 2   _ 
|_|   |_|\\_||_| ||_/6 \\__  |3__23)_||_(___/ \\___)_5|   |_|
  237|_|6   (__2/`,r=s.replace(/(.*?)(\d)/,(_,p,n)=>p+p.slice(-n)))=>r==s?r:f(r)

o.textContent = f()
<pre id=o></pre>

share|improve this answer

JavaScript, 297 bytes

console.log(` 29 288999002889 3 
19 18899 500_)82891
1__ 1 0_ 02022 290_2 02012020_1
|3_)162|3 \\|3 \\1 19|90) 62|/0)3)62)60)_|
19 |55 1 1 1 1 71910_(5 10 1_(56/193 
7|4\\_|717/176\\_2|9|00_)_|7(06\\0)0_)_|4
8 44950_/`.replace(/\d/g,n=>`___,| |,_  ,  _,   |_|, (,/ ,|_,          ,  `.split`,`[n]))

Simple encoding of the ten most (as far as I can tell) common substrings. They are not in order because of overlaps; my encoder (below) needs to see e.g. '_ ' and ' _' before ' '.

(s,a,t=s)=>a.map((t,i)=>s=s.split(t).join(i))&&[s,(b=>{b=new Map;for(i=0;i<s.length;i++)for(j=0;j<i;j++)b.set(s.slice(j,i),s.length-s.split(s.slice(j,i)).join().length-i+j-1);return[for(x of b)if(x[1]>0&&!/\d/.test(x[0]))x].sort(([a,b],[c,d])=>b-d)})(),t.length-(s+' '+a).length]

This takes a string and an array of substrings to encode and returns a) the encoded string b) the list of potential next savings c) the number of bytes saved so far.

share|improve this answer

𝔼𝕊𝕄𝕚𝕟, 72 chars / 209 bytes

`Эć훼쎧漤詼媰਀㻆僚픈耊Ⓢኍ⋱쬝ᇑ덆䖇䂊՛樥첾㨭쯠ཁ톇:덱螟醮䖉⥊覂削ꇉ漈涹႘챘ඕ꼳⁒᭷Ừ䒕鶀놜㆝〢ﱱꎀ쎴䋈㗂䅉Ⴄቀ쳵菨ⶩ∉툲耀

Try it here (Firefox only).

Well, at least the char count is great, but we can't use the custom code page. It's just an LZString-decompression. I'm also working on another solution - more on that later.

share|improve this answer

C, 517 427 bytes

m;g(c,i){while(i--)c?m=putchar(c):printf(" |");}p(char*s){while(*s)isdigit(*s)?g(m,*s-48):isalpha(*s)?g(0,*s-65):g(*s,1),s++;}main(){p(" _ 4_ 999_6 998_ 1\n|B 2|B 997(_6) 9_ 94|B \n| |_1C _3 _3 1_3 1_ 2_ 3_4 2_3 1_2|B_ 1_3 1_3|B \n| 1_1)|B/ _ 1\\| 1_ \\| 1_E 1| 1_2) / _ 1|/_2) 1_)/ _ 1)/ _2)_| \n|B 2| ( (J_|B 1|B_3( (C_2C_( (/ /|B 3_ 1\n|_| 2|_|\\_||_|B1_/|B1_/ \\_1 1| 1|_6)_|1_(_2/ \\_2)_3)_| 2|_| \n 94|_| 2|_| 2(_3/\n");}

Ungolfed

#include <stdio.h>
#include <stdint.h>

char m = 0;

void g(char c, int i)
{
    while(i--) c ? m=putchar(c) : printf(" |");
}

void p(char* s)
{
    while(*s)
        isdigit(*s) // golfed if-else-if
        ? g(m,*s-48)
        : isalpha(*s)
          ? g(0,*s-65)
          : g(*s,1)
        ,
        s++;
}

int main()
{
    p(" _ 4_ 999_6 998_ 1\n|B 2|B 997(_6) 9_ 94|B \n| |_1C _3 _3 1_3 1_ 2_ 3_4 2_3 1_2|B_ 1_3 1_3|B \n| 1_1)|B/ _ 1\\| 1_ \\| 1_E 1| 1_2) / _ 1|/_2) 1_)/ _ 1)/ _2)_| \n|B 2| ( (J_|B 1|B_3( (C_2C_( (/ /|B 3_ 1\n|_| 2|_|\\_||_|B1_/|B1_/ \\_1 1| 1|_6)_|1_(_2/ \\_2)_3)_| 2|_| \n 94|_| 2|_| 2(_3/\n");
    return 0;
}
share|improve this answer

Perl 5, 286 bytes

perl -M5.01 happy.pl, where happy.pl is:

$_='u5u28 7_27u
~~x~~25 (7_)10u7x~~
~p_ ~~4_ 4_x4_x_3u4 5_3 4_x3_~px4_x4_~~
~u_)~|/ux~u \~u \4~ ~ 3_) /ux|/3_)x_)/ux)/ 3_)_|
~~x~( ( 8~p~~ ~|4-( ( ~p__ ~p( (/ /~~3u
p~xp|\_|p~|p/~|p/ \__x~ p6_)_|p(3_/ \3_)4_)_~xp|
14 p~xp~x(4_/';s/u/ _/g;s/\d+(.)/$1x$&/ge;s/x/  /g;s/~/| /g;s/p/|_/g;say

Thanks to Dom Hastings (in a comment hereon) for an idea that saved me two bytes and led to another idea of mine that saved four more.

share|improve this answer
    
Surely you should use L as the shorthand for |_ ;-) – Neil Mar 28 at 17:03

Python 2, 159 bytes

This source contains non-printable characters, so it is presented as a hexdump that can be decoded with xxd -r.

00000000: efbb bf70 7269 6e74 2278 017d 8fb5 7540  ...print"x.}..u@
00000010: 3114 c5fa 3f85 4abb f240 012d a2dd 432f  1...?.J..@.-..C/
00000020: 4cba c732 1302 20ff e0c0 dfc8 1501 e33f  L..2.. ........?
00000030: 580e 9b77 e40b d115 2911 aa23 1c33 05a7  X..w....)..#.3..
00000040: cf54 6ae4 74c7 7310 baa3 8310 c86d 8c27  .Tj.t.s......m.'
00000050: 04ea 6656 9c79 9bfb a5fb 6cdd f6fe b5c5  ..fV.y....l.....
00000060: a2ef 3182 4875 56a4 123d 770f 2702 902b  ..1.HuV..=w.'..+
00000070: 03b2 5bcb 28cf 985b 8520 876d b974 a6dc  ..[.(..[. .m.t..
00000080: be28 20bb f842 f6ee a57a 1e01 c1a2 733e  .( ..B...z....s>
00000090: 222e 6465 636f 6465 2827 7a69 7027 29    ".decode('zip')
share|improve this answer

Racket, 367 364 bytes

(require file/gunzip net/base64)((λ(o)(gunzip-through-ports(open-input-bytes(base64-decode #"H4sIAOhN/lYAA31QwQ3EMAj7dwqezYuFInkRhj+MoWor9UBCmGBDMBhN8cMg+9dhR1hkovhhZwutO/FhSadQzqJQDdXkjsOYfa5Hkm4QEsp0ZeYkEdmeKK8i91GHazesgoyJEdfXzvR4O1ooOLY7oA8QunnfhDdCCSE2oogBV7QN7RhzI3bwYPWUUDXRj9fVpj439h/OlCKU1gEAAA=="))o)(displayln(get-output-string o)))(open-output-bytes))

Ungolfed

(require file/gunzip net/base64)
((λ (o)
   (gunzip-through-ports
    (open-input-bytes
     (base64-decode
      #"H4sIAOhN/lYAA31QwQ3EMAj7dwqezYuFInkRhj+MoWor9UBCmGBDMBhN8cMg+9dhR1hkovhhZwutO/FhSadQzqJQDdXkjsOYfa5Hkm4QEsp0ZeYkEdmeKK8i91GHazesgoyJEdfXzvR4O1ooOLY7oA8QunnfhDdCCSE2oogBV7QN7RhzI3bwYPWUUDXRj9fVpj439h/OlCKU1gEAAA=="))
    o)
   (displayln (get-output-string o)))
 (open-output-bytes))

Based off a similar challenge I answered.

share|improve this answer

///, 282 279 bytes

Improvement: I noticed that there are too many // in the replacement commands, so I decided to compress them also (to m), which saved me 3 bytes.

/m/\/\///l/ _mk/|amj/b_mi/\\\m/h/|cmg/ddmf/ccme/bbmd/aamc/ |mb/__ma/  /ldlgggdejgggal 
hafggga(ej)ga_gdah
hbf e eaea_alde_a eajh_aeaeh
kb)hilak_ \\k_ \\|fcakj) ila|ij)a_)ila)i j)_|
hac ( (ffffc_hahe( (fjf_( (i ihd_ 
|_kc_|\\_||_h|_ih|_i \\bak|ej)_||_(ji \\j)e)_kc_|
gda|_kc_k (ei

Repeatly compress the most frequent substring.

Thirteenth generation, 282 bytes

/l/ _//k/|a//j/b_//i/\\\///h/|c//g/dd//f/cc//e/bb//d/aa//c/ |//b/__//a/  /ldlgggdejgggal 
hafggga(ej)ga_gdah
hbf e eaea_alde_a eajh_aeaeh
kb)hilak_ \\k_ \\|fcakj) ila|ij)a_)ila)i j)_|
hac ( (ffffc_hahe( (fjf_( (i ihd_ 
|_kc_|\\_||_h|_ih|_i \\bak|ej)_||_(ji \\j)e)_kc_|
gda|_kc_k (ei

Try it online!

First generation, 486 bytes

No compression. Escaped the / and the \.

 _     _                            _______                           _ 
| |   | |                          (_______)          _              | |
| |__ | | ____ ____  ____  _   _    _____   ____  ___| |_  ____  ____| |
|  __)| |\/ _  |  _ \\|  _ \\| | | |  |  ___) \/ _  |\/___)  _)\/ _  )\/ ___)_|
| |   | ( ( | | | | | | | | |_| |  | |____( ( | |___ | |_( (\/ \/| |    _ 
|_|   |_|\\_||_| ||_\/| ||_\/ \\__  |  |_______)_||_(___\/ \\___)____)_|   |_|
              |_|   |_|   (____\/

Try it online!

Second generation, 402 bytes

Compressed two spaces to a. The /a/ / means "replace all occurrences of a to two spaces".

/a/  / _aa _aaaaaaaaaaaaaa_______aaaaaaaaaaaaa _ 
| |a | |aaaaaaaaaaaaa(_______)aaaaa_aaaaaaa| |
| |__ | | ____ ____a____a_a _aa_____a ____a___| |_a____a____| |
|a__)| |\/ _a|a_ \\|a_ \\| | | |a|a___) \/ _a|\/___)a_)\/ _a)\/ ___)_|
| |a | ( ( | | | | | | | | |_| |a| |____( ( | |___ | |_( (\/ \/| |aa_ 
|_|a |_|\\_||_| ||_\/| ||_\/ \\__a|a|_______)_||_(___\/ \\___)____)_|a |_|
aaaaaaa|_|a |_|a (____\/

Try it online!

Third generation, 369 bytes

Compressed __ to b. The /b/__/ at the beginning means "replace all occurrences of b to __".

/b/__//a/  / _aa _aaaaaaaaaaaaaabbb_aaaaaaaaaaaaa _ 
| |a | |aaaaaaaaaaaaa(bbb_)aaaaa_aaaaaaa| |
| |b | | bb bbabba_a _aabb_a bbab_| |_abbabb| |
|ab)| |\/ _a|a_ \\|a_ \\| | | |a|ab_) \/ _a|\/b_)a_)\/ _a)\/ b_)_|
| |a | ( ( | | | | | | | | |_| |a| |bb( ( | |b_ | |_( (\/ \/| |aa_ 
|_|a |_|\\_||_| ||_\/| ||_\/ \\ba|a|bbb_)_||_(b_\/ \\b_)bb)_|a |_|
aaaaaaa|_|a |_|a (bb\/

Try it online!

Fourth generation, 339 bytes

Compressed | to c. The /c/ |/ at the beginning means "replace all occurrences of c to |".

/c/ |//b/__//a/  / _aa _aaaaaaaaaaaaaabbb_aaaaaaaaaaaaa _ 
|caccaaaaaaaaaaaaa(bbb_)aaaaa_aaaaaaa|c
|cbcc bb bbabba_a _aabb_a bbab_|c_abbabb|c
|ab)|c\/ _a|a_ \\|a_ \\|ccca|ab_) \/ _a|\/b_)a_)\/ _a)\/ b_)_|
|cac ( (ccccccccc_|ca|cbb( (ccb_cc_( (\/ \/|caa_ 
|_|ac_|\\_||_|c|_\/|c|_\/ \\ba|a|bbb_)_||_(b_\/ \\b_)bb)_|ac_|
aaaaaaa|_|ac_|a (bb\/

Try it online!

The rest of the compression rules

So, the list of compression rules:

  • Compress two spaces to a.
  • Compress __ to b.
  • Compress | to c.
  • Compress aa to d.
  • Compress bb to e.
  • Compress cc to f.
  • Compress dd to g.
  • Compress |c to h.
  • Compress \/ to i. Both the \ and the / in the rules are further escaped.
  • Compress b_ to j.
  • Compress |a to k.
  • Compress _ to l.
  • Compress // to m.

As you can see, there are overlapping compression rules. For example, g encodes dd which encodes aaaa which encodes 8 spaces.

share|improve this answer
    
If you want to sound drunk but don't have any alcohol in reach just try pronouncing one of these. proven to work on parents – cat Jun 28 at 3:29

HTML, 482 481 475 bytes

<pre> _     _                            _______                           _ 
| |   | |                          (_______)          _              | |
| |__ | | ____ ____  ____  _   _    _____   ____  ___| |_  ____  ____| |
|  __)| |/ _  |  _ \|  _ \| | | |  |  ___) / _  |/___)  _)/ _  )/ ___)_|
| |   | ( ( | | | | | | | | |_| |  | |____( ( | |___ | |_( (/ /| |    _ 
|_|   |_|\_||_| ||_/| ||_/ \__  |  |_______)_||_(___/ \___)____)_|   |_|
              |_|   |_|   (____/

share|improve this answer
    
Note: One does not simply view this thing properly on a phone. – dorukayhan May 31 at 14:35
    
Since you are doing all this anyways, you don't need the closing pre tag – Optimizer Jun 4 at 12:31
    
And why do you have trailing spaces on 5th line? :P – Optimizer Jun 4 at 12:32

Python 2, 343 328 316 bytes

This solution uses no decompression functions or other imports.

o=""
for i in range(250):j=ord(")*I*yyQZyyI*(!+9!+yyA,Z-q*y9!+(!+2)!!B)B1B1*9*AJ9B1:!+*1B1B!+(+12-!+/)*1+1*).+1*).!!!+1+1:-)/)*1+/:-1*-/)*1-/):-*+(!+9!,),)!!!!!!!!+*!+1!+B,),)!+:)!+*,),/)/!+A*(+*+9+*+.*3*!3*/!3*/).21+1+Z-*3*,:/).:-B-*+9+*+(y9+*+9+*+9,B/(".replace("!","+)")[i])-40;o+="\n _|()\/"[j&7]*(j/8+1)
print o

Readable version:

DATA=(")*I*yyQZyyI*("
"!+9!+yyA,Z-q*y9!+("
"!+2)!!B)B1B1*9*AJ9B1:!+*1B1B!+("
"+12-!+/)*1+1*).+1*).!!!+1+1:-)/)*1+/:-1*-/)*1-/):-*+("
"!+9!,),)!!!!!!!!+*!+1!+B,),)!+:)!+*,),/)/!+A*("
"+*+9+*+.*3*!3*/!3*/).21+1+Z-*3*,:/).:-B-*+9+*+("
"y9+*+9+*+9,B/(").replace("!","+)")
SIZE=250
o=""
for i in range(SIZE):
 j=ord(DATA[i])-40
 o+="\n _|()\/"[j&7]*(j/8+1)
print o

Uses a version of run length encoding with 3 bits for a symbol from the set "\n _|()/". The remainder of the byte is the length, but I have limited the length to 10 and manipulated it so that the results are printable characters that are valid in a python string without any escaping.

Replacing the string corresponding with "| " with a single character in the encoded data saves a few more bytes.

I removed the trailing spaces on lines 1 and 5, which may be bending the rules a bit, but seems practical.

This program generates the packed data:

message="""
 _     _                            _______                           _
| |   | |                          (_______)          _              | |
| |__ | | ____ ____  ____  _   _    _____   ____  ___| |_  ____  ____| |
|  __)| |/ _  |  _ \|  _ \| | | |  |  ___) / _  |/___)  _)/ _  )/ ___)_|
| |   | ( ( | | | | | | | | |_| |  | |____( ( | |___ | |_( (/ /| |    _
|_|   |_|\_||_| ||_/| ||_/ \__  |  |_______)_||_(___/ \___)____)_|   |_|
              |_|   |_|   (____/"""[1:]
size=len(message)
symbols="\n _|()\/"
i=0
encoded=""
while i<size:
    count=0
    while count<10 and i+count+1<size and message[i+count+1]==message[i]:
        count+=1
    n = symbols.find(message[i]) | count<<3
    encoded+=chr(n+40)
    i+=count+1
encoded_lines = encoded.replace("+)","!").split(chr(40))
for line in encoded_lines:
    print line+chr(40)
print len(encoded)
share|improve this answer
    
Hello, and welcome to PPCG! Great post! – NoOneIsHere Jun 4 at 4:09
    
@NoOneWasLiterallyEverHereEver not that it's their first post or anything, but sure :) – cat Jun 28 at 3:27

JavaScript (ES6), 354 bytes

Another attempt. Not as efficient as run length, unfortunately.

i=0,console.log(`1c1bt96zfx1!1n4ikabr1w5!1n4iut4kyue!krgqthnkpkem8!43tb4j2urme!8hwrsagny80!69dfowb7hvk!2xj89rpvcb2!23l14ken5i1!1xzn6ns7j78!1tzyivgb4h2!1yy885vts00!12du7km7f51!1lvpcyzgbfq!17nicizf8og0!1246xqebgb9!1n4j181hywz!`.replace(/\w+!/g,v=>parseInt(v,36).toString(4).replace(/./g,w=>"_ |"[w]||`
()

)/\\\\)//))/)/)
((((((//
\\//\\)(/\\))
(/`[i++])))

Stores a bunch of base-36 numbers in the first string, delimited by a ! separator. Then replaces the numbers (along with the !) with the numbers' base-4 representations. Replaces all the 0's, 1's, and 2's in the base-4 number with _,  , and | respectively, and all the 3's are replaced with the elements in the second string sequentially.

share|improve this answer

Python 3, 263 bytes

Initial pass using builtins.

from base64 import*
from zlib import*
print(decompress(a85decode(b"Gas1Y_%\"=:#lAfQT$<1I,'acT5E):N/+l.oQs`98(esP<+T'c!7p'"
b";rpgIeCXZQ&]8Z,D1U/2<LjGq-FIBH)'D@dH'FCjS[&_Wa(Y9N^<LMJiMJrGNuf@S=?GWT(W34:oA%hQ<"
b"thh3pT#pD4$L]LSa%IG!R,BiQaoor91d>uo0VEQs4+2O[m4o")).decode())

some extra quotes and linebreaks added to avoid horizontal scroll for display purposes only (not counted in score)

share|improve this answer
6  
Don't worry about horizontal scroll. Just copy-paste the text as-is, because that's what we're interested in. – El'endia Starman Mar 27 at 18:44
    
I know, I just prefer to avoid it. May as well also not do hex dumps all pretty. – Nick T Mar 27 at 19:41
    
You could try to store the zlib data in a string. You slould escape some characters, but it's probably a lot shorter. See this answer as reference. – agtoever Mar 28 at 6:05
    
@agtoever the repr() of the raw string was much longer than ascii85 – Nick T Mar 28 at 18:56
3  
@NickT Please remove the additional quotes and whitespace. Your code should be such that we can copy/paste it into a byte-counter and get the same result. Thanks. If you want a nice, displayable version, post an un-golfed version. – mbomb007 Mar 29 at 16:08

CJam, 229

"3WPPEFXvN'vlFBse/cTD>.x:Na,Y&NJH^tZ%xL(NkYzo0Rq%BeV&Zl1T^2y69,W/QC4pL`nv<Jo$'Cq.'m2-3H#9teHi&<uyO>f V)D\E y'*]oGq*ODjQLyoS*GyM7;\Z.n6B;J@OyEaE!4'E5p5MOl^#[,ZtA;`jy,gTP^\;;i<A6^:k1%"' fm91b31b"}*+{~'NHIF\JLM
OGQK)(P/RST|_- \""f=~

No funky characters and no built-in compression :)

Try it online

share|improve this answer

Lua, 353 bytes

Program:

a=(" _ 5_ 28_7 27_\n|~ 2~2 26(_7) 10_ 13~2\n|~_2~2 _4 _4 2_4 2_ 3_ 4_5 3_4 2_3|~_ 2_4 2_4|~\n| 2_2)|~/ _ ~ 2_ \\| 2_ \\|~3 ~ 2_3) / _ ~/_3) 2_)/ _ 2)/ _3)_|\n|~ 2~ ( (~9_|~ ~2_4( (~2_3~2_( (/ /|~ 4_\n|_| 2~_|\\_|2_|~|_/|~|_/ \\_2 ~ ~_7)_|2_(_3/ \\_3)_4)_| 2~_|\n 13~_| 2~_| 3(_4/"):gsub("(.)(%d+)",function(a,b)return a:rep(b)end):gsub("~"," |")print(a)

Thanks to @jrich for compression.

share|improve this answer

Ruby, 271 262 248 bytes

require'zlib'
require'base64'
puts Zlib.inflate Base64.decode64'eJx1UMENxDAI+zMFz+bFQpG8CMMX46DeVWpQrJjYhGDp6e7Cj3VBaz0p/CvKbrWBLkStYHAcEH8uafqhUKE6rjoFTWS+BxWdZD9ShHrDakosju6oe7sq8h04hZLPHgX0AdLwODOBG8VOy0a2MRFC31CPOTOiggPrq6LKyW6vqU1+Zhx2A7NMZ9I'

Try it here

share|improve this answer

Vim, 374 365 326 319 313 311 keystrokes

9 keystrokes thanks to @Dr Green Eggs and Ham DJ .

:im @ ___<CR>
:im % _|<CR>
a _## _<esc>28a <esc>yl7a_<esc>27pa_ <CR>
|!#!!<esc>26pa(<esc>7a_<esc>a)<esc>10pa_<esc>14pa|!<CR>
|!__!!<esc>3a @_<esc>bi <esc>A#_# _##@__# @_#@|!_#@_#@%!<CR>
|#__)|!/ _ !#_ \|#_ \<esc>4a| <esc>a!#@) / _ !/@)#_)/ _#)/ @)%<CR>
|!#! ( (<esc>9a!<esc>a%! !!@_( (!!@!!_( (/ /|!##_ <CR>
|%#!%\%|_<esc>2a|!|_/<esc>a \__ ! !<esc>7a_<esc>a)%|_(@/ \@)@_)%#!%<CR>
<esc>14pa|%#!%# (@_/<esc>
:%s/!/ |/g<CR>
:%s/#/  /g<CR>

Probably can be golfed further by using :nn?

share|improve this answer
    
Here's a couple quick tips after one glance over. 1. You do <number>a <esc> a lot. If you do yl on a space, you could replace this with <number>p. That should save around 8. 2. You could replace ea with A. You could probably take even more if you change your approach, but those are the quick tips I see. – Dr Green Eggs and Iron Man May 29 at 14:58
    
@DrGreenEggsandHamDJ Is there any way that I could map a single keystroke to typing _ and | etc? – Leaky Nun May 29 at 15:16
    
I'm on my phone, so I can't test this, but I think this is incorrect. :s only replaces on one line. You want :% s. You could also save some keystrokes by doing :im (imap) instead of search and replace. (Although you might need to use ctrl-v or ctrl-q to map to a space) – Dr Green Eggs and Iron Man May 29 at 16:50
    
@DrGreenEggsandHamDJ Excellent, but using :im can only golf a few more bytes I suppose. – Leaky Nun May 29 at 16:59

Javascript (ES6) 464 352 bytes

00000000  63 6f 6e 73 6f 6c 65 2e  6c 6f 67 28 60 08 09 28  |console.log(`..(|
00000010  09 c3 a0 39 c3 98 09 08  0f 0c 08 0c 18 0c 08 0c  |...9............|
00000020  c3 90 0a 39 0e 50 09 70  0c 08 0c 0f 0c 08 0c 11  |...9.P.p........|
00000030  08 0c 08 0c 08 21 08 21  10 21 10 09 18 09 20 29  |.....!.!.!.... )|
00000040  18 21 10 19 0c 08 0c 09  10 21 10 21 0c 08 0c 0f  |.!.......!.!....|
00000050  0c 10 11 0e 0c 08 0c 0a  08 09 10 0c 10 09 08 0c  |................|
00000060  10 09 08 0c 08 0c 08 0c  08 0c 10 0c 10 19 0e 08  |................|
00000070  0a 08 09 10 0c 0a 19 0e  10 09 0e 0a 08 09 10 0e  |................|
00000080  0a 08 19 0e 09 0c 0f 0c  08 0c 18 0c 08 0a 08 0a  |................|
00000090  08 0c 08 0c 08 0c 08 0c  08 0c 08 0c 08 0c 08 0c  |................|
000000a0  08 0c 09 0c 08 0c 10 0c  08 0c 21 0a 08 0a 08 0c  |..........!.....|
000000b0  08 0c 19 08 0c 08 0c 09  0a 08 0a 08 0a 0c 08 0c  |................|
000000c0  20 09 08 0f 0c 09 0c 18  0c 09 0c 09 14 09 0c 08  | ...............|
000000d0  14 09 0a 0c 08 14 09 0a  08 11 10 0c 10 0c 39 0e  |..............9.|
000000e0  09 14 09 0a 19 0a 08 19  0e 21 0e 09 0c 18 0c 09  |.........!......|
000000f0  0c 0f 70 0c 09 0c 18 0c  09 0c 18 0a 21 60 2e 73  |..p.........!`.s|
00000100  70 6c 69 74 28 22 22 29  2e 6d 61 70 28 61 3d 3e  |plit("").map(a=>|
00000110  61 2e 63 68 61 72 43 6f  64 65 41 74 28 29 29 2e  |a.charCodeAt()).|
00000120  6d 61 70 28 61 3d 3e 41  72 72 61 79 28 28 61 3e  |map(a=>Array((a>|
00000130  3e 33 29 2b 31 29 2e 6a  6f 69 6e 28 22 20 5f 2f  |>3)+1).join(" _/|
00000140  5c 5c 7c 28 29 5c 6e 22  2e 73 70 6c 69 74 28 22  |\\|()\n".split("|
00000150  22 29 5b 61 26 37 5d 29  29 2e 6a 6f 69 6e 28 22  |")[a&7])).join("|
00000160  22 29 29                                          |"))|

Try it here!

share|improve this answer

Python 3, 377 bytes

from re import*;i=0
r=r'2_.7_./ .|2.| .4_.\\. _._d|.( (.3_). _ .2|_. |2 ._| |.a| |./ _2 .|3 |_. 4_2 . | |.\n'
e='an5n28 t27jf3b26 (t)10n14bfub pcp2n3n4 5_3c3g_2c4gar u)q|erjorjo|bhr k e|/k2n)e)sk_|f3 qlbbbb |g2bplb3_b_ls/q|4ja|mo_iqi/qisou2h|t)_i(3_sokp)ma14 |m3 (p/'
for j in r.split('.'):e=sub(chr(117-i),j,e);i+=1
print(sub('(\d+)(.)',lambda x:int(x.group(1))*x.group(2),e))

similar to the javascript answer, used RLE plus a bunch of replacements for common substrings.

Think I went a bit over the top with the replacing stuff, probably didn't help that much but oh well.

share|improve this answer

Javascript ES6, 314 bytes

Contains unprintable bytes. Uses some black JS magic to run. If console.log() is needed for this answer to be valid, the byte count will be 327.

[...`Ãm°Ûm¶Ûm¶Ûm¶Û\`��m¶Ûm¶Ûm¶Ûm�ç�±Çm¶Ûm¶Ûm¶Ûh���¶Ûm°Ûm¶Ûm�<â�8à�À�°�l6Ãm��m��\`�Äl����Ç��§��Ça�ØfqÇ��À�����»
°Ú¬� ó�Øé¦8ã�8ã� ã±Ä�&�â�Ç�4Y�vØnAÛ�X$�HG��\`lv �� ���0��
�Ø�öÛm¶Ûb�Ø�¶���`].map(a=>'0'.repeat(8-(z=a.charCodeAt().toString(2)).length)+z).join``.replace(/.{1,3}/g,a=>`_|/\\()
`[parseInt(a,2)]).slice(0,-2)

This was a huge pain to get right, and I couldn't manage to get rid of the .slice(0,-2) :(
Will edit in an explanation tomorrow when I'm less tired.

Replaced every single byte with the corresponding hex value in order for the code snippet to be able to run

f=_=>
[...`\xc3\x6d\xb0\xdb\x6d\xb6\xdb\x6d\xb6\xdb\x6d\xb6\xdb\x60\x00\x00\x6d\xb6\xdb\x6d\xb6\xdb\x6d\xb6\xdb\x6d\x86\xe7\x1d\xb1\xc7\x6d\xb6\xdb\x6d\xb6\xdb\x6d\xb6\xdb\x68\x00\x00\x0b\xb6\xdb\x6d\xb0\xdb\x6d\xb6\xdb\x6d\x8e\x3c\xe2\x06\x38\xe0\x00\xc0\x01\xb0\x00\x6c\x36\xc3\x6d\x80\x00\x6d\x80\x03\x60\x01\xc4\x6c\x00\x1b\x00\x01\xc7\x9d\x80\xa7\x15\x86\xc7\x61\x99\xd8\x66\x71\xc7\x1d\x8e\xc0\x0b\x96\x1b\x14\x00\xbb\x0a\xb0\xda\xac\x00\xa0\xf3\x8e\xd8\xe9\xa6\x38\xe3\x8e\x38\xe3\x8e\x20\xe3\xb1\xc4\x00\x26\x98\xe2\x00\xc7\x11\x34\x59\x1c\x76\xd8\x6e\x41\xdb\x10\x58\x24\x1c\x48\x47\x12\x16\x60\x6c\x76\x20\x00\x00\xa0\x91\x00\x0b\x30\x05\x00\x0a\x0e\xd8\x83\xf6\xdb\x6d\xb6\xdb\x62\x0e\xd8\x83\xb6\x80\x00\x80`].map(a=>'0'.repeat(8-(z=a.charCodeAt().toString(2)).length)+z).join``.replace(/.{1,3}/g,a=>`_|/\\() 
`[parseInt(a,2)]).slice(0,-2)

a.innerHTML=f()
<pre id=a>

share|improve this answer
1  
How does this work? – Oliver Ni Jul 15 at 0:44

Your Mom (non-competing), 331 bytes

Decode the string and decompress it using the Jelly compressor

'IF8KfCgpL1z/AQAAAQAAAAAAAAAAAAAAAAAAEREREAAAAAAAAAAAAAAAAAAQIwMAAwMAAAAAAAAAAAAAAAAAQREREVAAAAAAAQAAAAAAAAAwMjAxEDAwEREBERABERABAAEAABEREAAREQAREwMQAREQARETAyMAEVMDYBADABBzABBzAwMDADABEVBgEANhEVABVgEAVgERUTIwMAAwQEAwMDAwMDAwMDEwMAMDERFAQDAxEQMDFARgYwMAABAjEwADE3EzEwMxYwMxYHEQAwAxERERUTMUERYHERUREVEwADEyAAAAAAAAADEwADEwAEERFg=='`
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.