Re: [問題] boolean state 比對

看板Perl作者 (可愛中央處理器)時間18年前 (2006/11/21 13:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
#!/usr/bin/perl sub test{ @a=split/\+\s/,shift; for(@a){ $count=$_=~tr/!//d; $i=ord($_)-0x41; if(!$table[$i]){ $table[$i]=1+$count; } elsif($table[$i]!=(1+$count)){ return 1; } } return 0; } $str='A + B + !C + !A';#傳入input state,字母用大寫 print &test($str)?'True':'False',$/; ※ 引述《dalie (新竹到台北的共乘)》之銘言: : 跟上篇文章很像 : 給定 3 個 input: A, B, C : 假設每個 input 的值, 不是 0 就是 1, : 所以 3 個 input 共有 8 種組合 : 今天要做的, : 是檢查另一組輸入, 看看是否 cover 以上的 8 種組合 : 舉例來說, : 輸入兩個 state : "A" 與 "!A" : "A" 表示 A=1, 而其他 input (B, C) 沒有給值, 表示 0 或 1, 所以我們有 : A B C : 1 0 0 : 1 0 1 : 1 1 0 : 1 1 1 : "!A" 表示 A=0, 而其他 input (B, C) 沒有給值, 表示 0 或 1, 所以我們有 : A B C : 0 0 0 : 0 0 1 : 0 1 0 : 0 1 1 : 以上兩種組合做聯集, 剛好就 cover 了 A, B, C 的 full state, : 如果今天輸入的是 : "A" 與 "B" : "A" 表示 A=1, 而其他 input (B, C) 沒有給值, 表示 0 或 1 : A B C : 1 0 0 : 1 0 1 : 1 1 0 : 1 1 1 : "B" 表示 B=1, 而其他 input (A, C, D) 沒有給值, 表示 0 或 1 : A B C : 0 1 0 : 0 1 1 : 1 1 0 : 1 1 1 : 以上兩種組合的聯集, 並沒有 cover 到 A, B, C 的 full state : (有重複兩個, 只交集了 6 個 state) : 目前我打算用 hash 或是 array, 先把 input 的全部 state 給儲存起來 : 然後針對待測試的 input state, 展開, 一個一個回頭去查表 : 如果能 100% match, 就 return true, 不然就是 false : 只是這樣, 當我的 input 很多個時候, 就會變得很慢 (2^n大小的 table) : 不知道有沒有比較好的作法呢? : 謝謝各位:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.185.140
文章代碼(AID): #15OfDlNk (Perl)
討論串 (同標題文章)
文章代碼(AID): #15OfDlNk (Perl)