首页 文章

加密单词循环移位值到其单词java脚本结尾的每个字母

提问于
浏览
0

我想从单词java脚本的末尾加密单词循环移位值到每个字母 . 这个循环移位的值由它的单词结尾处的字母位置决定 . 每个字母的移位值是其最右侧字符的索引值(从0开始) .

function encryptWords(str) {
    // you can comment this line
    str = str.toLowerCase();

    var result = '';
    var charcode = 0;

    for (var i = str.length -1 ; i > = 0; i--) {
        charcode = (str[i].charCodeAt()) + i;
        result += String.fromCharCode(charcode);
    }
    return result;

}
console.log(encryptWords('yum feed'));

例如, "yum feed" 中的移位值是

yum : m-> 0, u -> 1, y -> 2;
feed : d->0, e->1, e->2, f->3
"avm igfd"

2 回答

  • 2

    您的代码适用于单个单词 .

    但是对于包含2个或更多单词的字符串,您可以尝试使用Array.map()两次:一次用于单词,一次用于这些单词中的字符 .

    function CaesarCipher(str, num) {
      // you can comment this line
      str = str.toLowerCase();
      var charcode = 0;
    
      var result = str.split(' ').map(
        val => val.split('').map(
          (c, i) => {
            // shifting of the chars, based on their index values
            charcode = 97 + (
              (c.charCodeAt() + val.length - 1 - i) - 97
          //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ shift
            ) % 26; 
          //  ^^^^ to avoid chars higher than 'z'
          
            return String.fromCharCode(charcode);
          }
        ).join('')
      ).join(' ');
      
      return result;
    }
    console.log(CaesarCipher('yum feed', 2));
    
  • 0
    function encryptWords(str) {
        return str
            .split(' ')
            .map(s => [...s]
                .map((c, i) => String.fromCharCode(97 + (c.charCodeAt(0) + s.length - i - 98) % 26))
                .join('')
            )
            .join(' ');
    }
    
    console.log(encryptWords('yum feed'));
    

相关问题