知恵袋の「ウソつき問題」をPythonで解いてみた。(3)

 知恵袋の「ウソつき問題」をPythonで解いてみました。(^_^;

 A~Eの5人が次のように発言している
A「Bはウソつきだ」
B「Cはウソつきではない」
C「D.Eはどちらもウソつきだ」
D「Eはウソつきだ」
E「私はウソつきではない」
5人のうち、何人かがウソをついている。このとき確実にいえることはどれか。
選択肢
1、Aはウソつきである
2、Bはウソつきである
3、Cはウソつきではない
4、Dはウソつきである
5、Eはウソつきではない

 自分で解くとすれば、GW法を用いるようです。
 ちなみに、「僕はうそつきじゃない」は正直者もうそつきも言うから参考にはならない、そうです。コメントアウトしても同じ結果を得ます。(^_^;

● Liar3.py

# coding: UTF-8
# Liar3.py

import itertools
from time import time

# 論理等価Eqv
def Eqv(p,q):
    return not(p^q)

# 真理値表の1行を文字列で得る
def getRowOfTruthTable(lst):
    result = ""
    for b in lst:
        result += " T" if b else " F"
    return result

def main():
    tm = time()  # Timer Start
    choices = [True]*5
    TF = (True,False)
    cnt = 0
    for p in itertools.product(TF,repeat=5):
        a,b,c,d,e = p
        if not Eqv(a,b==False): continue
        if not Eqv(b,c!=False): continue
        if not Eqv(c,d==False and e==False): continue
        if not Eqv(d,e==False): continue
        if not Eqv(e,e!=False): continue
        # チェックを潜り抜けたものだけを表示
        cnt+=1
        if cnt==1: print('[A B C D E]')
        print('%s'%getRowOfTruthTable([a,b,c,d,e]))
         # 選択肢のチェック
        choices[0] &= (a==False)
        choices[1] &= (b==False)
        choices[2] &= (c!=False)
        choices[3] &= (d==False)
        choices[4] &= (e!=False)

    s = ""
    if cnt==0: choices = [False]*5
    for c in choices:
        if c : s+=" %s"%(choices.index(c)+1)
    print(u"∴%s"%s)
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

[A B C D E]
 T F F T F
 T F F F T
∴ 2
Runtime : 0.000 [sec]

※参考URL
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1121910336
ウソつき問題とGW法 - PSM
知恵袋の「ウソつき問題」をPythonで解いてみた。 - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(2) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(3) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(4) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(5) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(6) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(7) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(8) - rscのブログ
知恵袋の「ウソつき問題」をPythonで解いてみた。(9) - rscのブログ
OKWAVEの「ウソつき問題」をPythonで解いてみた。 - rscのブログ
天使と悪魔と道化の「ウソつき問題」をPythonで解いてみた。 - rscのブログ
知恵袋の「うそつき問題」をJavaで解いてみた。
ネットで見つけた「うそつき問題」をJavaで解いてみた。
ネットで見つけた「うそつき問題」を自分で解いてみた。
2つの発言の「うそつき問題」をJavaで解いてみた。