始める前に、持っているものの表現が必要です。私は次のようにsthを提案します:
points = [ None, # dummy value to fill index 0 (we want to start at 1)
None, None, None, None, None, None, # for the first six atoms
(5, 4, '&'), # for point 7
(7, 3, '|'), # for point 8
(8, 2, '|'), # for point 9
(9, 7, '&') ] # for point 10
次に、数式を文字列として作成するのは再帰的です。
def formula(points, n):
if points[n] is None:
return str(n)
a, b, operator = points[n]
return '(%s %s %s)' % (formula(points, a), operator, formula(points, b))
print formula(points, 10)
これは印刷されます
((((5 & 4) | 3) | 2) & (5 & 4))
数式で使用されるすべてのポイントをセットとして取得するには、次のようにします。
def used(points, n):
if points[n] is None:
return { n }
a, b, operator = points[n]
return used(points, a) | used(points, b)
print used(points, 10)
印刷されます:
set([2, 3, 4, 5])