対応するかっこのインデックスを返す
Brainfuck のインタプリタを作ろうかと思って。
これはなに
かっこ ([
と ]
) の対応を調べる。
対応するかっこがあればそのインデクスを返す。
なければ -1
を返す。
そもそもかっこでなければ自分のインデクスを返す。
例:
let str = '++[>++[>++<-]<-]>>';
let foo = bracket(str, 2); // 15
let bar = bracket(str, 12); // 6
let baz = bracket(str, 7); // 7
let err = '[[[][][]][][]';
let qux = bracket(err, 0); // -1
function bracket(s, p) {
if (!/\]|\[/.test(s[p])) {
return p;
}
let nest = 1;
if (s[p] === '[') {
for (p++; nest; p++) {
if (p >= s.length) { return -1; }
s[p] === '[' && nest++;
s[p] === ']' && nest--;
}
p--;
}
else {
for (p--; nest; p--) {
if (p < 0) { return -1; }
s[p] === ']' && nest++;
s[p] === '[' && nest--;
}
p++;
}
return p;
}