去年と今年の身長の推理パズルをPythonで解いてみた。

 ネットで見つけた去年と今年の身長の推理パズルの問題Pythonで解いてみました。(^_^;
 問題の概要を記号や式で表してみると、次の通りです。

 稲沢,国分,長岡,宮田,吉川の5人について、去年と今年のどちらの年も、それぞれ身長は違ってる。
 去年の身長[cm]:{142,145,147,148,150}
 今年の身長[cm]:{146,148,151,153,155}
 次の条件から、「吉川さんは何cm身長が伸びたでしょう」
(ア) {稲沢の今年の身長}= 151[cm]
(イ) {去年と今年を比べて、一番伸びた身長}= 8[cm],
   {長岡の伸びた身長}= 3[cm]
(ウ) ∀{伸びた身長}> 0 → {伸びた身長の最小値}> 0
(エ) {国分の去年の身長}<{吉川の去年の身長},
   {国分の今年の身長}>{吉川の今年の身長}
(オ) {稲沢の伸びた身長}≧ 2[cm],
   {国分の今年の身長}≠ 148[cm]

 ただし、{伸びた身長}={今年の身長}−{去年の身長}で、条件に(ア)〜(オ)と名前を付けました。また、プログラムでは、次のような略号を用いました。

 名前:(稲沢,国分,長岡,宮田,吉川)=(稲,国,長,宮,吉)

 ちなみに、「みんな身長が伸びた」ということは、「{伸びた身長の最小値}> 0」ということですよね。(^_^;

● Height1.py

# coding: UTF-8
# Height1.py

from time import time
import itertools

def main():
    tm = time()  # Timer Start
    N = u'稲国長宮吉'           # 名前(固定)
    L = (142,145,147,148,150)   # 去年の身長
    T = (146,148,151,153,155)   # 今年の身長
    for l in itertools.permutations(L):
        if not l[N.index(u'国')]< l[N.index(u'吉')]: continue     # 条件(エ-1)
        for t in itertools.permutations(T):
            if not t[N.index(u'稲')]==151: continue               # 条件(ア)
            if not t[N.index(u'国')]!=148: continue               # 条件(オ-2)
            dH = []     # 伸びた身長のリスト
            for n in N:
                dH.append(t[N.index(n)]-l[N.index(n)])
            if not max(dH)==8: continue                           # 条件(イ-1)
            if not min(dH)> 0: continue                           # 条件(ウ)
            if not dH[N.index(u'長')]==3: continue                # 条件(イ-2)
            if not dH[N.index(u'稲')]>=2: continue                # 条件(オ-1)
            if not t[N.index(u'国')]> t[N.index(u'吉')]: continue # 条件(エ-2)
            # チェックを潜り抜けたものだけを表示
            print('[ %s ]'%',  '.join(N))
            print(l)
            print(t)
            print(u'∴ %d[cm]'%dH[N.index(u'吉')])

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

if __name__ == '__main__':
    main()

●実行結果

[ 稲,  国,  長,  宮,  吉 ]
(148, 147, 145, 142, 150)
(151, 155, 148, 146, 153)
∴ 3[cm]
Runtime : 0.025 [sec]

※参考URL
買い物の推理パズルをPythonで解いてみた。
花火大会の推理パズルをPythonで解いてみた。
タワーの推理パズルをPythonで解いてみた。
昼食の推理パズルをPythonで解いてみた。
買い物の推理パズルをPythonで解いてみた。(2)
願い事の推理パズルをPythonで解いてみた。