Re: [問題] boolean state 比對
#!/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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章