generated at
✅状態遷移機械をexportする

2022-01-23
16:19:14 merged
2022-01-19
13:52:18 状態遷移機械を遷移させる函数を外部に切り出した
ついでに状態をlogに出してみたのだが、表示されたビットと挙動が違うようなので困惑している
コード
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, pats[0], pats[1], 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 & pats[2]) !== 0).reverse());
最後の受理判定は確かに正しかった
いや、問題ないのか?
受理判定は問題なさそう
双方のbitがともに 1 である桁が少なくとも1つあれば (bit & pats[2]) !== 0 true になる
14:07:45 わかった。ゼロ埋めに失敗していたんだ
以下の例なら、最大桁数の8でゼロ埋めしないといけない
txt
10000000 1000000 100000
さもないと先頭が全て1になってしまう
14:12:14 コードを直した

#2022-01-23 16:17:28