Identify the Kaomoji! Background
This is loosely based on the now closed Kaomoji question asked a few hours ago.
Kaomojis are sequences of characters designed to express a given emotion. In this code-challenge, you'll be writing a program that takes a Kaomoji as input, and must output the emotion expressed by the Kaomoji.
Input
A Kaomoji. In this challenge, there are 13 categories of emotions the kaomojis can express:

Joy
Love
Embarrassment
Sympathy
Dissatisfaction
Anger
Sadness
Pain
Fear
Indifference
Confusion
Doubt
Surprise

You will be given one kaomoji from any of these lists as input. This link contains all of the kaomojis in this challenge. Here's a pastebin version.
Output
Your program should output the emotion expressed by the kaomoji. You can express this as an integer (i.e., Joy = 1, Love = 2, etc), or output a string containing the emotion.
Scoring
Your score is (B+1)*exp(3W/(360-W)), where B is the number of bytes in your program, and W is the number of kaomojis that your program incorrectly categorizes. Lowest score wins!
JavaScript (ES6), Score 643
 656 651 646  642 bytes, no error
Returns an integer from 1 to 13.
s=&gt;`qv%s!u.r0vPyqv*s&quot;r'yqyu@y2r%{ }1u!v(u{y8|!ru;rur&amp;z+z,w'z-{){{0x'r*z/{Py$t w#z,xFt,}qzr.{#s$t%vv6{@s&amp;v z$x@{!{6v,sCr6s&lt;v z.r s*w=w,r0u5s r){,y!s-s%v8t.xrqyWr7r?z#uBz9r&amp;v#v5yBw+w&quot;})vNw-u4sz)y&quot;zEu/z r&quot;}/rqw w\\t0|(r*rw(uAw&amp;v {uYw#x wqz*|)v2u/|'v!r#sBs}0w&amp;r2y&amp;s r%r6w+}){&quot;r2{-usqw'}C|/v$y={!r!x!t/rt&gt;r1r&quot;svuCy*{qr&gt;v1x2r6x#{5{.wv8wGwqr!r:vJ|#r#u%uqst-}'r&quot;z\`zqw uHy$sYr-z0w#|3{8x7vqz.w!|Ez$uvw!z.{t'w+{5x&amp;|.xmrt&quot;s,u&quot;vuqwy{$t5u&amp;s'wAv&quot;vsTw#z%u*z0s r/w v#}+w'r9}0r0|AvxHv,r*}qw:x r3w}!u0v(w{qvv&quot;y.rSr0w4yr#r.}qw&quot;}%s&quot;v#r!w!u/| tCs u`.replace(/[ -p]/g,c=&gt;&quot;q&quot;.repeat(c[C='charCodeAt']()-30))[C]([...s].map((c,i)=&gt;s^=c[C]()&lt;&lt;i%5)|s%8788*3672%4051)%56

Try it online!
Or test all kaomojis.
How?
The input string is turned into an integer N with:
[...s].reduce((p, c, i) =&gt; p ^ c.charCodeAt() &lt;&lt; i % 5, 0)

(using .map() instead of .reduce() in the golfed code)
Example for ٩(◕‿◕｡)۶:
 code | &lt;&lt; |  shifted bit-mask
------+----+--------------------
 1641 |  0 |        11001101001
   40 |  1 |            101000.
 9685 |  2 |   10010111010101..
 8255 |  3 |  10000000111111...
 9685 |  4 | 10010111010101....
65377 |  0 |   1111111101100001
   41 |  1 |            101001.
 1782 |  2 |      11011110110..
------+----+--------------------
       XOR = 110010100100101110 = 207150

In the lookup string:

The emotions are encoded as 'q' to '}' (ASCII codes 113 to 125).
The characters ' ' to 'p' (ASCII codes 32 to 112) encode a run of consecutive 'q' (which, in addition to 'joy', also depicts an unused slot). The length of such a run is ord(c) - 30 (minimum = 2, maximum = 82).

We first expand the lookup string to 4048 characters by replacing /[ -p]/g with the runs of 'q' and then extract the relevant character with the following hash formula, which was found by brute-forcing some random values during a few minutes:
N % 8788 * 3672 % 4051

The final answer is the ASCII code of the character modulo 56.