Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where is my implementation of rot13 in JavaScript going wrong?

Code in question with syntax highlighting here: via Friendpaste

rot13.js:

ERRONEOUS

<script> String.prototype.rot13 = rot13 = function(s)  {     return (s = (s) ? s : this).split('').map(function(_)      {         if (!_.match(/[A-Za-z]/)) return _;         c = Math.floor(_.charCodeAt(0) / 97);         k = (_.toLowerCase().charCodeAt(0) - 96) % 26 + 13;         return String.fromCharCode(k + ((c == 0) ? 64 : 96));      }).join('');  }; </script> 

As you can see, using quite literally a single line to attach a method to the String object a la prototyping, I'm having a map() method that I previously set up (I know for sure that that code works perfectly; it's simply iterating over each element in the array and applying the function specified in the parameter) go over each character in a string and do what I thought were the proper calculations to transform the string into it's rot13'd counterpart. I was sadly mistaken. Can anybody spot where I went wrong?

like image 355
Hexagon Theory Avatar asked Mar 06 '09 03:03

Hexagon Theory


1 Answers

You could use the super-short:

s.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}); 
like image 146
Sophie Alpert Avatar answered Oct 04 '22 15:10

Sophie Alpert