✅状態遷移機械をexportする
2022-01-23
2022-01-19
13:52:18 状態遷移機械を遷移させる函数を外部に切り出した ついでに状態をlogに出してみたのだが、表示されたビットと挙動が違うようなので困惑している
コード
code:log.ts
import { Asearch, INITSTATE, moveState, preparePatterns } from "./mod.ts";
const source = "abcde";
const pats = preparePatterns(source);
let state = INITSTATE;
const pattern = "abcde";
const format = (n: number) =>
((n | 0) >>> 0).toString(2).padStart(32, "0").slice(
0,
Math.max(pattern.length, source.length) + 1,
);
const printTable = (state: number[]) =>
state.map((bit) => \t${format(bit)}).reverse().join("\n");
console.log(printTable(state));
for (const char of pattern) {
state = moveState(char, pats0, pats1, state); console.log(
input ${char}\t${format(pats[0].get(char) ?? 0)},
);
console.log(printTable(state));
}
console.log(
accept \t${format(pats[2])},
);
console.log(state.map((bit) => (bit & pats2) !== 0).reverse()); 最後の受理判定は確かに正しかった
いや、問題ないのか?
受理判定は問題なさそう
双方のbitがともに1である桁が少なくとも1つあれば(bit & pats[2]) !== 0がtrueになる
14:07:45 わかった。ゼロ埋めに失敗していたんだ
以下の例なら、最大桁数の8でゼロ埋めしないといけない
code:txt
10000000
1000000
100000
さもないと先頭が全て1になってしまう
14:12:14 コードを直した