知恵袋で見つけた判断推理のトーナメントの問題をPythonで解いてみた。

 知恵袋で見つけた判断推理のトーナメントの問題Pythonで解いてみました。(^_^;
 A〜Hの最初の持ち点をa〜hとして、A vs.Bの勝者Pの得点をp、C vs.Dの勝者Qの得点をq、P vs.Qの勝者Rの得点をr、G vs.Hの勝者Sの得点をs、F vs.Sの勝者Tの得点をt、E vs.Tの勝者Uの得点をu、R vs.Uの勝者Vの得点をvとしました。

● Tournament1.py

# coding: UTF-8
# Tournament1.py

import itertools
from time import time

def main():
    tm=time()  # Timer Start

    choices = [True]*5
    b = f = 3                       # 条件エ
    d = 1                           # 条件オ
    for p in itertools.product(range(1,4),repeat=4):
        a,c,e,h = p
        g = a                       # 条件ウ
        if not(g> h): continue      # 条件カ
        p,q,s = (a+b)%4,(c+d)%4,(g+h)%4
        t = (f+s)%4
        r,u = (p+q)%4,(e+t)%4
        #print p,q,r,s,t,u
        if p*q*r*s*t*u==0: continue # 条件ア
        v = (r+u)%4
        if v!=2: continue           # 条件イ
        # チェックを潜り抜けたものだけを表示
        print((a,b,c,d,e,f,g,h))
        # 選択肢のチェック
        choices[0] &= (a==c)
        choices[1] &= (a==e==2)
        choices[2] &= (c==e)
        choices[3] &= (c==h==2)
        choices[4] &= (e==g)

    s = ""
    for c in choices:
        if c : s+="%s "%(choices.index(c)+1)
    print(u"∴ %s"%s)

    tm=time()-tm  # Timer Stop
    print("Runtime : %.3f [sec]"%tm)

if __name__ == '__main__':
    main()

●実行結果

(2, 3, 1, 1, 1, 3, 2, 1)
∴ 3
Runtime : 0.002 [sec]

※参考URL
●配列操作の比較表: Ruby, Python, JavaScript, Perl, C++
http://0xcc.net/blog/archives/000043.html
知恵袋で見つけた判断推理のトーナメントの問題をPythonで解いてみた。(2)
知恵袋で見つけた判断推理のトーナメントの問題をPythonで解いてみた。(3)

Pythonスタートブック

Pythonスタートブック

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

Python入門[2&3対応]

Python入門[2&3対応]