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'));