Rank to Rating Conversion
Reverse engineer OpenGotha's Rank -> Rating math.
by nate
JavaScript
function rankToRating(rank) {
let [str, number, category] = rank.match(/([0-9]{1,2})([Kk]|[Dd]|[Pp]){1,1}/);
//console.log(rank);
console.log(str, number, category);
number = Number(number);
category = category.toLowerCase();
if (
number < 1
|| number > 30 && category === 'k'
|| number > 7 && category === 'd'
) {
throw new Error('RANGE_ERROR');
}
if (category === 'p') {
throw new Error('UNSURE_HOW_TO_DEAL_WITH_PROS');
}
if (category === 'd') {
number += 29;
}
let baseRating = -900;
let ratingValue = (category === 'k' ? 30 - number : number) * 100;
return ratingValue + baseRating;
}
console.log(rankToRating('30k'));
console.log(rankToRating('25K'));
console.log(rankToRating('21kyu'));
console.log(rankToRating('15k'));
console.log(rankToRating('9KYU'));
console.log(rankToRating('1k'));
console.log(rankToRating('1d'));
console.log(rankToRating('2dan'));
console.log(rankToRating('3D'));
console.log(rankToRating('4Dan'));
console.log(rankToRating('9Dan'));
console.log(rankToRating('9pro'));