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
通过 ~O
或 O~
.我想得到
['~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/