text:
It's super effective!

In Pokémon there are 18 types:
Normal    Fighting  Flying  Poison  Ground  Rock
Bug       Ghost     Steel   Fire    Water   Grass
Electric  Psychic   Ice     Dragon  Dark    Fairy

A Pokémon can have single or dual typing. For example, Pikachu is Electric, and Tyranitar is Rock/Dark. The order of the types does not matter. A Pokémon can't have the same type twice. An attacking move has exactly one of the above 18 types.

Some Pokémon types are weak to a certain type of attack. For example, a Fire Pokémon is weak against Water attacks. This gives a damage multiplier of 2.

Some Pokémon types are resistant to a certain type of attack. For example, a Rock Pokémon is resistant against a Normal attack. This gives a damage multiplier of 0.5.

Some Pokémon types are immune to a certain type of attack. For example, a Flying Pokémon is immune against a Ground attack. This gives a damage multiplier of 0.

A pokemon can be doubly weak, doubly resistant or any other combination against an attacking type. Multiply the multipliers to get a total effectiveness.
Write a program or function that given a move type and a Pokémon typing outputs the total damage multiplier of the attack. A Pokémon typing is always written either as A or A/B, where A and B are distinct types from the list above. You must accept the Pokémon typing in this format. Other than this restriction you may take input in any reasonable manner. An example input format that acceptable is:
"Ice", "Dragon/Flying"

But this is unacceptable:
["Ice", ["Dragon", "Flying"]]

Your output must be exactly one of the following strings, followed by an optional trailing newline:
0x    0.25x    0.5x    1x    2x    4x

Examples
Ground, Fire -> 2x
Normal, Rock/Dragon -> 0.5x
Fighting, Ghost/Steel -> 0x
Steel, Water/Steel -> 0.25x
Ice, Dragon/Flying -> 4x
Water, Ground/Water -> 1x
Ghost, Ghost -> 2x

Type effectiveness
For a human-friendly type chart I'd like to refer you to Gamepedia. To make the golfing process a bit faster I'll give you a compressed computer-friendly matrix of effectiveness. Divide every number by two to get the true multiplier (1 -> 0.5, 4 -> 2):
              Defending type
               (same order)

   Normal   222221201222222222
   Fighting 421124104222214241
A  Flying   242221421224122222
t  Poison   222111210224222224
t  Ground   220424124421422222
a  Rock     214212421422224222
c  Bug      211122211124242241
k  Ghost    022222242222242212
i  Steel    222224221112124224
n  Fire     222221424114224122
g  Water    222244222411222122
   Grass    221144121141222122
T  Electric 224202222241122122
y  Psychic  242422221222212202
p  Ice      224242221114221422
e  Dragon   222222221222222420
   Dark     212222242222242211
   Fairy    242122221122222442

Shortest code in bytes wins.

I love video-game-based challenges!

I prefer to pretend that the Fairy type doesn't exist. Pokemon is only getting worse the more they add.

PPCG used CJam! It's super effective! PPCG used Java! It's not very effective...

Don't listen to mean ol' mbomb007, little Togekiss. Everyone knows you're better with Fairy typing.

@Geobits As long as they keep making more, you can never "catch them all." And maybe you can't ever, if you don't have the promotional giveaways for the old games.

Someone should write an answer in Pikalang! (Good luck.)

@mbomb007 huh... congratulations! i didn't think it was possible, but you've managed to discover an incorrect opinion ;)

@undergroundmonorail Ruby and Diamond were the peak, imho.

@mbomb007 out of curiosity, how much have you played of the more recent ones? (not that there are any answers that would make your opinion invalid obviously)

Is it sad that all I saw on the 'hot network questions' was 'its super effective' and I clicked it knowing that it was about Pokemon in some way.

@undergroundmonorail I haven't, but I have friends that have, and have heard descriptions of the changes that have been made, such as Fairy being added, and the "4th evolution", and lame-sounding pokemon like a cotton-candy pokemon.

The question says "Write a program that..." but a number of the answers are just functions not full programs (e.g. the currently top scoring Java answer). Can you confirm that you want full programs as answers?

@mattnewport Functions are fine.

So just a function is fine and it is allowed to take the attacking and defending types as separate arguments rather than parsing them out?

@mbomb007: "Lame pokemon" is never a good reason to dislike a new generation, as the old generations had plenty of "lame" designs, such as three different goo blobs, a horse on fire, literally a seal, and several different pokemon that just evolve to have three of themselves.

@Pyritie Don't disrespect the Ponyta. All fire types are awesome, though the monkey cuts it close.

Nice, but it's possible for Pokémon to have three types, and there are some moves with special type requirements (Freeze-Dry, Flying Press and Thousand Arrows come to mind).

Pyth - 246 245 188 bytes
Encodes the matrix with base compression, will probably use modular indexing/hashing for the matrix indices but right now I haven't done anything fancy with those.
Lxc"NorFigFlyPoiGroRocBugGhoSteFirWatGraElePsyIceDraDarFai"3<b3.F"{:g}x"*Fm@@c19cR2KXjC"
©ªªå´êÛ©æ¶ª©Y+ªº;oªnz®©Z»*«ªºj«¥fëª×ª¯«Z¥ö]©ªâªÖ»ªj*î¥zzªªj«ªº«¥¹ªZ«ë¥ª¾"4]3]4yzydcw\/

Test Suite.

Are you sure that's a program and not line noise?

Java, 663 639 582 bytes
String f(String...a){float d=1;for(String B:a[1].split("/"))d*=("222221201222222222421124104222214241242221421224122222222111210224222224220424124421422222214212421422224222211122211124242241022222242222242212222224221112124224222221424114224122222244222411222122221144121141222122224202222241122122242422221222212202224242221114221422222222221222222420212222242222242211242122221122222442".charAt(g(a[0])*18+g(B))-48)*.5;return(d+"x").replace(".0","");}int g(String a){int i=0;for(;i<18;i++)if(a.contains("N,gh,ly,oi,ou,ck,B,ho,S,re,W,G,E,P,I,g,k,y".split(",")[i]))break;return i;}

There's a simple lookup table that takes much of the room. It just finds the correct types and multiplies it out. Call it like this:
f("Water","Ground/Fire")

With some line breaks it looks like this:
String f(String...a){
    float d=1;
    for(String B:a[1].split("/"))
        d*=("222221201222222222421124104222214241242221421224122222222111210224222224220424124421422222214212421422224222211122211124242241022222242222242212222224221112124224222221424114224122222244222411222122221144121141222122224202222241122122242422221222212202224242221114221422222222221222222420212222242222242211242122221122222442"
                .charAt(g(a[0])*18+g(B))-48)*.5;
    return(d+"x").replace(".0","");
}

int g(String a){
    int i=0;
    for(;i<18;i++)
        if(a.contains("N,gh,ly,oi,ou,ck,B,ho,S,re,W,G,E,P,I,g,k,y".split(",")[i]))
            break;
    return i;
}

You can shave a few bytes by using c="222...442".split(",");

Right. Not sure why I did it for one and not the other :/

you wanna explain this to us? I'm very interested but don't understand what's happening lol :)

You could save 6 bytes by removing the commas in your first splitted string and using the regex "(?<=\G{18})" in your split function.

Could you shave bytes using for(String B:b) making your for-loop go from 24 to 15, saving 9, and making your [b[i++]] into B for 7 more savings. Total of 16 savings!

@AndrewTrewin Thanks! I ended up getting rid of the split altogether to save even more.

@corsiKa Done, and pulled the split into it to get rid of b anyway :)

You can save a byte by moving the ++ into the if statement

@Luminous I'm not sure about that. Since I return i, I'd need to either subtract one later or start it at -1, either of which would negate that saved byte.

Yea, didn't notice that. You know I turned your method into a recursive one to get rid of the loop and still got the same amount.

I know you've answered this more than two years ago, but you can change *.5 to /2 to save a byte.

@Kevin I tried that originally, but it truncates to int math and I lose the decimal portion.

@Geobits Ah of course. I've only tested it with your example test case that results in 4x. Forgot about Java's automatic flooring on positive integer division (regarding the test cases for decimal outputs). My bad..

Pikalang, 868068 bytes
This was just too good of an idea to skip. (Thanks, mbomb007.)
It's basically a sub-optimal lookup table. I first encode each type as
((first_char + second_char * 2 + third_char * 3) mod 256) - 0x3c

This results in unique representations for each type. The empty type (when the defending pokemon has only a single type) is encoded as 0x00.
After that I just use a mess of if-else equivalents to check all the ~5800 combinations.
Code
Stack Exchange didn't allow me to post the code as a whole, so here's it gzipped + base64'd.
[encoded data, 13092 characters]

Example
Apparently the official Pikalang interpreter is not ready yet, but since it's a trivial Brainfuck substitution, I tested it using a Brainfuck interpreter.
$ base64 -d supereff.pokeball.gz.b64 > supereff.pokeball.gz
$ gunzip supereff.pokeball.gz
$ pikalang supereff.pokeball
Normal
Rock/Dragon
0.5x

Input is newline-separated and requires an additional trailing newline.
The program uses the memory location -1, so if your interpreter disallows going off the left side of the tape, prepend the code with a pipi or a > (for Pikalang and Brainfuck, respectively).
Brainfuck, 193708
Here's the same program in Brainfuck (also gzipped + base64'd).
[encoded data, 6124 characters]

The program contains four parts:

The input. Reading the types and calculating their identifiers.
The text generation. Generating strings for each of the possible outputs.
The lookup table. This part was computer-generated (see below). Moves the pointer to the correct result.
The output. Just printing the result.

Main program structure
,>,[-<++>],[-<+++>] read first type id
++++++[-<---------->] subtract 3c
+[,----------] skip until newline
>,>,[-<++>],[-<+++>] read second type id
++++++[-<---------->] subtract 3c
>- set @LOOPFLAG@ to get into loop
[
 >-< set @CHARFLAG@
 <,---------- get character; newline is 00 slash is 25
 [ was not newline
  ------------------------------------- slash is now 00
  [ was not slash
   >>+<< reset @CHARFLAG@
   [-] clear character
  ]
 ]
 >>[ was newline or slash (@CHARFLAG@ set)
  <+>+ reset @LOOPFLAG@ and @CHARFLAG@
 ]<
]
,>,[-<++>],[-<+++>] read third type id
<[->+>+<<]>[-<+>] copy third to @CHARFLAG@
>[ if @CHARFLAG@ is set
 [-] clear @CHARFLAG@
 <++++++[-<---------->]> subtract 3c from third
]<
++++++++[- do 8 times
 >++++++ put a 0 here
 >+++++++++++++++ put an x here
 >>++++++ put a 0 here
 >++++++ put a 0 here
 >++++++ put a 0 here
 >+++++++ put a 8 here
 >+++++++++++++++ put an x here
 >>++++++ put a 0 here
 >++++++ put a 0 here
 >+++++++ put a 8 here
 >+++++++++++++++ put an x here
 >>++++++ put a 0 here
 >+++++++++++++++ put an x here
 >>++++++ put a 0 here
 >+++++++++++++++ put an x here
 >>++++++ put a 0 here
 >+++++++++++++++ put an x here
 <<<<<<<<<<<<<<<<<<<<<< go back
]
>>>>>-- change 0 to dot
>++ change 0 to 2
>--- change 8 to 5
>>>>-- change 0 to dot
>--- change 8 to 5
>>>+ change 0 to 1
>>>++ change 0 to 2
>>>++++ change 0 to 4
<<<<<<<<<<<<<<<<<<<<<< go back
(lookup table here)
>[.>] print result

Here's the script that generates the lookup table:
typemap = [[int(value, 16), name] for value, name in [
    ["00", "(Nothing)"],
    ["02", "Ice"],
    ["07", "Fairy"],
    ["0f", "Dragon"],
    ["10", "Electric"],
    ["11", "Fighting"],
    ["12", "Grass"],
    ["1d", "Rock"],
    ["20", "Dark"],
    ["25", "Bug"],
    ["28", "Ghost"],
    ["2d", "Poison"],
    ["2e", "Steel"],
    ["32", "Fire"],
    ["39", "Water"],
    ["3c", "Ground"],
    ["46", "Normal"],
    ["4d", "Flying"],
    ["65", "Psychic"]
]]
multipliers = {
    0: 5,
    0.25: 8,
    0.5: 14,
    1: 19,
    2: 22,
    4: 25
}
types = [
    "Normal", "Fighting", "Flying", "Poison", "Ground", "Rock", "Bug", "Ghost", "Steel",
    "Fire", "Water", "Grass", "Electric", "Psychic", "Ice", "Dragon", "Dark", "Fairy"
]
results = [
    [2, 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2],
    [4, 2, 1, 1, 2, 4, 1, 0, 4, 2, 2, 2, 2, 1, 4, 2, 4, 1],
    [2, 4, 2, 2, 2, 1, 4, 2, 1, 2, 2, 4, 1, 2, 2, 2, 2, 2],
    [2, 2, 2, 1, 1, 1, 2, 1, 0, 2, 2, 4, 2, 2, 2, 2, 2, 4],
    [2, 2, 0, 4, 2, 4, 1, 2, 4, 4, 2, 1, 4, 2, 2, 2, 2, 2],
    [2, 1, 4, 2, 1, 2, 4, 2, 1, 4, 2, 2, 2, 2, 4, 2, 2, 2],
    [2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 4, 2, 4, 2, 2, 4, 1],
    [0, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 4, 2, 2, 1, 2],
    [2, 2, 2, 2, 2, 4, 2, 2, 1, 1, 1, 2, 1, 2, 4, 2, 2, 4],
    [2, 2, 2, 2, 2, 1, 4, 2, 4, 1, 1, 4, 2, 2, 4, 1, 2, 2],
    [2, 2, 2, 2, 4, 4, 2, 2, 2, 4, 1, 1, 2, 2, 2, 1, 2, 2],
    [2, 2, 1, 1, 4, 4, 1, 2, 1, 1, 4, 1, 2, 2, 2, 1, 2, 2],
    [2, 2, 4, 2, 0, 2, 2, 2, 2, 2, 4, 1, 1, 2, 2, 1, 2, 2],
    [2, 4, 2, 4, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 0, 2],
    [2, 2, 4, 2, 4, 2, 2, 2, 1, 1, 1, 4, 2, 2, 1, 4, 2, 2],
    [2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 4, 2, 0],
    [2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 4, 2, 2, 1, 1],
    [2, 4, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 4, 4, 2]
]
def getMultiplier(first, second, third):
    id1 = types.index(first)
    id2 = types.index(second)
    if third in types:
        id3 = types.index(third)
        return results[id1][id2] * results[id1][id3] / 4;
    else:
        return results[id1][id2] / 2

def genFirstType(second, third, remain, removed):
    mul = getMultiplier(remain[0][1], second, third)
    if len(remain) == 1:
        result = "[ first is not " + removed[1] + "\n"
        result += "thus first must be " + remain[0][1] + "\n"
        result += ">" * (multipliers[mul] - 1) + "[-]-> " + str(mul).replace(".", "").rstrip("0") + "x multiplier\n"
        result += "]\n"
        return result
    elif not removed:
        result = "<<" + "-" * remain[0][0] + " " + remain[0][1] + " is now 00\n"
        result += genFirstType(second, third, remain[1:], remain[0])
        result += "<+[ first is " + remain[0][1] + "\n"
        result += ">" * multipliers[mul] + "[-] " + str(mul).replace(".", "").rstrip("0") + "x multiplier\n"
        result += "]->\n"
        return result
    else:
        result = "[ first is not " + removed[1] + "\n"
        result += "-" * (remain[0][0] - removed[0]) + " " + remain[0][1] + " is now 00\n"
        result += genFirstType(second, third, remain[1:], remain[0])
        result += "<+[ first is " + remain[0][1] + "\n"
        result += ">" * multipliers[mul] + "[-] " + str(mul).replace(".", "").rstrip("0") + "x multiplier\n"
        result += "]->\n"
        result += "]\n"
        return result
def genSecondType(third, remain, removed):
    if len(remain) == 1:
        result = "[ second is not " + removed[1] + "\n"
        result += "thus second must be " + remain[0][1] + "\n"
        result += genFirstType(remain[0][1], third, typemap[1:], False)
        result += "]\n"
        return result
    elif not removed:
        result = "<<" + "-" * remain[0][0] + " " + remain[0][1] + " is now 00\n"
        result += genSecondType(third, remain[1:], remain[0])
        result += "<+[-> second is " + remain[0][1] + "\n"
        result += genFirstType(remain[0][1], third, typemap[1:], False)
        result += "<+]->\n"
        return result
    else:
        result = "[ second is not " + removed[1] + "\n"
        result += "-" * (remain[0][0] - removed[0]) + " " + remain[0][1] + " is now 00\n"
        result += genSecondType(third, remain[1:], remain[0])
        result += "<+[-> second is " + remain[0][1] + "\n"
        result += genFirstType(remain[0][1], third, typemap[1:], False)
        result += "<+]->\n"
        result += "]\n"
        return result
def genThirdType(remain, removed):
    if len(remain) == 1:
        result = "[ third is not " + removed[1] + "\n"
        result += "thus third must be " + remain[0][1] + "\n"
        result += genSecondType(remain[0][1], [item for item in typemap[1:] if item[1] != remain[0][1]], False)
        result += "]\n"
        return result
    elif not removed:
        result = "-" * remain[0][0] + " " + remain[0][1] + " is now 00\n"
        result += genThirdType(remain[1:], remain[0])
        result += "<+[-> third is " + remain[0][1] + "\n"
        result += genSecondType(remain[0][1], [item for item in typemap[1:] if item[1] != remain[0][1]], False)
        result += "<+]->\n"
        return result
    else:
        result = "[ third is not " + removed[1] + "\n"
        result += "-" * (remain[0][0] - removed[0]) + " " + remain[0][1] + " is now 00\n"
        result += genThirdType(remain[1:], remain[0])
        result += "<+[-> third is " + remain[0][1] + "\n"
        result += genSecondType(remain[0][1], [item for item in typemap[1:] if item[1] != remain[0][1]], False)
        result += "<+]->\n"
        result += "]\n"
        return result
def genLookup():
    return genThirdType(typemap, False)

def compact(code):
    import re
    return re.sub(r"[^+\-<>\[\],.]", "", code)
def golfStep(code):
    return code.replace("><", "").replace("<>", "").replace("+-", "").replace("-+", "")
def golf(code):
    previous = golfStep(code)
    while previous != code:
        previous, code = code, golfStep(code)
    return code

if __name__ == "__main__":
    import sys
    result = genLookup()
    if "-g" in sys.argv:
        print(golf(compact(result)))
    elif "-c" in sys.argv:
        print(compact(result))
    else:
        print(result)

BTW, this answer takes 29817 bytes. :)

Really, the interpreter isn't ready? What about here?

@mbomb007 Well, at least the one you linked earlier wasn't. I'm not sure about that one (BFC), it doesn't list Pikalang on the front page and I'm also not sure if it works (depends on it parsing spaces correctly, PIPI could be interpreted as > or ++). Also BFC would apparently require upper-casing the code.

Thank you @Pietu1998 for making the pikalang version. hilarious! now if i could find the time to finish this language how i want instead of the quick and dirty way. Thanks again

JavaScript (ES6), 287
I haven't seen a good compression of the types, so here's one.
(a,b)=>b.split('/').reduce((j,p)=>j*[0,.5,1,2][parseInt("kjwhcgnj2xd6elihtlneemw82duxijsazl3sh4iz5akjmlmsqds06xf1sbb8d0rl1nu7a2kjwi3mykjwlbpmk1up4mzl1iuenedor0bdmkjwmpk6rhcg4h3en3pew5".substr((g=x=>[..."BWSEIRNulkcDPotyeG"].findIndex(c=>x.match(c)))(a)*7,7),36).toString(4)[g(p)]],1)+'x'

Ungolfed:
(a,b)=>{
  // keys is a list of letters found in the types of attacks/defenses
  keys = [..."BWSEIRNulkcDPotyeG"];

  // getIndex is a single case statement.
  // it checks each of keys, one-by-one, falling through until we've found the proper index
  getIndex=x=>keys.findIndex(c=>x.match(c));

  // encodedValues is a list, indexed by `keys`, where each value is 7-characters.
  encodedValues = "kjwhcgnj2xd6elihtlneemw82duxijsazl3sh4iz5akjmlmsqds06xf1sbb8d0rl1nu7a2kjwi3mykjwlbpmk1up4mzl1iuenedor0bdmkjwmpk6rhcg4h3en3pew5";

  // the 7-character value (e.g., B=0="kjwhcgn", W=1="j2xd6el") were created by
  // turning base4 values into base36, so let's turn this back into a string the same way
  valuesForAttack = parseInt(encodedValues.substr(getIndex(a)*7,7),36).toString(4);

  // valuesForAttack is indexed by defenseType.  The value will be 0..3, depending on the multiplier

  // let's get an array of the multipliers and reduce...
  multiplier = b.split('/').reduce((oldMultiplier,defenseType)=>oldMultiplier * [0,.5,1,2][valuesForAttack[getIndex(defenseType)]],1);

  return multiplier+'x';
}

Oh, and here's my chart (keeping in mind it's ordered so that a letter won't match any words listed below it):
"Bug" => "B",
"Water" => "W",
"Steel" => "S",
"Electric" => "E",
"Ice" => "I",
"Rock" => "R",
"Normal" => "N",
"Ground" => "u",
"Flying" => "l",
"Dark" => "k",
"Psychic" => "c",
"Dragon" => "D",
"Poison" => "P",
"Ghost" => "o",
"Fighting" => "t",
"Fairy" => "y",
"Fire" => "e",
"Grass" => "G"

Good job! I had a similar idea, but you got to it first!

If you encode your already encoded values string with atob, you can save 26 bytes by using btoa on that. When you encode it just make sure to add an extra character since "...pew5" becomes "...peww==" due to byte alignment.

@SLuck49 Thanks.  I tried it and it seems like it's fewer characters but more bytes. Am I doing something wrong?

Shoot you're right, I was looking at character count instead of byte count... stupid UTF-8 multi byte characters.

@SLuck49 It's likely that there's a better way to encode the multipliers. There's a lot of wasted space with all the 2's.

@SpeedyNinja Thank you

C++14, 420 416
#include<iostream>
#include<string>
std::string m,t,n="NorFigFlyPoiGroRocBugGhoSteFirWatGraElePsyIceDraDarFai";int i;int main(){std::cin>>m>>t;auto k=[](auto y){return(i=6*n.find(m.substr(0,3))+n.find(y.substr(0,3))/3,i="J:2JJJ;YQJV>N:;ZIJJ5&ZJZ*[Y;KJVF;KZJ6I6YN>HJNJNFJZ:EYZJ:[UZIJ^J7JI:]9=JIZBJ>IINK:JFBZN:U:KJJ:JJ+FJNJN6NI:IJO"[i/3]-32>>i%3*2&3,i+i/3)/2.;};std::cout<<k(t)*((i=t.find(47)+1)?k(t.substr(i)):1)<<"x";}

Input should be to stdin and be in the form Normal, Rock/Dragon
Live version.
With some whitespace:
#include<iostream>
#include<string>
std::string m, t, n = "NorFigFlyPoiGroRocBugGhoSteFirWatGraElePsyIceDraDarFai";
int i;
int main(){
    std::cin >> m >> t;
    auto k = [](auto y){
        return(i = 6 * n.find(m.substr(0, 3)) + n.find(y.substr(0, 3)) / 3
            , i = "J:2JJJ;YQJV>N:;ZIJJ5&ZJZ*[Y;KJVF;KZJ6I6YN>HJNJNFJZ:EYZJ:[UZI"
            "J^J7JI:]9=JIZBJ>IINK:JFBZN:U:KJJ:JJ+FJNJN6NI:IJO"[i / 3] - 32 >> i % 3 * 2 & 3
            , i + i / 3) / 2.;
    };
    std::cout << k(t)*((i = t.find(47) + 1) ? k(t.substr(i)) : 1) << "x";
}

Lua, 758 661 633 bytes
m={"222221201222222222","421124104222214241","242221421224122222","222111210224222224","220424124421422222","214212421422224222","211122211124242241","022222242222242212","222224221112124224","222221424114224122","222244222411222122","221144121141222122","224202222241122122","242422221222212202","224242221114221422","222222221222222420","212222242222242211","242122221122222442"}s="NorFigFlyPoiGroRocBugGhoSteFirWatGraElePsyIceDraDarFai"function f(a,d)z=string.sub n=tonumber _,r=s:find(z(a,1,3))r=r/3g,_,c=0,s:find(z(d,1,3))c=c/3p=d:find("/")or 0 e=m[r]_,g=s:find(z(d,p+1,p+3))g=g/3r=n(z(e,c,c))/2r=r*n(z(e,g,g))/2print(r.."x")end

Ungolfed:
m={"222221201222222222","421124104222214241","242221421224122222","222111210224222224","220424124421422222","214212421422224222","211122211124242241","022222242222242212","222224221112124224","222221424114224122","222244222411222122","221144121141222122","224202222241122122","242422221222212202","224242221114221422","222222221222222420","212222242222242211","242122221122222442"}
s="NorFigFlyPoiGroRocBugGhoSteFirWatGraElePsyIceDraDarFai"
function f(a,d)
    z=string.sub
    n=tonumber
    _,r=s:find(z(a,1,3))
    r=r/3
    g,_,c=0,s:find(z(d,1,3))
    c=c/3
    p=d:find("/") or 0
    e=m[r]
    _,g=s:find(z(d,p+1,p+3))
    g=g/3
    r=n(z(e,c,c))/2
    r=r*n(z(e,g,g))/2
    print(r.."x")
end

Call it with f("Grass","Water/Flying")

I think you could improve by using the value of m directly since it is only referenced once.

Unless I'm misunderstanding you, saving the access of m to e is cheaper, because e is used a couple times.

No . I mean not using m at all. Remove the line 'm=' and replace 'e=m[r]' with pasting the entire table in m's place

Ah okay, i think i understand. Do you mean something like this: e={...}[r]? Because I tried that and it is not legal :/

Yeah I meant that. I guess I'm mistaken then. Thought it would be legal

IDEOne says its not, but i might try that later on a Lua 5.3 interpreter. Thanks for the tip though :)

Tcl, 382
proc p a\ d [zlib i ...361 bytes...]

The script contains compressed data including non-UTF-8 bytes. Here is the exact script encoded in base 64:
cHJvYyBwIGFcIGQgW3psaWIgaSDFU7FugzAQ/ZU3pEuGlljqwlilibpUUVw7dEBc
Zo7jghUHI9uREiH+vUDA2NCqY2SJXDt87969XDvb5dkaXCTfSp+oxUN2QWKZjOPm
L1dlHC9RLetEnmiJPRJTSmGxOOApRSVFceAXVNVcbsOKHp/bb28nq0ZFeswtTm4+
SJBPhkiDX7nYEBmYSVijw6489l5Jx3/Dj0pIj47GWp0lXh2fN6w9R5FcdHasP1dE
HH7oMVxupkRmfpfn+lx298NOHXOADmbqKXcT9NDE1Se/dDFiRybiT7rb+Sunm1xb
0J1fwceOM/JcIoEfBaz+HVx0XHt0XjCROa/T587wvxPx7+dU4TS/wdQ1Emk41SxH
9d4+NomNyHIrilxmG3ltzU5cdKNcbmy1OhcHfCh2xMs5wzZXxuLTct6maI4varlu
YNQYvErOrBZcZlw7c2V5Y98Yx1rTrCFaU1x9xIZcblx9rbGg6Z0F7NM6TdMfXQ==

Uses the zlib command for compression.

That's not really a valid tcl script now is it?

@slebetman It's the tcl script encoded in base64.

wanna explain what it does?

Python 3 - 362
k,*l=['rm gh yi is ou ck g os ee re te as ec yc e ag rk ir'.split().index(x[2:4])for x in input().replace('/',' ').split()]
s=[[0,0.5,1,2][[(ord(m)-40)//4**q%4 for m in'RB:RRRCaYR^FVBCbQRR=.bRb2caCSR^NCSbR>Q>aVFPRVRVNRbBMabRBc]bQRfR?RQBeAERQbJRFQQVSBRNJbVB]BSRRBRR3NRVRV>VQBQRW'for q in(0,1,2)][k*18+z]]for z in l]
v=s[0]*(s[1:]or[1])[0]
print(str(v//1+v%1)+'x')

Input format is the move type and the Pokemon type, separated by spaces. For example Fire Grass, or Water Steel/Electric.
The table is stored is a string where each character's index is in the range 40 to 103 and represents 3 type combinations. The list of types is stored as the 3rd and 4th (if it exists) characters of each type, which are compared to the 3rd and 4th characters of each entered type.

I think you can shave a few characters off by using 'rmghyiis...'.find(x[2:4])//2 instead of "rm gh yi is ...".split().index(x[2:4])

Oh, that doesn't work for the bare e and g characters.... perhaps three letter prefixes could be used and you'd still have some savings from .find(...)//3 versus .split().index(...)

Neat, but I don't think it follows the input rules? The rules seem quite specific about requiring the / between the two types for dual typed Pokemons, e.g. Steel/Electric.

Oh, I missed that. It now accepts the proper input format.

PHP, 426
eval('f('.fgets(STDIN).');');
function f($a,$d){
    $x=1;$r=array_fill_keys(explode('/',$d),$a);
    while(list($d,$a)=each($r)) {
        $x*=substr(gmp_strval(gmp_init('26gXl6oUL8Ekoey31DRp2k1Jq85b0G3f1PsFPfEnL1P6Bxh4vSloX8zWWa4XPBAGavHMKLgaGhPp2JPA3qQI3L9kkQ4kSHvu2vm76aLpJmu6TV8qcPTO0hchrLRh6G9',62),5),n($a)*18+n($d),1)/2;
    }
    echo$x.'x';
}
function n($p){return strpos('NorFigFlyPoiGroRocBugGhoSteFirWatGraElePsyIceDraDarFai',substr($p,0,3))/3;}

Sample input:
"Ground", "Fire"
"Normal", "Rock/Dragon"
"Fighting", "Ghost/Steel"
"Steel", "Water/Steel"
"Ice", "Dragon/Flying"
"Water", "Ground/Water"
"Ghost", "Ghost"

Sample output:
2x
0.5x
0x
0.25x
4x
1x
2x


text:
How bold is this post?
Preamble
In Stack Exchange markdown, we use ** to bold out text. For example, this markdown:
The **quick brown fox jumps over the lazy** dog.

Renders as:

The quick brown fox jumps over the lazy dog.

Of course, we use ** to close boldness as well. So less of the answer will be bold. For example:
The **quick** brown fox jumps over the **lazy** dog.

Renders as:

The quick brown fox jumps over the lazy dog.

However, if the boldness is not closed, it renders as not bold:
The **quick brown fox jumps over the lazy dog.

Renders as:

The **quick brown fox jumps over the lazy dog.

If the text has a single backslash \, the boldness does not take effect, either:
The \**quick brown fox jumps over the lazy dog.**

Renders as:

The *quick brown fox jumps over the lazy dog.*

Trailing white space results in unbolded text (note, the white space after brown is a single tab):
The** quick** brown fox jumps over the lazy dog.**

Renders as:

The** quick** brown fox jumps over the lazy dog.**

We can also use __ for bold, too, but note that only one can be active at a time. Here's a more complicated example:
The __quick**__ brown **fox__ jumps** over__ the__ lazy **dog.

Renders as:

The quick** brown fox__ jumps over__ the__ lazy **dog.

The question:
Write a program or function that, given ASCII text either as an argument or on STDIN, where the only special characters are **, __, \ (for escaping) and trailing whitespace, determines how many bold characters there are. This value should be printed to STDOUT or returned from your function. You do not need to support very long strings; String length is guaranteed to be no more than \$30{,}000\$, which is the limit for a Stack Exchange post.
Fine print:

Can I throw an exception / other error for one case, and return normally for the other?

No. It must be either a clear, unambiguous, non errored return value for both cases. STDERR output will be ignored.

Are spaces in between words considered bold?

Yes. **quick brown** has 11 bold characters in it.

Should the \ in \**, if bold, be counted?

No. It renders as **, so if it should be bolded it would only be 2 characters.

Be completely clear: what do you mean by how many characters?

Total characters that would render bold. This means that ** is not rendered if it transforms text, but it is rendered if it does not.
Note that it's possible to make ** be bolded in several ways, e.g. **\**** -> **.
Don't consider the possibility that some text could be converted to italics. The only markdown rule to consider is * = bold.**

On Stack Exchange, HTML Bold works too. i.e. <b></b>

Yes, I am aware. Don't consider this case, this is normal text.

What about HTML entites? e.g. < -> <

These also should be considered as normal text, there is no HTML entity conversion.

I've thought of an example you didn't cover above!

The rules function exactly as if the text were posted on Stack Exchange, in an answer (not a comment), except that code blocks are not considered special characters. Both the four space type and the backtick type. If you are not sure about how text should be rendered, just throw it into an answer box somewhere as a test, those are the rules you should follow.

Examples:
Input:
The **quick brown fox jumps over the lazy** dog.

Output:
35

Input:
The **quick brown fox jumps over the lazy dog.

Output:
0

Input:
The __quick**__ brown **fox__ jumps** over__ the__ lazy **dog.

Output:
18

Input:
The __quick\____ brown fox **jumps over\** the** lazy \**dog.

Output:
23

Input:
The****quick brown fox****jumps over **the****lazy** dog.

Output:
11

Standard Loopholes are banned.

Is 18 correct for the third test case?

@BetaDecay It's 7 + 11. What do you think it should be?

I've been getting 28... I'll look over my program

@BetaDecay **fox__ jumps** terminates that particular bolding.

The question seems to suggest that \** or \__ are three-character escape sequences, but in StackExchange there are only two-character escape sequences \* or \_. So \***a** produces an asterisk followed by a bold a. There is also another escape, \\ . Should we handle that one?

@feersum In my fourth example, notice the text does not get italicized, even on the real markdown engine. Note that \****a** doesn't produce any bolded text. Bottom line: if I haven't covered it in the question, the behavior should be "as stack exchange does it". See my last bullet in the fine print.

What if there's no text in between the delimiters? Like ****?

@kirbyfan64sos Added an example for you

Are libraries allowed?

@vihan Standard loopholes are banned, obviously.

I can't seem to figure out some of the rules for mismatched numbers of asterisks. For example, I have no idea why x***x** doesn't display *x in bold like ***x** does. x**x** does show the one x in bold, so it's not just that any character before the **s makes it not work.

@Blckknght's example (x***x**) is very interesting: it renders differently in an answer (0 bolds) than it does in a comment (1 bold x)

@Blckknght This just proves how insane these markdown rules are. I edited to clarify that it's the "answer" way, not the "comment" way.

rs, 107 bytes
\t/
(?<!\\)((\*|_){2})((?=\S)(?!\2)(\\\2|.)*?)?(?<=\S)\1/(\n)^^((^^\3))\3
\\(\*|_)/\t
[^\t\n]/
\n/_
\t_?/
(_*)/(^^\1)

Live demo and test cases.
This is a pretty crazy...thing.
The newest test case does not work yet. WIP...
Explanation
\t/

Replace tabs with spaces. They have the same character count, and tabs are used later on as a special character.
(?<!\\)((\*|_){2})((?=\S)(?!\2)(\\\2|.)*?)?(?<=\S)\1/(\n)^^((^^\3))\3

Replace any text of length N that should be bolded
with N newlines followed by the original text.
\\(\*|_)/\t

Replace any occurrences of a delimiter immediately preceded by a slash with a tab. This is to make sure that entries like **a\*** have a character count of 2 instead of 3.
[^\t\n]/

Remove any character that's not a tab or newline.
\n/_

Replace all the newlines with underscores.
\t_?/

Remove any tabs (which represent escaped delimiters), along with any underscores that may follow them. This is related to the above issue of character counts with escaped ending delimiters.
(_*)/(^^\1)

Replace the underscore sequence with its length. This is the character count.

**a****b** outputs 2, it should be 6. See: a****b

@durron597 I'm slightly confused as to how that's supposed to work. Could you add an explanation?

Like I said, just play around with it in an answer pane. **** is always just asteriks, which can be inside a bold or not inside a bold based on the other text.

So, @kirbyfan64sos, how bold is the post?

Python: 133 characters
import re
f=lambda s:sum(len(x[0])-4for x in re.findall(r'(([_*])\2\S.*?\2\2+)',re.sub(r'([_*])\1\1\1','xxxx',re.sub(r'\\.','x',s))))

This should work identically in both Python 2 and 3. The function f returns the number of bold characters that will be in the string it is passed when formatted by Stack Overflow's markdown system.
I think I get most of the corner cases right (including all the ones mentioned in comments so far), but its still not entirely perfect. I don't understand why x***x** doesn't render the *x in bold (like ***x** does), so my code will get at least a few inputs wrong.
The code has four main steps. The first does a regex replacement of any  backslash followed by any character with an 'x' character. The second step replaces any sequence of four asterixes or underscores with four 'x' characters. The third step uses a regex findall to find all the blocks that will be italicized. The final step is a generator expression inside a sum call, that adds up the lengths of those blocks, subtracting 4 characters from each, since we don't want to include the delimiters in our count.
Here's some test output:
>>> f('The **quick brown fox jumps over the lazy** dog.')
35
>>> f('The **quick brown fox jumps over the lazy dog.')
0
>>> f('The \**quick brown fox jumps over the lazy dog.**')
0
>>> f('The** quick** brown fox jumps over the lazy dog.**')
0
>>> f('The __quick\____ brown fox **jumps over\** the** lazy \**dog.')
23
>>> f('The****quick brown fox****jumps over **the****lazy** dog.')
11
>>> f('\***a**')
1
>>> f('x***x**') # this one doesn't match the Stack Overflow input box
2

I have no idea why x***x** doesn't work in the input box. Bizarre

JavaScript ES6, 91 bytes
s=>(o=0,s.replace(/\\(.)\1/g,'..').replace(/(\*\*|__)(?=\S)(.*?\S)\1/g,l=>o+=l.length-4),o)

Deals with all escapes before hand, then uses a regular expression. Lots of golfing potential.
Explanation
s=>( // Function with argument s
  o=0, // Set var "o" to 0
  s.replace( // Replace...
    /\\(.)\1/g,  // Matches \ followed by two the same characters. g means "global"
    ".." // Replace with two arbitrary characters
  ).replace( // Replace again...
     /(\*\*|__) // Match ** or __, store in "group 1"
       (?=\S)   // Make sure next character isn't whitespace
       (.*?\S)\1  // Match all characters until "group 1".
                  // Make sure last character isn't whitespace
     /g, l=> // Take the match...
       o+= // Increase o by...
         l.length // the length of the match
         - 4 // minus 4 to account for ** and __
  ), o) // Return o

For **a*b*c** this returns 9, which I believe is incorrect. The real count is 5 (or 3, if you take italics into account, which according to OP you should not).

05AB1E, 115 bytes
'•Ë™I'\„\\.:'"„\".:’RŽ½™«.©Ì~r/’D’ÿ(\*\*|__)(?=\S)(.*?\S)\1/,(ÿ\\(.)\1/,"ÿ",".."),fn a->ÿ.àÉ"ǝ",(ÄÁ_„¬ a)-4„–’.E'ǝ¢

Try it online! This code abuses the fact that input is guaranteed to be ASCII, as it replaces bold characters with ǝ, then counts the number of ǝs in the output. If there were any ǝs in the input, they would get counted as bold characters, but it is unnecessary to handle non-ASCII characters according to this rule:

Write a program or function that, given ASCII text either as an argument or on STDIN, where the only special characters are **, __, \ (for escaping) and trailing whitespace, determines how many bold characters there are.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/

sort: votes


text:
Plot a hyperbolic plane tessellation
Make a plot (Poincare disk) of a tessellation on a hyperbolic plane, such as:

The program takes four inputs:
1) How many edges/polygon (three in this example).
2) How many intersect at each vertex (seven in this example).
3) How many steps away from the center vertex to render (5 in this example, if you look closely). This means that a vertex is included iff it can be reached in 5 or less steps form the center. Edges are rendered iff both their vertexes are included.
4) The resolution of the image (a single number of pixels, the image is square).
The output must be an image. Edges must be rendered as circle-arcs, not lines (the Poincaré disk projection turns lines into circles). Points do not need to be rendered. When the user puts in something that is not hyperbolic (i.e. 5 triangles meeting at each vertex), the program does not have to work properly. This is code-golf, so the shortest answer wins.

Made more clear.

Much clearer now :)

It's implicit, but it might be better to make it explicit that a) the Poincaré disk model should be used (unless you're also open to half-plane model answers); b) a vertex should be rendered in the centre of the disk, and not the centre of a polygon.

Must a vertex lie at the centre of the disk?  Or can the centre of the disk be the centre of a polygon?

This really needs more background info. I've looked at a couple of sites (there are none mentioned in the question) and I cannot figure out the exact specification for drawing the example figure, let alone the general case. If it isn't specifed you may get invalid answers that people have worked hard on (for example I understand the non-radial lines are represented as arcs of circles, but someone might take a shortcut and do straight lines.) Also, it seems the edgelength of the lines from the centre vertex (as a percentage of circle radius) needs to be specified.

Are number of edges in each vertex and the number of edges of each face independent?

steverrill: the Poincaré disk is a specific definition, but I made sure to specify that edges must be circles. flawr: Yes, but certain combinations are not hyperbolic.

I see you've specified that the edges have to be arcs now, but you haven't addressed my other points: There's still not enough information in the question to define a what is valid output (and nor is there any indication of where to find it). Voting to close (I see I'm not the first). It's a pity because I like the idea of the question.

Here's a pretty cool demonstration if you want to look.

From the wikipedia page on uniform tilings in the hyperbolic plane, it appears that the "standard" way of showing these tilings is with a polygon in the center. Like in the Mathematica answer given already. Could you update the question to ask for this?

Maybe it is more standard, but it is a bit late to update the question, and its good that the "stock" examples need to be modified.

What if the number of pixels isn't a square number?

@LevelRiverSt regarding "Also, it seems the edgelength of the lines from the centre vertex (as a percentage of circle radius) needs to be specified." - no, there's only one  length that works for a given p,q: it's sqrt(1 - sin^2(pi/q)/cos^2(pi/p)).

Mathematica, 2535 bytes
Taken from here (hence why it's community wiki). Not really that golfed. View the provided link for the author's explanation of his code.
Also, I'm no Mathematica expert, but I bet Martin could do wonders on the code length. I don't even understand the math behind it.
I left it readable, but if the question doesn't get closed, I'll golf it past readability and move the 2 other parameters inside the caller function.
Currently invalid, feel free to help improve it:

I think this uses lines rather than arcs.

Centered on a face, rather than a vertex.

HyperbolicLine[{{Px_, Py_}, {Qx_, Qy_}}] :=
 If[N[Chop[Px Qy - Py Qx]] =!= 0.,
  Circle[OrthoCentre[{{Px, Py}, {Qx, Qy}}],
   OrthoRadius[{{Px, Py}, {Qx, Qy}}],
   OrthoAngles[{{Px, Py}, {Qx, Qy}}]], Line[{{Px, Py}, {Qx, Qy}}]]

OrthoCentre[{{Px_, Py_}, {Qx_, Qy_}}] :=
 With[{d = 2 Px Qy - 2 Py Qx, p = 1 + Px^2, q = 1 + Qx^2 + Qy^2},
  If[N[d] =!= 0., {p Qy + Py^2 Qy - Py q, -p Qx - Py^2 Qx + Px q}/d,
   ComplexInfinity]]

OrthoRadius[{{Px_, Py_}, {Qx_, Qy_}}] :=
 If[N[Chop[Px Qy - Py Qx]] =!= 0.,
  Sqrt[Total[OrthoCentre[{{Px, Py}, {Qx, Qy}}]^2] - 1], Infinity]

OrthoAngles[{{Px_, Py_}, {Qx_, Qy_}}] :=
 Block[{a, b, c = OrthoCentre[{{Px, Py}, {Qx, Qy}}]},
  If[(a = N[Apply[ArcTan, {Px, Py} - c]]) < 0., a = a + 2 \[Pi]];
  If[(b = N[Apply[ArcTan, {Qx, Qy} - c]]) < 0.,
   b = b + 2 \[Pi]]; {a, b} = Sort[{a, b}];
  If[b - a > \[Pi], {b, a + 2 \[Pi]}, {a, b}]]

Inversion[Circle[{Cx_, Cy_}, r_], {Px_, Py_}] := {Cx, Cy} +
  r^2 {Px - Cx, Py - Cy}/((Cx - Px)^2 + (Cy - Py)^2)
Inversion[Circle[{Cx_, Cy_}, r_, {a_, b_}], {Px_, Py_}] := {Cx, Cy} +
  r^2 {Px - Cx, Py - Cy}/((Cx - Px)^2 + (Cy - Py)^2)

Inversion[Circle[{Cx_, Cy_}, r_, {a_, b_}], p_Line] :=
 Map[Inversion[Circle[{Cx, Cy}, r], #] &, p, {2}]

Inversion[Circle[{Cx_, Cy_}, r_, {a_, b_}], p_Polygon] :=
 Map[Inversion[Circle[{Cx, Cy}, r], #] &, p, {2}]

Inversion[Line[{{Px_, Py_}, {Qx_, Qy_}}], {Ux_, Uy_}] :=
 With[{u = Px - Qx,
   v = Qy - Py}, {-Ux (v^2 - u^2) - 2 u v Uy,
    Uy (v^2 - u^2) - 2 u v Ux}/(u^2 + v^2)]
Inversion[Line[{{Px_, Py_}, {Qx_, Qy_}}], p_Polygon] :=
 Map[Inversion[Line[{{Px, Py}, {Qx, Qy}}], #] &, p, {2}]

Inversion[Circle[{Cx_, Cy_}, r_], c_List] :=
 Map[Inversion[Circle[{Cx, Cy}, r], #] &, c]

PolygonInvert[p_Polygon] :=
 Map[Inversion[HyperbolicLine[#], p] &,
  Partition[Join[p[[1]], {p[[1, 1]]}], 2, 1]]
PolygonInvert[p_List] := Flatten[Map[PolygonInvert[#] &, p]]

LineRule = Polygon[x_] :> Line[Join[x, {x[[1]]}]];
HyperbolicLineRule =
  Polygon[x_] :>
   Map[HyperbolicLine, Partition[Join[x, {x[[1]]}], 2, 1]];

CentralPolygon[p_Integer, q_Integer, \[Phi]_: 0] :=
 With[{r = (Cot[\[Pi]/p] Cot[\[Pi]/q] - 1)/
     Sqrt[Cot[\[Pi]/p]^2 Cot[\[Pi]/q]^2 - 1], \[Theta] = \[Pi] Range[
       1, 2 p - 1, 2]/p},
  r Map[{{Cos[\[Phi]], -Sin[\[Phi]]}, {Sin[\[Phi]], Cos[\[Phi]]}}.# &,
     Transpose[{Cos[\[Theta]], Sin[\[Theta]]}]]]

PolygonUnion[p_Polygon, tol_: 10.^-10] := p
PolygonUnion[p_List, tol_: 10.^-10] :=
 With[{q = p /. Polygon[x_] :> N[Polygon[Round[x, 10.^-10]]]},
  DeleteDuplicates[q]]
HyperbolicTessellation[p_Integer, q_Integer, \[Phi]_, k_Integer,
  t_: 10.^-10] :=
 Map[PolygonUnion[#, t] &,
   NestList[PolygonInvert, Polygon[CentralPolygon[p, q, \[Phi]]],
     k][[{-2, -1}]]] /; k > 0

HyperbolicTessellation[p_Integer, q_Integer, \[Phi]_, k_Integer,
  t_: 10.^-10] := Polygon[CentralPolygon[p, q, \[Phi]]] /; k == 0
HyperbolicTessellationGraphics[p_Integer, q_Integer, \[Phi]_,
  k_Integer, rule_RuleDelayed, opts___] :=
 Graphics[{Circle[{0, 0}, 1],
   HyperbolicTessellation[p, q, \[Phi], k, 10.^-10] /. rule}, opts]

Called like:
HyperbolicTessellationGraphics[7, 3, 0., 5, HyperbolicLineRule, ImageSize -> 100, PlotLabel -> "{7,3}"]
HyperbolicTessellationGraphics[3, 7, 0., 7, HyperbolicLineRule, ImageSize -> 300, PlotLabel -> "{7,7}"]

This looks like the ultimate wall of text. +1

@kirbyfan64sos Yeah, deciphering this is a beast. I'm pretty sure there's only a few changes necessary to make it arcs instead of hyperbolic lines. Also, changing the functions/parameters to single-char names would reduce the size by a lot.

This is invalid, as it is centred on a face, not a vertex. But the original link does at least give some kind of definition of what is to be done here.

I was wondering if it was lines or arcs. It's hard to tell at this low resolution, but they actually might be arcs, just not very... arcy. For example, it looks like the line on the right side of the central polygon is slightly bent to the inside.

@RetoKoradi It's entirely possible, and may be a side-effect of having the image centered on the face, rather than a vertex. Idk. Check out the LineRule and HyperbolicLineRule for the relevant lines.

I cannot get your code to run on Mathematica 10.2.  By the way, if you reduce the number of  sides on the polygon, you should see arcs.

The original code works.  Yours appears to have suffered when you cut and pasted. (It's unlikely that it was mine since I only had to cut and paste once.)

I have another approach, based on another person's code, that I've been able to pare down to 1100 bytes.   But, once golfed, the code becomes indecipherable. I believe the same would happen if we golf your submission.  At the moment, I am trying to understand how they work in verbose format.

JavaScript/HTML/SVG, 5086 bytes
Not golfed, but the logic/math is short and hopefully relatively clear; also does the planar and spherical tessellations ((p-2)*(q-2) <= 4) without too much extra logic (it was easier to implement those than to leave gaps in the table!).
The calling code in the snippet below calls the function several times: first to display the 512x512 {3,7} picture (not shown here; it looks just like the above), and then to display a 128x128 {p,q} (meaning q p-gons surround each vertex) for each p,q from 3 to 9:

<!DOCTYPE html>

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
The spoak laugh generator
The spoak laugh
For those who don't know, in Brazil some people laugh on chats like this: aposkpaoskaposkaposkpaokspaoskpaoksa.
So here is the challenge: To make a program that generate this laugh in a natural way.
How to produce this laugh programatticaly?
When you laugh like this, you use one hand on the (a, s) part of the keyboard and the other on the (k, o, p)  part, randomly hitting the keys on both parts, alterning keys and parts.
I will put some laughs here for you to analise.

apsokaposkaposkaposkaposkaposkaposkaposkpaoskaposkpaoskaposkapsokaposkaposk
paoskpaoksaposkaposkaposkaposkaopskaopskaopskpaoskpaoksapokspaoskapsokapsok
aposkaposkpaoskpaoskaposkpaokspoakspaoksopaksopaskpaoskaopskpaoskapsokpasok
paoskpaoskaposkaposkapsokaposkaposkapsokaspokaspoksaposakposakaposkaspokaso
paoskpasokaspokapsokaspokaposkapsokaposkaspokaposkaspoksapaoskpasoksaopksao

You have to study this pattern and produce it on your code.
What makes a valid spoak laugh?

In the spoak laugh, a letter ALMOST NEVER repeat twice in a row. So this is mandatory.
Spliting you string on the k, for example, in this javasript: generated_string.split('k') has to produce a list of various substring ranging from 1 to 6 of length (more on this later) and with distance of same letter of minimum 3. Example: ['spaos', 'asopa']. In both cases the first letter repeats on the substring, but appears with distance of 3 from the repetition..
There is no restriction to what character should be first or last in each laugh.

Order of the substrings:
On a human written spoak laugh of 521 characters, this stats were observed:
Counter({'apos': 30, 'paos': 20, 'apso': 11, 'sapo': 9, 'paso': 6, 'saposa': 6,
'psao': 4, 'sapoa': 3, 'aspo': 2, 'sopsa': 2, 'saop': 1, 'spo': 1, 'opas': 1, 'p
oas': 1, 'sapoas': 1, 'aops': 1, 'sa': 1, 'aspos': 1})
We noticed that:

the top 4 are apos = 30, paos = 20, apso = 11 and sapo = 9
...followed by paso and saposa both with 6

This means that when breaking the substrings the most occurrences are: apos and paos on 1st and 2nd, followed by paso, sapo, apso and saposa in any order, then any other combination, following the other rules.
Number of characters of each substring
The substrings produced should respect this proportion on a 500 characters spoak laugh:

1 char = at least 1%
2 char = at least 1%
3 char = at least 6%
4 char = at least 70%
5 char = at least 6%
6 char = at least 1%

Validate you laugh on-line.

Enter http://www.filipeteixeira.com.br/spoak_validator to validate your generated laugh.
Submit 10 laughs of 500 length each, separated with a semicolon (;).
If you laughs are valid, post you code and the generated link here.

But is this the best way to produce a paoskpaoskaposkpasokaposk laugh?
There would be other ways to produce it, but with rapid observation of pattern and statistics, we will stick to these heuristics.
Who wins?
Shortest code wins.
Have fun, paoskpaoskpoaskpaoskpsao :D

aposkpaoskaposkaposkpaokspaoskpaoksa what a fun question :D

Your validity conditions are too subjective for code golf.

Relevant.

xnor, I don't know what you mean with too broad. Could it be opened again if I post a program to validate the answers? or if I change it to popularity contest.

Yes, precise validation conditions would make OK. I'd suggest that over popularity contest.

xnor, check it now

The requirement that splitting on ks should give substrings of length 1 to 5 directly contradicts the requirement that at least 1% of those substrings should be of length 6. And the bit about statistics is a bit vague on what "similar statistics" means.

My bad, I forgot to edit "1 to 5" to "1 to 6" before. I think I was pretty clear about statistics. The number of occurrence of substrings should follow:
apos, paos, then [paso, sapo, apso and saposa] in any order then the others

When you say that a letter almost never appears consecutive to itself and that it's mandatory for us to replicate this, does that mean it should never happen or that it can but the probability of it happening should be small? If the latter is the case, how small is small?

The probability is so small that we assume it will never happen. Write aposkpaoskpaosk on you keyboard and check if it happens. It almost never happen, so if we replicate with no repeating it should mimic the laugh with 99,99999999999999% accuracy.


text:
Print This Question ↓
The basic idea of a kolmogorov-complexity challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from Borromean Rings to The Gettysburg Address.
##Your Task
This question is similar, except that it requires printing of a special text - the text of this question. Specifically, the very Markdown code that I am typing right now.
To prevent an infinite recursion in the question, the exact text you have to print can be found here.
##Clarifications

You are not allowed to use any external sources like the internet.
This means that the purpose of this question is not to download this question text and parse it, but instead to store it in you program.
This is code-golf, so shortest code in bytes wins!

Let this be a reminder not to edit this post. Ever. Or we're all screwed.

@ETHproductions I'm editing it right now before any answers come in with Geobits' link. Let's hope I never have to again.

Curious: How did you find the revision link for your last edit before you actually made the edit?

@DankMemes There's a 5 minute grace period in which you can make more edits without adding a separate revision.

For the record, the full text is 1059 bytes long, including newlines.

"but instead to store it in you program" Are you sure you don't want to fix that typo? :D

@mbomb007 it's not a typo, it's a feature.

@ETHproductions For the record, following the view source link I find 1055 bytes

Compression encoding removes all the fun of such kind of questions! :(

@ETHproductions Five years after your comment, the Community bot's now modified this question and added 2 spaces. We're all screwed now.

@user *sigh* community doing this once again :p rolled back

@hyper-neutrino is there a way to prevent this from happening?

@BenjaminWang Unfortunately not. Locking the post for content dispute to prevent editing also prevents new answers from being added. I can only keep an eye on it and change it back if anyone / Community ever messes with it

Bash, 608 597 bytes
0000000: 74 61 69 6c 20 2d 6e 36 20 24 30 7c 7a 63 61 74 0a  tail -n6 $0|zcat.
0000011: 1f 8b 08 00 00 00 00 00 00 00 95 93 d5 b6 e3 3c 0c  ...............<.
0000022: 46 ef fb 14 fa 71 a8 2e f7 d0 d5 30 33 f3 8c 9a 28  F....q.....03...(
0000033: 89 57 13 2b c7 56 0a 6f 3f 56 3d cc 53 6e ec 6c 69  .W.+.V.o?V=.Sn.li
0000044: ed 4f 7e 58 11 2c 30 d8 0c 6c 4e 08 5c 00 c2 0b c1  .O~X.,0..lN.\....
0000055: f2 68 c9 75 c3 25 7b 5e 99 8c 9b b6 a6 8d 95 ed 2b  .h.u.%{^........+
0000066: c8 2a ac 6b 72 25 81 0d 20 0c ad b7 4e 00 21 90 00  .*.kr%.. ...N.!..
0000077: 77 d2 76 02 d6 81 44 6a a8 d8 0b 05 81 8c 73 82 93  w.v...Dj......s..
0000088: 52 71 57 56 71 05 05 1a 42 67 5d 09 15 06 05 46 5a  RqWVq...Bg]....FZ
0000099: 0e 8e d7 a7 06 f0 84 a0 c2 95 7e e4 d0 a0 db 02 17  ..........~......
00000aa: 0a 6b fa 50 78 6e e0 c5 79 f6 9e f5 76 b8 1f 01 e1  .k.Pxn..y...v....
00000bb: d5 c9 4a a4 3d 1a 0e b5 46 c9 75 31 08 82 d9 92 36  ..J.=...F.u1....6
00000cc: 89 3a 88 9d 0f 8f 3b 0a 62 d9 85 e1 7c 3a 1b ef 0f  .:....;.b...|:...
00000dd: 31 64 d6 9a c5 07 90 f1 0a 3a 05 c2 f0 42 65 5c 21  1d.......:...Be\!
00000ee: 91 6d 58 74 be 84 73 79 ee 29 fc 61 91 f1 7c 7a 38  .mXt..sy.).a..|z8
00000ff: 1f 56 bc 36 1e 5d ce 8d b1 c1 48 45 a6 fc c8 35 98  .V.6.]....HE...5.
0000110: b8 a7 06 bd de 3f ff 3c e3 ce c3 43 0c cb 5e ef 61  .....?.<...C..^.a
0000121: 15 9d 7e 20 a9 df 60 1b 5b a3 ef 43 ac 45 ad 24 79  ..~ ..`.[..C.E.$y
0000132: 56 c0 d3 71 67 23 22 d9 8f fd a7 dc 42 4b 99 c5 1a  V..qg#".....BK...
0000143: 84 36 02 46 bd a5 9f ea f0 73 f4 00 1e e8 ce c2 66  .6.F.....s......f
0000154: 31 cb 6d 7f b7 71 45 7e 0b b7 d0 2f 73 5e bb 14 d9  1.m..qE~.../s^...
0000165: ae da 35 c0 06 64 db 6a 11 6f cb 4a 34 a8 41 ec 55  ..5..d.j.o.J4.A.U
0000176: a3 a7 15 69 f8 0e ac 2b ac b3 42 e0 29 eb 7c d0 f6  ...i...+..B.).|..
0000187: d3 14 7c ac 99 aa d0 06 33 49 4d 6d b9 4b 51 7f 1c  ..|.....3IMm.KQ..
0000198: a2 2c 82 16 04 05 77 2e 87 17 15 79 fa 1d f3 b1 09  .,....w....y.....
00001a9: 1b 92 f9 62 7f 3a 26 9c 9a d1 e1 7c 64 66 8b d1 d4  ...b.:&....|df...
00001ba: 20 1d ce cd 64 56 e0 c1 78 82 87 38 39 18 ae 2c ad   ...dV..x..89..,.
00001cb: 4d 88 ce 33 4a fe 2f 44 c1 3b 15 a2 90 5e cf 40 4c  M..3J./D.;...^.@L
00001dc: 04 d0 13 38 16 88 82 78 4d b9 36 d9 05 02 9d c8 d8  ...8...xM.6......
00001ed: 3c 79 17 35 27 4a 80 da 2e 55 16 81 75 ba 42 32 88  <y.5'J...U..u.B2.
00001fe: 10 cd 72 37 e7 21 79 d4 f5 b6 f3 2d 07 fa 26 0f b0  ..r7.!y....-..&..
000020f: 41 8b 69 11 b5 5f 33 e6 5f 6e 48 c6 30 6a 69 d1 47  A.i.._3._nH.0ji.G
0000220: 80 95 3e 2c 76 27 2d 08 e9 66 86 20 ec 75 41 bd ab  ..>,v'-..f. .uA..
0000231: da d6 73 e9 b1 f9 d8 8a 0d e9 58 ab 49 a3 2a 5f f5  ..s.......X.I.*_.
0000242: 21 f0 97 87 54 ef 3d 7d 7a b1 15 0a a7 4f c3 3a d2  !...T.=}z....O.:.
0000253: ff 7a                                               .z

The above is a reversible hexdump. To create the file, execute
xxd -r -c 17 > 55857.sh

paste the hexdump and press Enter, then Ctrl + D.
To run created file, execute
bash 55857.sh 2>&-

Any other filename that contains no whitespace, doesn't start with a dash or contains shell expansion characters (e.g. *) will do.
I chose zopfli as the compressor since it is compatible with the Coreutils program zcat and achieves better compression than gzip, bzip2 and xz.
tail -n6 $0|zcat reads the last six lines of the source file and pipes them to zcat. The following lines are full of syntax errors and produce no output.
Note that zcat will print a warning (since I stripped the checksum of the compressed file), as will bash (because of the syntax errors). These warnings are printed to STDERR (suppressed by 2>&-), which is allowed by default per consensus on Meta.

b-b-bashhh... ?

Javascript (ES6), 977 964 902 bytes
Used the find-and-replace method to save 95 bytes overall, then converted the entire program to Base64, which saved another 62. (Converting the entire thing took me two whole hours!)
eval(btoa`k23\r8^ù¶¬Ï¢uæ¾¡ÿVJ%(®óÝÊ&¦W±Ü³ãç!jY^¾Ãù¯¬zß¨ºÚn·è§6Èh®×¬·ç(uï³æØhº~¶úg)àú¬ùÈZúz0Ï¬ûùg¾«Þúúf§ËêúØ^?>~º&û=A/äb'þwã^ÿjÇ"=Û/=ëx,Ï£³Õ8^øb¾×kzË'ýyßÞ3Þ¶§v³Þ+3ÞØ^Ïx
Ïvv·¬³>³íÀÌ(º¿jÉLO¢³ë")Z¯?>{¦ß«~ß«z«¢ë>>)àúþkë)yÈ\\÷úØ^þ´Lûù*^r'âq©eË?\r½êòøÆ«Ú0ç(uï«~#æ¦úÜ©x>®(!·éèÃ>ÐN©ëÞßè§~)âµï«yË«²*'ú)Í'?\r{´\\¨»èZ½ãùÆ§ù·¾~§wìõêÞ·¯È¨Ïõ½õyóßOyÓ=øoMóÝ§½ç=öáö¼×f½ko?¾'°Ï{(º·Ï¬ûC03\0)Z®'âq«b¢{Ï¢ïï§¢ßZ0yÓ®±ï/Æ×«©~²«që>)6)íz¹Þ´yj{>¶6«¦úþ´O¢³éè´çhÂyhißV§wêZ®Ç¾Üüù»ú)ìµæ:Ëhï¢·è§û*.úè¶¦+r^Ïx(üøÏÏ¬£ë!¢»^²ß¡×¾³0[Ê×¬ÌÁû§³0³?3×>óï>ÜÌÉ@14ãÕÌøÏ¹§>qÌÊk2ÏºÞ¦V{>^½©sç0ÿÌ\\ÆÇ1ÿ0óë?3?sõøÏm¶öÿ÷(uè(üû²Öì\\©à{>Ü¢oÙ+>%{~g>ó÷=þN¬ù®zËb¢v^¶Ü¬nêàfë¢gïúÚ>fâÖ~Ï[Z=³>ì¦XÌ6s=\\Ï¸§uìN>qÏ¬øÏ¬úÏÆ¥z»så¬ú`.replace(/z(.)/g,y=>' [:-]().,\r#*!`\\${}=\'>'[parseInt(y[1],36)]).replace(/\+/g,' '))

There are a ton of unprintable characters in this, so here's the raw data: http://pastebin.com/FR6Ah0ZL
And the original encoded text:
a=`The basic idea of aVkolmogorov-complexity] challenge isOP a set output inNshortest code (though that meaning has changed now). We have had many of them, from [BL Rings](DJ/53417/ascii-bL-rings)O[The GK Address](DJ/15395/how-random-is-the-gK-address).Q##Your TaskQTE is similar, except that it requires Ping of a specialF- theFof tE. Specifically,Nvery Markdown code that I am typing right now.QTo prevent an infinite recursion inNJ,NexactFyou haveOP can be found [here](Drevisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).Q##ClarificationsQ- You are not allowedOuse any external sources likeNinternetHmeans thatNpurpose of tE is notOdownload tEFand parse it, but insteadOstore it in you programHisVcode-golf], so shortest code in **bytes** wins!`,[...c='QDEFHJKLNOPV'].map(x=>a=a.replace(eval(`/${x}/g`),`

Zhttp://codegolf.stackexchange.com/Zhis JZ text Z.
- This ZquestionZettysburgZorromeanZ the Z to ZprintZ [tag:`.split`Z`[c.indexOf(x)])),alert(a)

More explanation coming soon!
EDIT 1: Shaved off 13 bytes.
EDIT 2: Converted to Base64.

I may try to decode the entire program to Base64 (encoding actually increases the length a lot), but the problem with that is there are a lot of characters that are not Base64 compatible (A-Za-z0-9+/). I could replace the spaces with +, which isn't used anywhere else. Any other suggestions?

Roughly compressing with atob save 25%, so near 250 bytes in this case. There are 13 non-base64 characters in the text: " :-.,\n#*!" that can be replaced with valid base64 characters not present (many uppercase letters). Something like replace(/[\S\s]/g,c=>" [:-]().,\n#*!"['DEFHJKLNOPQUV'.indexOf(c)]||c)" That said, for some reason I did not manage to do it right.

There are a lot more replacements you can use to shave off more bytes (as in my second answer)

@edc65 Thanks for the suggestion! I used a similar technique, which I will explain in more detail later.

@ETHproductions. This answer is two years old, so I don't know if some rules were changed in meanwhile, but I think this tool can golf it to 820 bytes (and it is consistent even with ES6).

Linux Shell 843 bytes
#!/bin/sh
base64 -d <<M|zcat
H4sIAKBL5lUAA5WTQW/bMAyF7/kVHHppgyhOmgRtett2GHbYZQswDEEPtE3bQmzRlegk/vejZLTY
etoAIw4s6fHxe9ShIcgx2AJsSQhcAcJRsH46cdtxzZ7PpuCub+lqZXyGosG2JVcT2ADC0HvrRM8E
EuBB+kHAOhBVDQ17oSBQcElwKw0PdaMrKNAROutqaDBEQVUrwfHlbgk/ST+e408JHboxGlKxbgGV
5w6On9jrW4/DdxUIz7eNSP+UZbFGzW21DILFia6T6lKdZy+DmrDsQrbbbNcPGYbCWpO/Chkfhe5i
L8eD2v5CImPIB1/Dx7L0FP6zyHq32e+yhi/Goyu5MzYY7cDUb7oGJ9275Wx2c/OLBw8HDKfZ7NAo
01elyDfYzrboF6C1qJcJnhXw9DJYlZjoR5Ipt9BTYbEFoauASSGkv4nhH9JL+BF3VrbQLMdF2ngm
P8I39KeSL26KLFX7CtiBjH0s4m3dSAxKjR9i9HSmGL56dZV1VkidFYMPyf40Ba81pyp0xUImUyMP
U9RvQ1SoUE5Q8eBKODbk6V/IqwkbJvLVw2ZNuDGr/W5ltvlqY5D2O3O/rfBxfY97vH/MzpYuJijz
gib+nxVwQpHim80MaCKAnrRR7a1t+aLTqSaHQBAnUs2Td4p5UgnQ2hOl7rQJXSFZqkjKMs5XmDjG
9X7wPavK+zxi1LGYFon0W9bh/3tDIqbjBD16FbCygDzdtCCEyV0Q9nEhco9oe8+1x+7Nij7pWkeS
JqJ8XmgD7y6pnp3P81E/zOdwUfUPvwFrjlp7HwQAAA==
M

All the code in is in the second line.

base64 -d decodes base64 data from stdin
<<M directs stdin from the script itself with end-of-file at the first line containing only M
| is a pipe directing the output to
zcat a gzip decompressor that reads from stdin.
this followed by the message first gzip compressed and then base64 encoded.

Could probably be further golfed by removing line line breaks from the data and using echo instead og heardoc to store it.
I feel like I'm missing something important...

I had a PHP version of this ready to post when I saw this answer. GG WP

You should be able to save ~20 bytes, by getting rid of the newlines, and rewriting the pipeline using a herestring, like that base64 -d<<<BASE64DATA|zcat

I think Dennis found what I missed in his answer.

PHP, 812
Very naive solution. I might come up with something better later.
<?=gzinflate(base64_decode("lZNBb9swDIXv+RUcemmDKE6aBG1623YYdthlCzAMQQ+0TdtCbNGV6CT+96NktNh62gAjDizp8fF71KEhyDHYAmxJCFwBwlGwfjpx23HNns+m4K5v6WplfIaiwbYlVxPYAMLQe+tEzwQS4EH6QcA6EFUNDXuhIFBwSXArDQ91oyso0BE662poMERBVSvB8eVuCT9JP57jTwkdujEaUrFuAZXnDo6f2Otbj8N3FQjPt41I/5RlsUbNbbUMgsWJrpPqUp1nL4OasOxCttts1w8ZhsJak78KGR+F7mIvx4Pa/kIiY8gHX8PHsvQU/rPIerfZ77KGL8ajK7kzNhjtwNRvugYn3bvlbHZz84sHDwcMp9ns0CjTV6XIN9jOtugXoLWolwmeFfD0MliVmOhHkim30FNhsQWhq4BJIaS/ieEf0kv4EXdWttAsx0XaeCY/wjf0p5IvboosVfsK2IGMfSzibd1IDEqNH2L0dKYYvnp1lXVWSJ0Vgw/J/jQFrzWnKnTFQiZTIw9T1G9DVKhQTlDx4Eo4NuTpX8irCRsm8tXDZk24Mav9bmW2+WpjkPY7c7+t8HF9j3u8f8zOli4mKPOCJv6fFXBCkeKbzQxoIoCetFHtrW35otOpJodAECdSzZN3inlSCdDaE6XutAldIVmqSMoyzleYOMb1fvA9q8r7PGLUsZgWifRb1uH/e0MipuMEPXoVsLKAPN20IITJXRD2cSFyj2h7z7XH7s2KPulaR5ImonxeaAPvLqmenc/zUT/M53BR9Q+/AQ=="));

ah, yes using raw "flate" withouth the gzip wrapper saves a few bytes in the data

Bash (+ppmd), 588 bytes
This one beats @Dennis answer by 9 bytes, by utilizing the Prediction by partial matching compression, as implemented by the ppmd package (available in the official Debian/Ubuntu repositories).
Golfed (hex dump)
7461696c202d322024303e450a70706d642064204520313e262d0a6d3420
440a8fafac84a4810000f49f01005c1764584454163b8b4ebdd8f8e5852e
8649a4a01a7674929af8d6cd1d71d0758fed9551a4097e7bb3c21be619a9
ec5d7ea12677f8352b75824dc025a6c1f0b5ca6671431d03ba38e91326eb
8ea9e13a57a9607afd0ae43c8ae548ee3880197e6df9f90b4d6b45baa46b
159a15cd2993dc3f3a50d46226e301b7009174d32328bee2a7c9245a6861
779227a80ca5a016af3f08597440c86db41769b2b2b41646440eda804f9c
3b2aa70530f3080bec7acd58674a3d3b2f78f1c6674d938e415b3d07ab1e
3431a2e3165013b8251d1641f8d94be72b33aecd638d4332faa99662d848
cd5564e305b13f6ba0ccd2b105a0771ab454c417d2ebb9095291e768edde
acec556546dcf60c2cc0af962f96bb7b92d98f465bb799cd92b1b0a49a03
3261943b57a194110556ee4d39226ddfc7483ac83c6a840ba93d41ab64cf
926bbfd0423a43f7c75d73ac55d653e7de9c2d6c9508f6d371870041b133
91da72facf5b83edaf665607277384f903c1475b46e77ee58be32c6bfd5e
0eff7b206eb69b149b6649fd2f5fd933e7f8e2c61179f633551369077edb
c3de193a36f439718d0e249c04c99a88dc45ed7f4b1a8af2684d123397d9
efbca4ce93d202c7ef1f3d895fd56b655b2e34d9da1b301091e2d34e4272
342d5ea16b0973cf83dfb702009437de36f5f6292ec02aab23c3b27bb6ea
dfc40c378f61236db04dda644577114b8340ff93b65928041d8fa801f03c
abe0a89e552dc56842c5782a83992efe7200

Usage

Please take care to pre-install ppmd and m4 packages (if not installed) before running this

#Decode into "C"
xxd -p -r <<EOF>C
7461696c202d322024303e450a70706d642064204520313e262d0a6d3420
440a8fafac84a4810000f49f01005c1764584454163b8b4ebdd8f8e5852e
8649a4a01a7674929af8d6cd1d71d0758fed9551a4097e7bb3c21be619a9
ec5d7ea12677f8352b75824dc025a6c1f0b5ca6671431d03ba38e91326eb
8ea9e13a57a9607afd0ae43c8ae548ee3880197e6df9f90b4d6b45baa46b
159a15cd2993dc3f3a50d46226e301b7009174d32328bee2a7c9245a6861
779227a80ca5a016af3f08597440c86db41769b2b2b41646440eda804f9c
3b2aa70530f3080bec7acd58674a3d3b2f78f1c6674d938e415b3d07ab1e
3431a2e3165013b8251d1641f8d94be72b33aecd638d4332faa99662d848
cd5564e305b13f6ba0ccd2b105a0771ab454c417d2ebb9095291e768edde
acec556546dcf60c2cc0af962f96bb7b92d98f465bb799cd92b1b0a49a03
3261943b57a194110556ee4d39226ddfc7483ac83c6a840ba93d41ab64cf
926bbfd0423a43f7c75d73ac55d653e7de9c2d6c9508f6d371870041b133
91da72facf5b83edaf665607277384f903c1475b46e77ee58be32c6bfd5e
0eff7b206eb69b149b6649fd2f5fd933e7f8e2c61179f633551369077edb
c3de193a36f439718d0e249c04c99a88dc45ed7f4b1a8af2684d123397d9
efbca4ce93d202c7ef1f3d895fd56b655b2e34d9da1b301091e2d34e4272
342d5ea16b0973cf83dfb702009437de36f5f6292ec02aab23c3b27bb6ea
dfc40c378f61236db04dda644577114b8340ff93b65928041d8fa801f03c
abe0a89e552dc56842c5782a83992efe7200
EOF

#Run
bash C 2>/dev/null

#Cleanup
rm -f C D

Husk, 543 bytes
¨ë⁶ḂcΔȦ₀fα [ȧġ:ko¦Ṁġċov-ẋΞ1y]ŀḣË¹∫⁰ Ṗn↑a₂sẏ_†¹¬Ëβḟ…cÖ¿(σ‼Ä ẏġ¬Ȧ,χg∂ηw).ẆW√ ÷hṀẏ₀fεm,ḟm [ÿ→Ȯṁ¬¥Ż'](⁸ẋ…://cθ)£⌈g.ẋKżxχg.ςm/□os/53417/⁸ÿ:-ÿ→⁰ṁ¬-►gs)†o [ëGγ⁸?Ÿ÷D](⁸ẋ…://cθ)£⌈g.ẋKżxχg.ςm/□os/15395/ȯw-ŸṙÖ-is-´-γ⁶Ÿg-Ÿ∂Δ).¶¶##γYTψ<ıT□N¹∫₇>,ẊΠȦ…¹↑ṙṘ∫ḃρ!θ a⁹←£x -ε£x₀fı≤□N.πΓÄl,ε√Yṁ⌐÷ΦcÖ¿Ä Iαmẏẏġṙ↔Ṅ¤.¶…o□√Ėα¬ΓŸïβγx↕ε□N,ε×Ẋ3£xẏo√ †oΠN↑ċnb₃‡÷[½→](⁸ẋ…://cθ)£⌈g.ẋKżxχg.ςm/Ω∟ṡ/1f731ea3-0950-4b03-ae95-24fa812a9a28/√w-Ȯ().¶¶##Ŀ=Cσ¶¶-ẏuα→⁰tα◄₇⁰ Üu▲ΨΞẊėŻ⁵←↕Ëλ;≠.¶-ïTÄẋȦ…εṗ↑₀fı≤□N¹∫ṅ ⁰ ⌉⌋ḋṡ □,ẋ'▲∂ȷ₉'it,⁸t□ḋ≠†oȮR₃i↑↕ẏo⁹ṙ.¶-ïT¹∫[ȧġ:cθ)-£⌈g],⁵o⁶‡+□{Φ¹¬**ḃŸy**Ẇ≠s!

Try it online!
I have just revamped the compression algorithm in Husk, making it quite a lot faster. I wanted to try it on a question with a long text to compress, and here was my occasion. This took less than two seconds to compress, so I'm happy about my revamping. It's also currently shorter than any other answer to this challenge (which I realize is quite old, but I'm happy about my compression system all the same ^^).

Java (OpenJDK 8), 1055 bytes
interface T{static void main(String[]a){System.out.print("The basic idea of a [tag:kolmogorov-complexity] challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from [Borromean Rings](_%s/53417/ascii-borromean-rings) to [The Gettysburg Address_%s/15395/how-random-is-the-gettysburg-address). \n##Your Task\nThis % is similar, except that it requires printing of a special text - the text of this %. Specifically, the very Markdown code that I am typing right now. \nTo prevent an infinite recursion in the %, the exact text you have to print can be found [here_revisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source). \n##Clarifications\n- You are not allowed to use any external sources like the internet. \n- This means that the purpose of this % is not to download this % text and parse it, but instead to store it in you program. \n- This is [tag:code-golf], so shortest code in **bytes** wins!".replaceAll("_","])http://codegolf.stackexchange.com/").replaceAll("%","question"));}}

Try it online!
By using replaceAll for some of the long strings, I saved a few bytes.
Golfed 2 bytes by putting "](" before "_" into the replace part.
Thanks to FlipTack for golfing 19 bytes by taking out unnecessary whitespace and unnecessary stuff! (This was a really long time; I've learned a lot since then)
Thanks to Kevin Cruijssen for golfing off a few bytes. I'm not sure how to use string formatting to help me here, unfortunately.
NOTE: This answer is now referenced here and thus cannot be golfed anymore.

You have a lot of unneeded whitespace here. You don't gaps in T {, ) {System, "_", "]..., etc. And can't String[] args be written as String[]a?

For a shorter byte count, you could also make a function which returns the string.

You can use a Java 8 interface T{static void main instead of class T{public static void main to save 1 byte; you can change println to print to save 2 bytes; You can remove the spaces at "_", "[... and "%", "question" to save 2 bytes; You could replace print with printf so you won't need the replaceAll (not sure if, and how many this saves).

PHP, 890 bytes (no built in compression)
I promised a solution less naive than gzipping (which feels too much like cheating even though it's legal here), so here it is.
<?php @$e=explode;$s='Thzbasic ideaKEkolmogorov-compl#ity] c:llengz`Da sejQtpuj_L^(thQgh<meX6 :s chXgeHnF). Wz:vz:HmXy of{emxfrom [BO R6@53417/ascii-bO-r6s) Z[ThzGU A&@15395/hF-rXdom-is-the-gU-a&sJYQr Task

Th`} `simil+x#cept<ijPquiPs pr_t6Kspecial V-LV?. Spec>lly,Lvery M+kdFn %<I am typ6 righjnF.

To pPvenjX _f_itzPcurs; _L},L#acjVyQ :vzDcX bzfQnH[heP~Pvis;s/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-=JCl+>t;s

- YQ +znojallFeHZuszXy #$al =s likeL_$etNmeXs{atLpurposz? `nojZdFnload{`} VXHp+szitxbuj_steaHZstorzij_ yQ programN`E%-golf]xso ^_ **bytes** w_s!';$m=$e('|',', |ex|tern|code|ddPs|ar|_g|ha|ion|{aj|sQrce|ifica|of{`}|s~}s/|Zpr_j|[tag:|ow|d |).

##| of a |{z|.
- Th`|orromeX|re|ou|ettysburg|texj|an|to |shortesjcodz|in|is |t |e | th|question|](http://codegolf.stackexchange.com/');foreach(str_split('x#$%&+6:;<=>?@DEFHJKLNOPQUVXZ^_`jz{}~')as$i=>$l)$s=implode($m[$i],$e($l,$s));echo$s;

Fourier, 3359 bytes
84a104a-3a32a98ava115a105a99a32a105a-5a^a97a32a111a-9a32a97a32a91a116a97a+6a58a107a+4a-3a^a+2a-8a+8a+3a-3a+7a45a99a111a-2a+3a-4a-7a120a105a116a+5a93a32a99a+5a97a108aa-7a+9a-7a-2a32a105a115a32a116a-5a32a112a+2a-9a+5a+6a32a97a32a115a101a116a32a111a+6ava-4a+5ava32a105a+5a32a116a104a-3a32a115a104a+7a+3a+2a101a115a^a32a99a111a100a^a32a40a116a104a+7a+6a103a^a32a116a104a97a116a32a109a-8a97a110a-5a+5a-7a32a104a97a115a32a99a+5a97a110a-7a-2ava32a110a^a+8a41a46a32a87a101a32a104a97a118a101a32a104a97a+3a32a109a97a110a121a32a111a-9a32a116a104a-3a+8a44a32a102a114a-3a-2a32a91a66a111a+3aa-3a-2a-8a97a110a32a82a105a+5a-7a115a93a40a104a116aa-4a58a47aa99a111a100a^a+2a+8a-3a-6a46a115a^a97a99a+8a-6a120a99a+5a97a110a-7a-2a46a99a111a-2a47a113a+4a101a115a^a105a+6ava+5a47a53417o47a97a115a99a+6aa45a98a111a+3aa-3a-2a-8a97a110a45a114a-9a+5a-7a115a41a32a116a-5a32a91a84a104a-3a32a71a101a116aa+5a-6a98a117a-3a103a32a65a100aa114a101a115aa93a40a104a116aa-4a58a47aa99a111a100a^a+2a+8a-3a-6a46a115a^a97a99a+8a-6a120a99a+5a97a110a-7a-2a46a99a111a-2a47a113a+4a101a115a^a105a+6ava+5a47a15395o47a104a+7a+8a45a114a97a110a100a111a-2a45a105a115a45a116a104a-3a45a103a-2a116aa+5a-6a98a117a-3a103a45a97a+3aa114a101a115aa41a46a10aa35aa89a111a+6a-3a32a84a97a115a-8a10aa84a104a^a115a32a113a+4a101a115a^a105a+6ava32a105a115a32a115a105a+4a-4a+3a97a114a44a32a101a120a99a+2a112a+4a32a116a104a97a116a32a105a116a32a114a101a113a+4a105a+9a101a115a32a112a+2a-9a+5a+6a105a+5a-7a32a111a-9a32a97a32a115a-3a101a99a+6a97a108a32a116a101a120a-4a32a45a32a116a104a-3a32a116a101a120a-4a32a111a-9a32a116a104a^a115a32a113a+4a101a115a^a105a+6ava46a32a83a112a101a99a+6a-3a+3a99a97a108aa121a44a32a116a104a-3a32a118a101a114a+7a32a77a97a114a-7a-7a111a+8a-9a32a99a111a100a^a32a116a104a97a116a32a73a32a97a109a32a116a+5a-9a-7a+5a-7a32a114a-9a-2a^a116a32a110a^a+8a46a10aa84a111a32a112a+2a101a118a101a+9a+6a32a97a110a32a105a+5a-8a+3a+5a-5a116a101a32a114a101a99a117a-3a^a105a+6ava32a105a+5a32a116a104a-3a32a113a+4a101a115a^a105a+6ava44a32a116a104a-3a32a101a120a97a99a116a32a116a101a120a-4a32a121a111a+6a32a104a97a118a101a32a116a-5a32a112a+2a-9a+5a+6a32a99a97a110a32a98a+3a32a102a+9a+6a-7a100a32a91a104a-3a114a101a93a40a104a116aa-4a58a47aa99a111a100a^a+2a+8a-3a-6a46a115a^a97a99a+8a-6a120a99a+5a97a110a-7a-2a46a99a111a-2a47a114a101a118a105a115a105a+6ava+5a47a1o102a731o101a97a3o45a0o950o45a4o98a0o3o45a97a+4a95o45a24o102a97a812o97a9o97a28o47a118a105a-4a119a45a115a-4a+6a-3a99a+2a41a46a10aa35aa67a108a97a114a-9a-3a+3a99a97a116a105a+6ava+5a10aa45a32a89a111a+6a32a97a114a101a32a110a^a+5a32a97a108aa+3a+8a101ava32a116a-5a32a117a-2a101a32a97a110a121a32a101a120a-4a101a114a-4a97a108a32a115a-4a+6a-3a99a+2a115a32a108a-3a+2a-6a32a116a104a-3a32a105a+5a+6a101a114a-4a-9a116a46a10a45a32a84a104a^a115a32a109a-8a97a110a+5a32a116a104a97a116a32a116a104a-3a32a112a+5a-3a-2ava+4a101a32a111a-9a32a116a104a^a115a32a113a+4a101a115a^a105a+6ava32a105a115a32a110a^a+5a32a116a-5a32a100a111a+8a-9a-2a+3a97a+3a32a116a104a^a115a32a113a+4a101a115a^a105a+6ava32a116a101a120a-4a32a97a110a100a32a112a97a114a^a101a32a105a116a44a32a98a117ava32a105a+5a+5a^a101a97a+3a32a116a-5a32a115a^a-5a+3a101a32a105a116a32a105a+5a32a121a111a+6a32a112a+2a-3a-8a114a97a109a46a10a45a32a84a104a^a115a32a105a115a32a91a116a97a+6a58a99a111a100a^a45a103a+8a-3a-6a93a44a32a115a-4a32a115a104a+7a+3a+2a101a115a^a32a99a111a100a^a32a105a+5a32a42aa98a121a-5a101a115a42aa32a119a105a+5a+5a33a

Uses isaacg's program to golf the program. This can likely be shortened even more using variables.

///, 976 961 bytes
/?/ code //_/shortest?//^/text //@/the//$/ the //&/ to //`/question//~/codegolf.stackexchange.com/The basic idea of a [tag:kolmogorov-complexity] challenge is&print a set output in$_(though that meaning has changed now). We have had many of @m, from [Borromean Rings](http:\/\/~\/questions\/53417\/ascii-borromean-rings)&[The Gettysburg Address](http:\/\/~\/questions\/15395\/how-random-is-@-gettysburg-address).

##Your Task

This ` is similar, except that it requires printing of a special ^-$^of this `. Specifically,$very Markdown?that I am typing right now.

To prevent an infinite recursion in$`,$exact ^you have&print can be found [here](http:\/\/~\/revisions\/1f731ea3-0950-4b03-ae95-24fa812a9a28\/view-source).

##Clarifications

- You are not allowed&use any external sources like$internet.
- This means that$purpose of this ` is not&download this ` ^and parse it, but instead&store it in you program.
- This is [tag:code-golf], so _in **bytes** wins!

-15 bytes thanks to steenbergh
Try it online!

Got it down to 961 by prepending /?/ code //_/shortest?//^/text / and adding ?, _ and ^ in the right places.

HTML, 1082 1072
With the same text font :P The end tag </pre> is not necessary.
<pre>The basic idea of a [tag:kolmogorov-complexity] challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from [Borromean Rings](http://codegolf.stackexchange.com/questions/53417/ascii-borromean-rings) to [The Gettysburg Address](http://codegolf.stackexchange.com/questions/15395/how-random-is-the-gettysburg-address).

##Your Task

This question is similar, except that it requires printing of a special text - the text of this question. Specifically, the very Markdown code that I am typing right now.

To prevent an infinite recursion in the question, the exact text you have to print can be found [here](http://codegolf.stackexchange.com/revisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).

##Clarifications

- You are not allowed to use any external sources like the internet.
- This means that the purpose of this question is not to download this question text and parse it, but instead to store it in you program.
- This is [tag:code-golf], so shortest code in **bytes** wins!

Octave, 1017
Strightforward with two substitutions, I do not think it is possible to reduce even more.
 q='question';s='http://codegolf.stackexchange.com/';disp(['The basic idea of a [tag:kolmogorov-complexity] challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from [Borromean Rings](',s,q,'s/53417/ascii-borromean-rings) to [The Gettysburg Address](',s,q,'s/15395/how-random-is-the-gettysburg-address).\n\n##Your Task\n\nThis ',q,' is similar, except that it requires printing of a special text - the text of this ',q,'. Specifically, the very Markdown code that I am typing right now.\n\nTo prevent an infinite recursion in the ',q,', the exact text you have to print can be found [here](',s,'revisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).\n\n##Clarifications\n\n\n- You are not allowed to use any external sources like the internet.\n- This means that the purpose of this ',q,' is not to download this ',q,' text and parse it, but instead to store it in you program.\n- This is [tag:code-golf], so shortest code in **bytes** wins!'])

Really old answer, I know, but you could save 4 bytes with this (link to TIO)

And a further byte with this

s='](http://codegolf.stackexchange.com/' saves 4 bytes

Vyxal, 661 bytes
`λƛ »ǔ †₁ of a [ƈ↲:k꘍Ġ꘍τrov-₁µ] ɾṖ is to ⟑Ẇ a ƛ⊍ ∆ė in λλ ×¶½Ḣ ¬⋎ (»⟇ λ⟇ ↓₅ λβ ⌐ƈ λṠ). We λʁ λ‡ ƛ≤ of ƛ‹, λø [Bor←„an ↓₄](ṅ•://¬⋎»₅.⟩β•∵•⅛/∨§/53417/Ġ₴-ǍḂ←„an-↓₃) to [λƛ λŻ≠ŻǍṪg ¬Ġ](ṅ•://¬⋎»₅.⟩β•∵.•⅛/∨§/15395/λ₴-⌐‡-is-λλ-λẎ≠ŻǍṪg-¬Ḟ).

##λ⌐ ʀǓ

λ« ⟇Ṡ is ÷₃, øṄ λ⟇ it ↔ƒ ɽǔ of a ¬∪ ∧□ - λλ ∧□ of λ× ⟇Ṡ. ∵‟, λλ ƛ² «Ċ∧ċ ¬⋎ λ⟇ I am Ȯ» ¬ẋ λṠ.

To ɾ₃ an ĿẎ ¡⁺ꜝµẏḂ in λλ ⟇Ṡ, λλ →æ ∧□ λ• λʁ to ⟑Ẇ λ‹ be ∧½ [λḞ](ṅ•://¬⋎»₅.⟩β•∵.•⅛/Ẋ₁/1f731ea3-0950-4b03-ae95-24fa812a9a28/λ₌-⟑Ḋ).

##C⇧ċ⋏↓¢₌ẏḂs

- λß λ½ λ† ⌐⁰ to λ₇ λ¶ ↔ċ €ƈ λƒ λλ ¬Ḋ.

- λ« ×Ḣ λ⟇ λλ †¯ of λ× ⟇Ṡ is λ† to ∧ẋ λ× ⟇Ṡ ∧□ λ¬ ḟ⋎se it, λė ∆» to ¬↓ it in λ• ƛ¾.

- λ« is [ƈ↲:¬⋎-»₅], so ×¶½Ḣ ¬⋎ in **¨ƈ** ṅ↓!

Try it Online!
Probably not a winner, but it was fun.

Python 2, 988 bytes
I use a simple string substitution. Still golfable...
print"""The basic idea of a [tag:kolmogorov-complexity] challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from [Borromean RingsZQs/53417/ascii-borromean-rings) to [The Gettysburg AddressZQs/15395/how-random-is-the-gettysburg-address).

##Your Task

This Q is similar, except that it requires printing of a special text - the text of this Q. Specifically, the very Markdown code that I am typing right now.

To prevent an infinite recursion in the Q, the exact text you have to print can be found [hereZrevisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).

##Clarifications

- You are not allowed to use any external sources like the internet.
- This means that the purpose of this Q is not to download this Q text and parse it, but instead to store it in you program.
- This is [tag:code-golf], so shortest code in **bytes** wins!""".replace('Z',"](http://codegolf.stackexchange.com/").replace('Q',"question")

You can add a space in front of the replacement text of "Q", this saves a few characters (but decreases readability).

@heinrich5991 I cannot, since question is used in two of the URLs, causing more to be lost than gained with that adjustment.

You can try str.translate for multiple replacements

@Sp3000 doesn't translate require the entire list of alphanumeric characters, though? ... translate the characters using table, which must be a 256-character string giving the translation for each character value, indexed by its ordinal.

@mbomb007 Not if you use Unicode strings, like u"abc".translate({97:u"x"}) although at that point Python 3 might possibly be better

SOGL 0.8, 571 bytes (non-competing)
""%I│Γ"J∞‛█Τ∙‚+∑(4░║ρ│oΛe2ρ′╗m↔←A<¡►&ŗNō▼ΥικVf÷!╗‼ξ┐Wο1 sY¬ƨ⁾¡»╬j§4¡η╬Σεxτ§¼rķ(Λ‽Kp√½ΗφW≡fC╚⁹≠╬Βηs0θ⅓I+žπƨΒY³Pu⁽šnχ~░5u►℮O¹o│≈+Δ┐š;ΜTV)wm⌠⁄υ∞1;gγ¼τωΚ■FR░ŗΤ`∞‰ŗ⌡šZž█GνhΗ)Δo▲`℮↔uξxKΤ4└χ…⁄ŗ╝cJē∙ΒΤi%⁽Σσk÷YΨ►l"βj;σoƨΩ╚↔f5$φvhē≠¦jO⌠T[±žν⅛◄bk⅜³β⅜UEΙ′Η--<~Y′¦!πƧ⁾=╥ν#○∙2¡TFpπō┌↑# ±⌠℮¬‰Τ>⌠t⅝>ķ'¶↓+w(½⁷↑ø#Ξ%:║θ↕↑DƧ⅞℮5Rr⁴,«xģΜ5Χ▓#⁸\‼∞f.xΣ╬≤∑ΛB;Ο/Sšδ‚^Λ½0S/≥E=÷℮YεDHψκhψB~ν⅓┌e>#∙0℮|θR⁸½N…1─ķφ∙Y⁵№Χ$gx:χZō┐Δ=░⁄κ§o□π|÷øΣxē′↓Κηπε\╤⁽Ιβiμ^ņμΦƧK℮Δnε{ΩA7≠ΓIw¶¤╥γ╝δΞ▼□╚¼Uf↔mK←G▓a⁴ηē¦CΓ°⁵⁄χwƧB2h⌠↓■ņ-AΛ∆Y⅟VYK0○4Gx↕┐ķk#ž6æ3►ΘšXΤΕ█Rtε{►n‰6mI-υō⁰┼¶BķT³‘ ^"≠‚z|√λ⅜…w╝_└b′℮Χ]υ:.▒█m≤↔t§)U█ā⅛□⁸S$/‘ŗ

Expect this to be golfed some more.
Basically a compressed string (english words and characters) with s](http://codegolf.stackexchange.com/questions/ replaced with ^ and replaced back.

Hmm, looks like SOGL is newer than this challenge ? If this is true, you should mark you question accordingly (i.e. "Non-Competitive")

@zeppelin yep. Missed the date somehow.

Dyalog APL, 638 bytes
Requires ⎕IO←0. For ⎕IO←1 just change ¯128 to ¯129.
0(220⌶)¯2(219⌶)¯128+⎕AV⍳')lec;∣↑å⍒3ÌV@Ìé*↓!K⍺┤>N.ÒrÌrkV|≡î%ta⍲#=ê¿┴´∇Ì;¿⍬┌u⍱2ØZ&C↑áa€ÛË}QOG⍀@ÍÛõÒÔþö&7á;⍺┌íp⌹,0ê<ÐîÏ⊢$`⊃´´@äz0┐R⊖Û)ä⍒
`⌹v∨P\X,Ô4─9Ã   AâäàZ¨ɫz¶┤Úà∊Ø⍴81⍱ýHâ⍳⋄ ⍋kññÝ;⍪T⍟↑ã)(¶>ääÁw âMîà    #∇
JYâ→Ô¯cö.CíæÕìíá¡⍣g┬q⍋`ûÓïɫ∪mbÎ┘l@ä
hPVðü$┌·┴Ìß¯ö⊣>t┘åà$ÐÄ%⍵D∩õ§:⌈¥×⌹⍉⊣⊤ɫ?WM⊂^Ð≡(*uÒdã⍟⊂⍪þ3.Bt (o!NO¢AAë}⍞⍳Y⌊BÝ⊖+ÕþS∊ï⌽∊Î(ASà⍺\É∊ç  ⍞<ï¡Û∪êñ´┼⊂↓xî,€[ï⊣≤∪⍬Á┴ußI¿lE
Ñ¿≥§⍋7~ÒQtH├5⍫'

'...' the string consisting of the following bytes: F8 1C 15 13 C1 EE 5B B0 90 C5 33 68 56 E7 68 94 D9 B4 B1 CC 4B 0E E3 A4 4E 2E 6D 22 68 22 1B 56 C0 D1 98 D9 0C 24 11 C4 D8 A2 95 F2 E4 DB B7 68 C1 F2 2F DE 25 C3 32 89 5A 2C DA 43 B0 8D 11 7C 73 67 7D 51 4F 47 9F E7 69 73 7A 6D 6F 75 D5 DA 37 8D C1 0E DE 97 20 CB C2 30 95 A0 6C 98 6B 3B 3D ED BB DB DB E7 8F 2A 30 DD 5F 52 C9 73 F8 8F C5 03 ED CB 26 A6 50 9E 58 C2 6F 34 E1 39 63 09 41 8E 5C 8F 8C 5A 80 0B 2A EF 2C E3 72 8C 05 AD 89 AE 38 31 C3 5D 48 8E B2 F4 04 C6 1B 9A 9A 74 C1 D0 54 CA B0 76 F8 B9 07 EF A4 8F 8F 61 27 04 8E 4D 98 8C 09 D8 B7 03 4A 59 8E F6 6F 2D 13 D5 2E 43 97 91 70 77 97 8D F3 FF 17 E5 21 C6 ED 5B EA 6E 99 0B BD 1D 12 6A DC 1C E7 8F 03 18 50 56 78 EC 3D 3A DE 5E E4 68 8B 2D D5 7E A4 24 DC 90 3A 8C 3D 6C 82 0C 0F 44 BC 7A FC F0 B5 3C AB CB C7 7E BF 0B AC 57 2B 4D BA EB 6C D1 B9 B4 25 6D 14 76 CA BA D0 75 33 2E 42 24 FB B9 1F CC 4E 4F 3F 5B 41 41 96 7D FE B2 59 B6 42 74 C9 A9 70 75 3A 53 AD 3A 99 C8 AD 6A B9 41 53 8C 0E 9E 86 AD 92 09 FE A0 99 F3 73 BD 95 9A DB E0 BA B1 28 98 C2 7C 9B 99 7E A1 BD 07 2F 61 E4 25 8B 49 F2 1C 45 03 87 F2 A3 FC C6 37 AF 6D 51 24 48 E2 35 CF 00 9D 70 58 07 A2 CE 57 8D 07 20 44 78 B6 C4 CF 87 8A 61 0B D7 D3 E9 23 19 44 D9 B1 B8 9F 6D 27 A9 F8 2A 19 2A 50 89 8B CE 26 C6 BB 24 28 1F 07 28 90 21 1C 20 32 03 A9 E1 57 10 23 FF A1 AF A6 34 CF 64 2B 1B 55 12 F0 25 96 1B 75 C2 DD 67 0B 15 C2 5A 2C 55 55 F5 05 37 4B AB 5C 60 55 ED F6 50 F4 D4 DE 18 97 14 78 FF 90 40 91 C5 0C EF B2 D1 A0 09 80 BA 12 C6 25 37 36 35 C7 19 CE B1 B9 F8 02 B0 11 E2 1E 1C 91 4C C9 45 C3 2B 77 94 3B 13 A6 E4 07 F8 AE A2 B1 4B B0 DF BE F1 8C 7B 7D 60 FA AB AA AF 73 88 D1 07 E2 D2 A4 50 EF 2D 8C 7F 5F 87 A2 B1 99 A7 68 51 09 00 66 99 64 71 CD 73 CC 98 5D F9 36 AE EC 84 6E 81 ED 6F EC 6D 30 FB 36 A2 5F 78 DA 87 12 AA 20 3C 1F C9 83 AF DE D2 39 BB 1D 66 23 BC 18 CE 61 A8 6A EF 4E FE 81 AC 8C F9 B3
⎕AV⍳ indices of the characters in the Atomic Vector (the character set)
¯128+ subtract 128 to get 8-bit signed integers
¯2(219⌶) zlib decompress
0(220⌶) deserialize array

Didn't they recently change ⎕AV in Dyalog v16? (I think it was @ or something)

@Zacharý No, ⎕AV doesn't change anymore. @ has always been in, but was first assigned meaning in 16.0.

Javascript (ES6), 887 bytes

s=`Th"basic=dea ¢¦kolmog>ov-complexDy] c&lleng"H<z a se$outputEJ§(though%&$me6O&s c&nge?now). W"&v"&?m6y of%hemLfrom [B_ R+gsZ53417/ascii-b_-r+gs)<[Th"GV AjZ15395/how-r6dom-H-the-gV-aj{Your Task

TUPsimilFLKcept%&t=$@quir' zO¢sXalN-JtK$¡. SXfically,Jvery MFk£ Q"t&$I am%ypOrigh$now.

To preven$6Ef+D"@cursionEJqu'|,JKactN¤&v"to pr+$c6 b"foun?[he@^@vHions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-}ce{ClFifica|s

- You F"no$allowed<us"6y K~al }c' lik"th"+~et¥hH me6s%&tJpurpos"¡Pnot<£load%UN6?pFs"DLbutEstead<st>"DE ¤program¥hHP¦Qe-golf]Lso §+ **byt'** w+s!`
for(i in a=`§¦¥¤£P¡~}|{N@DEFXUJK¢OzLjVHZ^<_'Q6?+&$>%="`)s=s.split(a[i]).join(`sh>t'$Q";[tag:;.
- T;you ;down;=s ;of%U;tern;sour;tion;).

##;%K$;re;it;=n;ar;peci;hH qu'tion;%h";ex;of a ;+g ;pr+t;, ;ddr's;ettysburg;is;^qu'tions/;](http://Qegolf.stackexc&nge.com/;%o ;>rome6;es;cod;an;d ;in;ha;t ;or; t; i;e `.split`;`[i])
alert(s)

String replacement taken to the extreme.
Explanation
s=`...`                     // The compressed string
a=`...`                     // List of characters to replace
b=`...`.split`;`            // List of replacements
for(i in a)                 // For every index in a
  s = s.replace(a[i], b[i]) // Replace every occurence of a[i] in s with b[i]
alert(s)                    // Print the result

05AB1E, 658 587 586 bytes
¶2×UžX’(ÿƒËŠˆ.Â‚‹º.ŒŒ/…é/’V’½¨›Ú€¬¾ãÒ²Ñ›’™X„##«©•Xć-.ʒ¦a‘lsØ¥Ê™´XE×•h6'-:lY'†ä'¥±:’ÿÿ/€×-…ï)’'€Î’Ï›Ò¢s¾ß’'€„™X’‰©„‹’™'¥Ï™'€Œ™X„€žšª™®.•p4ÊĆιÅ•©Žy!Y’ÿÿ/€ß-ïÊ-€ˆ-€€-ÿ-ƒ¹)’®’[€€ ÿ ƒ¹]’™ŽÒ`Y’ÿÿ/Ø®-ßßr«Ä€¤-£Ç)’’[ßßr«Ä€¤ £Ç]’™'€¦™'‰Ò’ [Ÿ¾:å±ëºå¯€—ov-ÄÕ]’'€€™“ÿŠµŽ©€‚€…ÿ›Ý€ˆ€„…¢€…‚áîÕ€†€€ˆ¶estƒË (ÿ€Š£È€°ï‚€Ó). ÿ€¡‚†‚Ü€‚‚¨,€š ÿÿ€„ ÿÿ.ÿÿÿÿ†ä€ˆ‡Å,•Ý€Š€•–ßœæ€‚€…ƒÑ„¹ -€€„¹€‚€Œ†ä. ÿ,€€‚Ò ÿƒË€Š I€ÜÜÔƒ©€Ó.ÿÿ›Ë€¤ÚÕ ÿ€†€€†ä,€€ª‚„¹€î€¡€„…¢€©€ïƒç [ÿ]ÿ.ÿÿ
“?…
- U'¡Ï’ [Ÿ¾:ƒË-Šˆ]’'€Œ™X‚2и`'€î™X“ÿÿ€™€–ï¶€„€Å€Æ–²Žç€è€€ƒ¸.ÿÿˆ¾€Š€€ŽÂ€‚€Œ†ä€ˆ€–€„„ï€Œ†ä„¹€ƒ³™se€•,€³î¿€„ƒï€•€†€î‚ë.ÿÿ€ˆÿ,€Êˆ¶estƒË€† **ÿ**·Ñ!“,

Try it online!

I believe this is the only valid answer here, since the question was edited by the Community bot recently. Congratulations!

Actually, I think you need to go back to the version of the question without spaces after ##, since the edit wasn't intended by the OP.

@user Alright, well, I'm not complaining. Saves me a byte :)

Python 3, 950 bytes
s='''The basic idea of a [tag:kolmogorov-complexity] challenge ßto print a set output ināá(though â àing has changed now). We have had many of them, from [Borroà Rings]æås/53417/ascii-borroà-rings) to [The Gä Address](æås/15395/how-random-is-the-gä-address).

##Your Task

Tãå ßsimilar, except â it requires printing of a special text -ātext of tãå. Specifically,āvery Markdown code â I am typing right now.

To prevent an infinite recursion ināå,āexact text you have to print can be found [here]ærevisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).

##Clarifications

- You are not allowed to use any external sources likeāinternet.
- Tãàs âāpurpose of tãå ßnot to download tãå text and parse it, but instead to store it in you program.
- Tãß[tag:code-golf], so áin **bytes** wins!'''
for x in zip('æãåāàáâäß','(http://codegolf.stackexchange.com/,hß,question, the ,mean,shortest code ,that,ettysburg,is '.split(',')):s=s.replace(*x)
print(s)

Try it online!
Still not optimal...

There are probably several one-byte characters that aren't part of the input that you could use for a shorter count. For example, _ doesn't show up anywhere, so you could save at least a few bytes using that instead of a multi-byte character.

@hyper-neutrino thanks for the tip, i'll do it soon

Python 2.7 - 843 bytes
Nothing interesting here. Just a base64-encoded gzip of the string. I'm sure there are better ways to encode it, but I couldn't figure out how to put it into a file in a way that python can later read it.
import zlib
print zlib.decompress("#eJyVk0Fv2zAMhe/5FRx6aYMoTpoEbXrbdhh22GULMAxBD7RN20Js0ZXoJP73o2S02HraACMOLOnx8XvUoSHIMdgCbEkIXAHCUbB+OnHbcc2ez6bgrm/pamV8hqLBtiVXE9gAwtB760TPBBLgQfpBwDoQVQ0Ne6EgUHBJcCsND3WjKyjQETrramgwREFVK8Hx5W4JP0k/nuNPCR26MRpSsW4BlecOjp/Y61uPw3cVCM+3jUj/lGWxRs1ttQyCxYmuk+pSnWcvg5qw7EK222zXDxmGwlqTvwoZH4XuYi/Hg9r+QiJjyAdfw8ey9BT+s8h6t9nvsoYvxqMruTM2GO3A1G+6Bifdu+VsdnPziwcPBwyn2ezQKNNXpcg32M626BegtaiXCZ4V8PQyWJWY6EeSKbfQU2GxBaGrgEkhpL+J4R/SS/gRd1a20CzHRdp4Jj/CN/Snki9uiixV+wrYgYx9LOJt3UgMSo0fYvR0phi+enWVdVZInRWDD8n+NAWvNacqdMVCJlMjD1PUb0NUqFBOUPHgSjg25OlfyKsJGyby1cNmTbgxq/1uZbb5amOQ9jtzv63wcX2Pe7x/zM6WLiYo84Im/p8VcEKR4pvNDGgigJ60Ue2tbfmi06kmh0AQJ1LNk3eKeVIJ0NoTpe60CV0hWapIyjLOV5g4xvV+8D2ryvs8YtSxmBaJ9FvW4f97QyKm4wQ9ehWwsoA83bQghMldEPZxIXKPaHvPtcfuzYo+6VpHkiaifF5oA+8uqZ6dz/NRP8zncFH1D78BIl92mw==".decode('base64'))

Java 1130 bytes
import java.io.*;import java.util.*;import java.util.zip.*;public class P{public static void main(String[]a)throws Exception{InputStream s=new InflaterInputStream(new ByteArrayInputStream(Base64.getDecoder().decode("eNqUk0Fv2zAMhe8F+h849NIGUdw0Ddr0tu0w7LDLFqAYgh5om7aF2JIr0Un870fKSLf1tAFB4sjSx8f3qG1DkGO0BdiSEHwFCDvG+mnv287XPviDKXzXt3SyPL5A0WDbkqsJbAT20AfrWM5EYvAD9wODdcBCjY0PTJGh8CXBNTd+qBt5gwwdobOuhgajAoVWgvPHmwU8kywe9KuEDt2oggTWzaEKvoPdJx/kV47DdwHEl+uGuX/KMq1R+7ZaRMZiT6eJuhDl2esgIqx3MVuv7pcPGcbCWpOfQSYo6EZ72W1F9hdiHmM+hBo+lmWg+J9FluvVZp01/mgCutJ3xkYjHZj6jWtw4t4sLi8uL66ufvohwBbjXv9uG/H1TFOPo+1si2EOUo96ngy0DIFeByuYKQF1M2UXeyostsB0YjApiPSYfPwDvYAfurOyheQ5ztPGA4URvmHYl/7opthSta+AHfDYa5Fg64Y1rCR+qwNAB9IRELWuss4yibZiCDE1MM3CuepUh05Y8CRr9MMU+NsoFQLKCSo/uBJ2DQX6F/9FhI2T/9XDakm4Mreb9a25z29XBmmzNnf3FT4u73CDd4/ZwdLRRPG9oHMKn8XkZEeKUdcMSDKAgaRd6a9t/VHmVIQOkUBnUxqg4MTsiRShtXtKHUoj8oZ4oZQUqY5anOzUDf0Qei+Y97Fo4lpNqmgIrZd78PeGZJtMFvQYBGB5Dnm6dJEJk7zIPugLNV/97YOvA3a/tcgnXXH106ihL3Np4d2FlcOzWT7KwmwGR8F/+AUAAP//".getBytes())));int i=0,n=1067;byte[]r=new byte[n];for(;i<n;i++){r[i]=(byte)s.read();}System.out.println(new String(r));}}

An InflaterInputStream that reads the bytes from a hard-coded String that contains the Base64-encoded, ZIPped data of the post.
Not very impressive, but at least that's 15 bytes less than the naive version that just prints the string:
public class Q{public static void main(String[]args){System.out.println("The basic idea of a [tag:kolmogorov-complexity] challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from [Borromean Rings](http://codegolf.stackexchange.com/questions/53417/ascii-borromean-rings) to [The Gettysburg Address](http://codegolf.stackexchange.com/questions/15395/how-random-is-the-gettysburg-address).\n\n##Your Task\n\nThis question is similar, except that it requires printing of a special text - the text of this question. Specifically, the very Markdown code that I am typing right now.\n\nTo prevent an infinite recursion in the question, the exact text you have to print can be found [here](http://codegolf.stackexchange.com/revisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).\n\n##Clarifications\n\n- You are not allowed to use any external sources like the internet.\n- This means that the purpose of this question is not to download this question text and parse it, but instead to store it in you program.\n- This is [tag:code-golf], so shortest code in **bytes** wins!");}}

You should try a find/replace like I did and see if that is shorter. Try String.replaceAll().

@mbomb007 Yes, I considered this. In fact, I analyzed the word frequencies to see whether it could be worthwhile. But there are few repeated words in the text, with "question" being one of the longest ... and having to call, for example, s.replaceAll("X","the") would only be beneficial if there were > 11 occurances of the, which is not the case...

The URL is actually what saves the most, I think. I bet it's shorter than what you have with only subbing for question and the URL.

@Marco13 Take a look at my answer. It uses substituting for a few things and has 52 bytes less than yours :P

@James Smith I'd consider combining both approaches, but likely, the ZIP compression also does a similar "replacement". Maybe I'll try it out later.

bash, 870 chars
echo "-----BEGIN PGP MESSAGE-----
owGVk7Fu2zAQhod20lNckSU2TCuOYyTO1nYoOnRpDbSFkeEknSTCEqmQJ9t6qL5K
n6hDjyQStJlaQLAMkfzvv+8//ng9K16hr76VP3/tWoICvS5BV4Rga0DYMzb3B9v1
trHOHlVp+6Gjs+bpAcoWu45MQ6A9sIXBacNyxhODHXkYGbQBFlXfWsfkGUpbEVxy
a8emlRVk6AmNNg206IOgqFVg7Gm2hK8kH4/hp4IezRQMiVi/gNrZHvbvrJO3HIfP
IuAfLlvm4T7PQ43GdvXSM5YHOifVpTjPH0cxoa3x+WZ9s7rN0Zdaq+JJSLkgNAu9
7AOMD8Q8+WJ0DbytKkf+P4usNuvtJm/tSTk0le2V9ko6UM2zrsKkO1tm2cXFdzs6
2KE/ZNmuFaZPSoGv173u0C1AatHACZ5mcPQ4apFI9APJmJsfqNTYAdOZQcUQ4t/I
8A/pJXwJO2tdSpbTIm48kpvgE7pDZU8mRRarfQTsgachFHG6aTkEJcZ3IXo6Ughf
vJpaG80kzsrR+Wg/TcFTzVSFzlhyMjXZMUX9PESlCBUEtR1NBfuWHP0LeTGhfSJf
365XhGt1td1cqZviaq2Qtht1fVPj3eoat3h9lx81nZQX5iUl/u8FcEQR48syBZII
oCNpVHrrOnuS6RSToycIEynmyRnBnFQ8dPpAsTtpQlaIlyISswzz5RPHsD6MbrCi
8jKPEHUoJkUC/c7K8P+9IRKTcYIBnQhoXkARb5pnwujOs3VhIXAPaAdnG4f9sxV5
4rUOJFVA+bCQBl5cUjk7nxeTfJjP4STqb7Lf
=g2Th"|gpg -d 2>&0

Message was produced with gpg --store file and some extra stuff was shaved off. Kind of just wanted to see if it could be done.

Python 2, 826 bytes
print"eJyVk0Fv2zAMhe/5FRx6aYMoTpoEbXrbdhh22GULMAxBD7RN20Js0ZXoJP73o2S02HraACMOLOnx8XvUoSHIMdgCbEkIXAHCUbB+OnHbcc2ez6bgrm/pamV8hqLBtiVXE9gAwtB760TPBBLgQfpBwDoQVQ0Ne6EgUHBJcCsND3WjKyjQETrramgwREFVK8Hx5W4JP0k/nuNPCR26MRpSsW4BlecOjp/Y61uPw3cVCM+3jUj/lGWxRs1ttQyCxYmuk+pSnWcvg5qw7EK222zXDxmGwlqTvwoZH4XuYi/Hg9r+QiJjyAdfw8ey9BT+s8h6t9nvsoYvxqMruTM2GO3A1G+6Bifdu+VsdnPziwcPBwyn2ezQKNNXpcg32M626BegtaiXCZ4V8PQyWJWY6EeSKbfQU2GxBaGrgEkhpL+J4R/SS/gRd1a20CzHRdp4Jj/CN/Snki9uiixV+wrYgYx9LOJt3UgMSo0fYvR0phi+enWVdVZInRWDD8n+NAWvNacqdMVCJlMjD1PUb0NUqFBOUPHgSjg25OlfyKsJGyby1cNmTbgxq/1uZbb5amOQ9jtzv63wcX2Pe7x/zM6WLiYo84Im/p8VcEKR4pvNDGgigJ60Ue2tbfmi06kmh0AQJ1LNk3eKeVIJ0NoTpe60CV0hWapIyjLOV5g4xvV+8D2ryvs8YtSxmBaJ9FvW4f97QyKm4wQ9ehWwsoA83bQghMldEPZxIXKPaHvPtcfuzYo+6VpHkiaifF5oA+8uqZ6dz/NRP8zncFH1D78BIl92mw==".decode('base64').decode('zip')

Try it online!
Very boring, just a zip, base64encoding.

Windows Batch, 1103 1061  1040 bytes
@echo off
set _=question
set l=](http://codegolf.stackexchange.com/
set e=echo(
%e%The basic idea of a [tag:kolmogorov-complexity] challenge is to print a set output in the shortest code (though that meaning has changed now). We have had many of them, from [Borromean Rings%l%%_%s/53417/ascii-borromean-rings) to [The Gettysburg Address%l%%_%s/15395/how-random-is-the-gettysburg-address).
%e%
%e%##Your Task
%e%
%e%This %_% is similar, except that it requires printing of a special text - the text of this %_%. Specifically, the very Markdown code that I am typing right now.
%e%
%e%To prevent an infinite recursion in the %_%, the exact text you have to print can be found [here%l%revisions/1f731ea3-0950-4b03-ae95-24fa812a9a28/view-source).
%e%
%e%##Clarifications
%e%
%e%- You are not allowed to use any external sources like the internet.
%e%- This means that the purpose of this %_% is not to download this %_% text and parse it, but instead to store it in you program.
%e%- This is [tag:code-golf], so shortest code in **bytes** wins!

Jelly, 604 bytes
“¥yL⁹ ŻḌsŻṡþ}ḥṖỊⱮĿs\²[Ɱġ}ŀ}ṁẈṂDFṾ§HŻĿỌḅṙṣȦȧḊŒ⁾ȥ\ɠ5¥ḤḞṭWGḥL|ẠƥṁỌ¥⁸5 sæµƬṪ)Ƈṡẹ§+ḋb³⁻ỵḊYƲẹṫæĠYhḄdḅP⁻ḞO3kḳṡ¹ßẎṖ¢ẉ⁺Ɲ¢ÞịċḄẋɱṢḲPẒ3ƥŀl{eµ*⁵ịlGƭṄɼṅỊKḂ:ŒɓɼḃɠƝWʂż⁶ɼƊ8;ɦT½yFƭÞ¥$0UɠẆvṫ>P⁼un 6:ḥ{Ẹ!*ḃ~⁵ƈÑµẋ_-d²ḂȮVġPFølƤGrị0£ṁfẋOḅṪHƥṄḌỤ1⁷ƓĿ¶Ŀ,D]Oẹ6'¥ịFỊç4Øuȧʋ5iɦịlnġ7V¡Z©|¢:⁽£Ñ¬Ƒ.$ḟṫÆỤọƭḊṡÆƬ⁴eɠµv)ẆṛPɓż½ƭQŀ_Þ:a^xrƝ(¬Ʋ7ḄjCḅ"DɲṆĖGẒɱ⁻L#¿Ṙñq¶¬bỌÐ½ßẉ⁼ċ`ṄⱮƝƑ⁼w¦Ḍḍ3hiƓ⁹ḌɠṅȦZṘỴḋḤzḟQ/ɦf®⁷Þnİṁ}ṫ.~ŀ£ȯÐṭ2Ṅ*%6ßƭu\{²ȥ/mƤaṛ`ẋỵ⁴ż°ḢgµḋCḍṫɦ%XƝėælĊƈ+Ɱ+Lṅwuo9ƁM÷ðĊɱṙƝıƒpEƊȥọDØ&ṙḊƓ×⁻?ḥẎ6o¥ḂKċþzȥ!(zzḟḋỌ2YĊ{dɲṣⱮẉ!ƒwŒ½Ḷ9ṗ7(ȥẊJDḤḞ(Iḃŀø¶ċ}ɼMṢƭrx:ṅ.4ɱḶ8ẠfBḳƈ¢s$ĖḥŻƥfeß=Gs3cO⁶ÄfṗƬṫqʋ!ṭɼȥṅƈ|¦¶ḋL¢ṭỤĖçġøṭg,Ọw_⁾7ACṛ¿RP4Yoḳr²ʂñ²ỴƓẊṆ;QẇṫḃḶñ¹H§AĊ6(⁴ṡ@»

Try it online!
Jelly's compression is not the best out there.