Which Go rank is higher?
JavaScript (ES7), 58 bytes

Takes the two strings in currying syntax (a)(b).



a=&gt;b=&gt;(g=s=&gt;parseInt(s)*'_dp'.search(s[1])**3)(a)&gt;g(b)?a:b


Try it online!

How?

The helper function g() translate the input string s into a score.

1) We look for s[1] into the string "_dp". This gives:


1 for a dan rank "xd"
2 for a professional dan rank "xp"
-1 for a kyū rank "xk" or "xxk" because s[1] is either "k" or a digit


2) We cube this result, which leaves 1 and -1 unchanged but gives 8 for a professional dan rank.

3) We multiply by the decimal part of the rank.