eightHundreds
8/15/2018 - 12:52 AM

js奇技淫巧


// https://www.codewars.com/kata/reviews/57a5c44ae08254d7a4000125/groups/57a99d9272292d50e4000a0d
// 加解密问题
// 加密是将奇数字符组成的字符串拼接偶数字符组成的字符串,执行n次
// 解密是将前半字符串与后半字符串并行循环拼接
// 该解决方案巧妙地使用正则表达式实现上述两种做法

function encrypt(text, n) {
  for (let i = 0; i < n; i++) {
    text = text && text.replace(/.(.|$)/g, '$1') + text.replace(/(.)./g, '$1') 
  }
  return text
}

function decrypt(text, n) {
  let l = text && text.length / 2 | 0
  for (let i = 0; i < n; i++) {
    // 替换后半字符串,替换时让每个字符后追加前半字符串中地字符
    text = text.slice(l).replace(/./g, (_, i) => _ + (i < l ? text[i] : ''))
  }
  return text
}