javascript - Codewars 挑战 - Hamelin 的聋鼠 - JavaScript - 如何通过特定字符集拆分字符串?

标签 javascript arrays string

Link to challenge

本质上,这个想法是,如果一只老鼠 - O~ - 面向吹笛者 - P - 然后它会以正确的方式前进。

这是一只向左走的老鼠:O~
这是一只向右走的老鼠:~O
我们想计算一根绳子中有多少“聋鼠”——有多少是面向错误的方向。

这里有 1 只聋鼠:P O~ O~ ~O O~
我的逻辑是首先检查 Piper 是在字符串的左侧还是右侧。

如果他不是,那么我们需要根据Piper在字符串中的位置来拆分字符串,然后计算左侧有多少老鼠没有面对他,右侧有多少老鼠没有面对他。

var countDeafRats = function(town) {
  town = town.replace(/[ ]/g, '');
  let deafCount = 0;
  //if piper's on the left
  if (town[0] === 'P') {
    for (let i = 0; i < town.length; i++) {
      if (town[i] === '~O') {
        deafCount ++;
      }
    }
  }
  //if piper's on the right
  if (town[town.length - 1] === 'P') {
    for (let j = 0; j < town.length; j++) {
      if (town[j] === 'O~') {
        deafCount ++;
      }
    }
  }
  let rats = town.split('P');
  console.log('ratssss', rats);
  let leftRats = [];
  let rightRats = [];
  return deafCount;
}

console.log(countDeafRats("~O~O P ~O~O"));


在上面的例子中,这里是一组老鼠:[ '~O~O', '~O~O' ]所以右边有两只老鼠走错了路(聋鼠)。

我想做的,是将左右老鼠插入各自的阵列中,然后在每个单独的阵列中计数聋鼠。

但我无法拆分字符串 ~O~O通过 ~OO~ .

我想得到 ['~O', '~O']对于leftRats['~O', '~O']对于rightRats .

我试过:
leftRats.push(rats[0].split('~O'));
rightRats.push(rats[1].split('O~'));
console.log('leftRatsssss', leftRats);
console.log('rightRatssss', rightRats);

但它正在做一些与预期截然不同的事情:
leftRatsssss [ [ '', '', '' ] ]
rightRatssss [ [ '~', 'O' ] ]

拆分 不是通过作为参数给出的字符串来拆分字符串。那么,这就是我的问题的真正意义所在 - 你如何将字符串拆分为特定的字符集?

IE。如果我想拆分字符串 'the'通过 'he' , 我想要 'the'成为['t', 'he'] - 我已经为这种情况尝试过正则表达式?

console.log("the".split(/[he]/gi));


这似乎与我想要的相反。那么,有什么建议可以用给定的字符集分割字符串吗?

最佳答案

您可以通过 P 拆分字符串无论如何,然后将每个段(在 P 的左侧和右侧)转换为每个 2 字符 block 的数组。例如 ~O~O P ~O~O变成 ['~O', '~O']对于左 block ,['~O', '~O']对于正确的 block 。然后统计O~的出现次数在第一个 block 中,~O 的出现次数在第二 block :

var countDeafRats = function(town) {
  const [leftRats, rightRats] = town
    .replace(/[^O~P]/g, '')
    .split('P')
    .map(segment => segment.match(/.{2}/g) || []);
  return (
    leftRats.reduce((a, rat) => a + (rat === 'O~'), 0) +
    rightRats.reduce((a, rat) => a + (rat === '~O'), 0)
  );
}

console.log(countDeafRats("~O~O P ~O~O"));

关于javascript - Codewars 挑战 - Hamelin 的聋鼠 - JavaScript - 如何通过特定字符集拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59449083/

相关文章:

c - 关于C中指针和字符串的问题

C++ multimap<int, vector<string>> 内存分配问题

c++ - "terminated by a zero"是什么意思?

java - Java中字符串到整数的解决方案

javascript - if 语句中的 .ajax 仅间歇性触发 jquery

javascript - 重新启用按钮、链接按钮、链接

C可扩展数组

javascript - 通过Javascript获取链接的值

javascript - select2 - 在选择时提交表单

c - 使用指针而不是索引进行排序