Rings in the Squareの問題をPythonで解いてみました。(^_^;
点は、p=0〜8の整数値で与えて、p%3でx座標、p//3でy座標を得ています。
6---7---8 (0,2)---(1,2)---(2,2) | | | | | | 3---4---5 → (0,1)---(1,1)---(2,1) | | | | | | 0---1---2 (0,0)---(1,0)---(2,0)
4点が同一円周上にある条件は行列式を使って次の通りです。
※参考URL
●Circumcircle -- from Wolfram MathWorld
●Rings in the Squareの問題をPythonで解いてみた。(2)
● RingsInTheSquare.py
# coding: UTF-8 # RingsInTheSquare.py import itertools from time import time def det3(m): r = m[0][0]*m[1][1]*m[2][2]+m[0][1]*m[1][2]*m[2][0]+m[0][2]*m[1][0]*m[2][1] r-= m[0][2]*m[1][1]*m[2][0]+m[0][1]*m[1][0]*m[2][2]+m[0][0]*m[1][2]*m[2][1] return r def main(): tm=time() # Timer Start Points = range(9) cnt = 0 for p in itertools.combinations(Points,4): x = [n%3 for n in p] y = [n//3 for n in p] m = [[x[i]**2+y[i]**2-(x[0]**2+y[0]**2),x[i]-x[0],y[i]-y[0]] for i in range(1,3+1)] if det3(m)!=0 : continue # チェックを潜り抜けたものだけを出力 cnt+=1 print("%2d : %s"%(cnt,p)) tm=time()-tm # Timer Stop print("Runtime : %.3f [sec]"%tm) if __name__ == '__main__': main()
●実行結果
1 : (0, 1, 3, 4) 2 : (0, 1, 5, 8) 3 : (0, 1, 6, 7) 4 : (0, 2, 3, 5) 5 : (0, 2, 6, 8) 6 : (0, 3, 7, 8) 7 : (1, 2, 3, 6) 8 : (1, 2, 4, 5) 9 : (1, 2, 7, 8) 10 : (1, 3, 5, 7) 11 : (2, 5, 6, 7) 12 : (3, 4, 6, 7) 13 : (3, 5, 6, 8) 14 : (4, 5, 7, 8) Runtime : 0.005 [sec]
※参考図
6---7---8 | | | 3---4---5 | | | 0---1---2
- 作者: 坪崎誠司
- 出版社/メーカー: 株式会社プレスティージ
- 発売日: 2010/07/06
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る