DEV Community

Discussion on: ROT13: awful answers only

Collapse
 
mellen profile image
Matt Ellen

To set the ball rolling:

(function ()
{
  let input = '066085033032076066072032078069082032078074083072089044032079072071032086032089086088082032076066072046'; 

  function parseInteger(str)
  {
    let num = 0;

    for(let i = 0; i < str.length; i++)
    {
      let pn = parseInt(str[i], 10);
      num += pn * Math.pow(10, (str.length-1)-i);
    }

    return num;
  }

  function decodeASCIIPoint(num)
  {
    let p = document.createElement('p');
    p.innerHTML = `&#${num};`;
    return p.textContent;
  }

  function numbersToString(nums)
  {
    let parts = nums.match(/\d\d\d/g);

    let str = '';

    for(let i = 0; i < parts.length; i++)
    {
      let part = parts[i];
      let num = parseInteger(part);
      str += decodeASCIIPoint(num);
    }

    return str;
  }

  function rot13(str)
  {
    let chars = str.split('');
    let result = '';

    for(let ci = 0; ci < chars.length; ci++)
    {
      switch(chars[ci])
      {
        case 'A':
          result += 'N';
          break;
        case 'B':
          result += 'O';
          break;
        case 'C':
          result += 'P';
          break;
        case 'D':
          result += 'Q';
          break;
        case 'E':
          result += 'R';
          break;
        case 'F':
          result += 'S';
          break;
        case 'G':
          result += 'T';
          break;
        case 'H':
          result += 'U';
          break;
        case 'I':
          result += 'V';
          break;
        case 'J':
          result += 'W';
          break;
        case 'K':
          result += 'X';
          break;
        case 'L':
          result += 'Y';
          break;
        case 'M':
          result += 'Z';
          break;
        case 'N':
          result += 'A';
          break;
        case 'O':
          result += 'B';
          break;
        case 'P':
          result += 'C';
          break;
        case 'Q':
          result += 'D';
          break;
        case 'R':
          result += 'E';
          break;
        case 'S':
          result += 'F';
          break;
        case 'T':
          result += 'G';
          break;
        case 'U':
          result += 'H';
          break;
        case 'V':
          result += 'I';
          break;
        case 'W':
          result += 'J';
          break;
        case 'X':
          result += 'K';
          break;
        case 'Y':
          result += 'L';
          break;
        case 'Z':
          result += 'M';
          break;
        default:
          result += chars[ci];
      }
    }

    return result;
  }

  return rot13(numbersToString(input));
})();
Enter fullscreen mode Exit fullscreen mode