数的推理のテストの得点差の問題をPythonで解いてみた。

 知恵袋で見つけた数的推理のテストの得点差の問題Pythonで解いてみました。(^_^;

 A~Eの五人が100点満点のテストを受けた結果について次のことがわかっている。
(ア) AとBの得点差は16
(イ) BとCの得点差は33
(ウ) CとDの得点差は25
(エ) DとEの得点差は37
(オ) EとAの得点差は29
 Dの得点がこの五人の平均点52.4より低いときBの得点はいくつか?

 aを仮平均として、その相対値をra(=0)~re(=e-a)としました。
 得点差の条件から相対値を求めて、仮平均と平均値の公式から、仮平均aを求め、その相対値からb他の値を求めました。
 必要ありませんが参考までに、ランキング表も付けておきました。

●仮平均と平均値の公式
 \overline{x}=\frac{x_1+x_2+\cdots+x_n}{n}=x_0+\frac{(x_1-x_0)+(x_2-x_0)+\cdots+(x_n-x_0)}{n}

● PointDiff2.py

# coding: UTF-8
# PointDiff2.py

from time import time
import itertools

# a[]の中で n 番目に大きな数値を取得する
def Large(a,n):
    m = len(a)
    b = sorted(a)
    if(n< 1 or m< n): n=1   # n が範囲外の時は、n=1
    return b[m-n]

# a[]に先頭からA~Eと名前をつけて、n 番目に大きいものの名前を取得する
def getNameOfLarge(a,n):
    NAME = "ABCDE"
    return NAME[a.index(Large(a,n))]

# a[]に先頭からA~Eと名前をつけて、大きい順に名前を並べた文字列を返す
def getRanking(a):
    n = len(a)
    s = ''
    for i in range(n):
        s+=getNameOfLarge(a,i+1)
    return s

def main():
    tm = time() # Timer Start
    AB,BC,CD,DE,EA = 16,33,25,37,29     # 得点差
    M = 52.4    # 平均値
    ra = 0      # raを0(aを仮平均)として、rb~reの相対値を調べる。
    for rb in (ra-AB,ra+AB):                        # 条件ア
        for rc in (rb-BC,rb+BC):                    # 条件イ
            for rd in (rc-CD,rc+CD):                # 条件ウ
                for re in (rd-DE,rd+DE):            # 条件エ
                    if abs(ra-re)!=EA: continue     # 条件オ
                    n = (ra,rb,rc,rd,re)
                    a = M-sum(n)/5      # 仮平均と平均値の公式から
                    m = (a,b,c,d,e) = (ra+a,rb+a,rc+a,rd+a,re+a)
                    if not d< M: continue
                    pass # チェックを潜り抜けたものだけを表示
                    print(m)
                    print('%s : %s'%(getRanking(n), sorted(m,reverse=True)))
                    print(u"∴%g"%b)

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

if __name__ == '__main__':
    main()

●実行結果

(48.0, 32.0, 65.0, 40.0, 77.0)
ECADB : [77.0, 65.0, 48.0, 40.0, 32.0]
∴32
Runtime : 0.000 [sec]

※参考URL
平均値と仮平均の利用 - 高校数学.net
判断推理の身長差の問題をJavaで解いてみた。 - rscのブログ
判断推理のテストの得点差の問題をPythonで解いてみた。 - rscのブログ