[Question]
  [
## The challenge
Write a function or a program that takes a string composed of one or more **subjective personal pronouns**, separated by **+** signs, as an argument. The output must be a single pronoun, that is the result of the relation defined in the next paragraph.
Of course, feel free to edit as you wish to correct those grammatical errors that are surely present ;)
This is a code-golf challenge, so the shortest code wins.
## The relation
The goal of this task is to translate in "math-speak" something that we use daily. How do we think of "You and I" ? Well, "We", don't we?
So, if the input is `You+I` the output should be the string `We`.
With more than two pronouns, it should look like:
`You+He+They` -> `You`
The relation is defined as this table:
```
      I  You    He   We   You   They
I     I  We     We   We   We    We
You      You    You  We   You   You
He              He   We   You   They
We                   We   We    We
You                       You   You
They                            They
```
## The 'You' Problem
Well, as you can see I'm not a native English speaker. In my language (Italian) there's a difference between the plural *you* (*voi*, in italian) and the singular *you* (*tu*). When I thought this challenge I didn't think in English, so there's the problem that it is impossible to recognize if I'm using plural or singular form. Fortunately (or obviously?), the input/output doesn't change in both forms, so you can use one of them and you will cover both cases!
## About the input
The input will be always in the form "Pronoun+Pronoun+Pronoun" ... The pronouns will have the first letter in uppercase and the rest in lowercase. Pluses will be not be surrounded by spaces, only by pronouns. Empty input is possible and the result must be empty output.
## Bonus
A little bonus of 15% if the program will manage two new pronouns: **She** and **It**. They are the same as He, obviously. Remember that this relation is reflexive, so She -> She and It -> It. Therefore, any combination that includes only She, He or It should output They.
## Examples
```
You+I          -> We
You+He+They    -> You
I+You+He+They  -> We
They           -> They
They+You       -> You
You+You+I+You  -> We
For Bonus
She            -> She
She+He         -> They
I+It+He        -> We
It+You         -> You
```
  
[Answer]
# Retina, ~~62 61 56 53~~ 52 bytes
```
(.+)\+(?=\1)
.*(W|.I|I.).*
We
.*Y.*
You
.{4,}
They
```
Further golfing and explanation comes later.
The 4 substitution steps do the following:
* anything multiple times is itself
* if there is any We or I + anyhing the result is We
* for anything else containing You the result is You
* if we still have multiple parts or a sole They it's They as only He's and They's can be left
[Try it online here.](http://retina.tryitonline.net/)
*3 bytes saved thanks to Martin Büttner.*
[Answer]
# JavaScript (ES6), 130 bytes
```
s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])
```
## Explanation
```
s=>(
  // a = array of each pronoun (including an empty string at index 0)
  a=",I,You,He,We,They".split`,`,
  // m = 6 x 6 map of pronoun indices for each combination of pronouns
  m="012345014444042242042345044444042545",
  r=0,                        // r = index of result pronoun
  s.split`+`.map(p=>          // for each pronoun in the input string
    r=m[+m[a.indexOf(p)]+r*6] // combine each pronoun with the previous one
  ),
  a[r]                        // return the resulting pronoun
)
```
## Test
```
var solution = s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])
```
```
<input type="text" id="input" value="You+You+I+You" />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>
```
[Answer]
# Python ~~159~~ 153 bytes
**EDIT**: Thanks @Pietu1998
This is a direct translation of the Javascript ES6 answer:
```
a=",I,You,He,We,They".split(',')
m="012345014444042242042345044444042545"
r=0
for p in raw_input().split('+'):r=int(m[int(m[a.index(p)])+r*6])
print a[r]
```
[Try it here](http://ideone.com/65tgUh)
[Answer]
## Perl 5, 67 bytes
79 bytes really, but there's a 15% bonus.
```
$a{$_}=""for split/[+\s]/,<>;@_=%a;say@_<3?@_:I~~@_||We~~@_?We:You~~@_?You:They
```
[Answer]
# Ruby, ~~150~~ ~~136~~ ~~131~~ ~~119~~ 111 bytes
```
ARGV.each{|a|puts %w[We You I He They][a.bytes.inject(0){|m,c|m|({87=>15,73=>7,89=>11,84=>9,72=>8}[c]||0)}%5]}
```
Bonus feature: handles multiple expressions on the same command line.
]