ユークリッド幾何学以外における記述法と三角形定理ループの統合
元の記述法と統合することになったんで、まずは三角形定理ループだとかを元の記述法に置き換えてみた。
triangle_lst = [
"△ABC" : ["HAI", "AB", "CBI", "BC", "BCH", "AC"],
"△ACD" : ["DAH", "AC", "DCH", "CD", "ADC", "AD"],
"△ADH" : ["DAH", "AD", "ADG", "DH", "AHG", "AH"],
"△ADI" : ["DAI", "AD", "ADG", "DI", "AIH", "AI"],
"△AHI" : ["HAI", "AH", "AHI", "HI", "AIH", "AI"],
"△BEI" : ["EBI", "BE", "BEI", "EI", "BIE", "BI"],
"△CDE" : ["BCD", "CD", "CDG", "DE", "BEI", "CE"],
"△CDG" : ["DCG", "CD", "CDG", "DG", "CGD", "CG"],
"△CDH" : ["DCH", "CD", "CDG", "DH", "CHG", "CH"],
"△CEF" : ["BCF", "CE", "BEF", "EF", "CFE", "CF"],
"△CEG" : ["BCG", "CE", "BEI", "EG", "CGH", "CG"],
"△CEH" : ["BCH", "CE", "BEI", "EH", "CHI", "CH"],
"△CGH" : ["GCH", "CG", "CGH", "GH", "CHG", "CH"],
];
"AD" == "BC" == "EG" == "CF";
"AB" == "CD" == "EF" == "CG";
"DAI" == "BCD" == "FEI" == "EBI" == "CGD";
"ADC" == "CBI" == "CFE" == "CGH";
"AHG" == "CHI";
"AHI" == "CHG" == "FCH";
"AIH" == "BIE" == "CGG";
"AIE" == "BIH";
"DAH" == "BCH";
"ADG" == "BEI" == "BCF";
"HAI" == "DCH";
"BEF" == "BCG";
"DAH" + "HAI" == "DAI";
"EBI" + "CBI" == 180;
"DCG" + "GCH" == "DCH";
"GCH" + "BCH" == "BCG";
"BCH" + "BCF" == "FCH";
"DCH" + "BCH" == "BCD";
"BCG" + "DCG" == "BCD";
"BCG" + "BCF" == "FCG";
"FCH" + "GCH" == "FCG";
"BCD" + "BCF" == "DCF";
"FCG" + "DCG" == "DCF";
"ADG" + "CDG" == "ADC";
"BEI" + "BEF" == "FEI";
"CGD" + "CGH" == 180;
"AHG" + "CHG" == 180;
"AIH" + "AIE" == 180;
"HAI" + "BCH" == "EBI";
"BCG" + "BEI" == "CGD";
"DAH" + "ADG" == "AHI";
"DAI" + "ADG" == "AIE";
"DCG" + "CDG" == "CGH";
"EBI" + "BEI" == "BIH";
"BEI" + "BIE" == "CBI";
"HAI" + "AHI" == "BIH";
"HAI" + "AIH" == "AHG";
"DCH" + "CDG" == "AHG";
"GCH" + "CGH" == "CHI";
"GCH" + "CHG" == "CGD";
"AI" + "BI" == "AB";
"AH" + "CH" == "AC";
"BC" + "BE" == "CE";
"DG" + "EG" == "DE";
"DH" + "EH" == "DE";
"DI" + "EI" == "DE";
"DG" + "GH" == "DH";
"DG" + "GI" == "DI";
"DH" + "HI" == "DI";
"EI" + "GI" == "EG";
"EH" + "GH" == "EG";
"EI" + "HI" == "EH";
"GH" + "HI" == "GI";
def ele1_equal_ele2(ele1, ele2, loop_flg, exe_flg) {
if not (ele1 == ele2) {
ele1 == ele2;
loop_flg := True;
exe_flg := True;
}
return loop_flg, exe_flg;
}
def isosceles_angle_check(triangle_lst, exe_flg) {
loop_flg := True;
while loop_flg {
loop_flg := False;
for tri1 in triangle_lst.values() {
for angle1, angle2, side1, side2 in [(tri1[0], tri1[2], tri1[5], tri1[3]), (tri1[2], tri1[4], tri1[1], tri1[5]), (tri1[0], tri1[4], tri1[1], tri1[3])] {
if angle_1 == angle_2 {
loop_flg, exe_flg := ele1_equal_ele2(side1, side2, loop_flg, exe_flg);
}
}
}
}
return triangle_lst, exe_flg;
}
def isosceles_side_check(triangle_lst, exe_flg) {
loop_flg := True;
while loop_flg {
loop_flg := False;
for tri1 in triangle_lst.values() {
for side1, side2, angle1, angle2 in [(tri1[1], tri1[3], tri1[0], tri1[4]), (tri1[3], tri1[5], tri1[2], tri1[0]), (tri1[1], tri1[5], tri1[2], tri1[4])] {
if side1 == side2 {
loop_flg, exe_flg := ele1_equal_ele2(angle1, angle2, loop_flg, exe_flg);
}
}
}
}
return triangle_lst, exe_flg;
}
def two_angle_check(triangle_lst, exe_flg) {
loop_flg := True;
while loop_flg {
loop_flg := False;
for tri1 in triangle_lst.values() {
for tri2 in triangle_lst.values() {
if tri1 == tri2 {
continue;
}
for angle_1_A, angle_1_B in itertools.combinations([tri1[0], tri1[2], tri1[4]], 2) {
for angle_2_A, angle_2_B in itertools.combinations([tri2[0], tri2[2], tri2[4]], 2) {
if (angle_1_A, angle_1_B) == (angle_2_A, angle_2_B) {
angle_1_C := [A for A in [tri1[0], tri1[2], tri1[4]] if A not in [angle_1_A, angle_1_B]][0];
angle_2_C := [A for A in [tri2[0], tri2[2], tri2[4]] if A not in [angle_2_A, angle_2_B]][0];
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
}
}
}
}
}
}
return triangle_lst, exe_flg;
}
def angle_side_angle(triangle_lst, exe_flg) {
loop_flg := True;
while loop_flg {
loop_flg := False;
for tri1 in triangle_lst.values() {
for tri2 in triangle_lst.values() {
if tri1 == tri2 {
continue;
}
for angle_1_A, side_1, angle_1_B, side_1_X, angle_1_C, side_1_Y in [(tri1[0], tri1[1], tri1[2], tri1[3], tri1[4], tri1[5]), \
(tri1[2], tri1[3], tri1[4], tri1[5], tri1[0], tri1[1]), \
(tri1[4], tri1[5], tri1[0], tri1[1], tri1[2], tri1[3])] {
for angle_2_A, side_2, angle_2_B, side_2_X, angle_2_C, side_2_Y in [(tri2[0], tri2[1], tri2[2], tri2[3], tri2[4], tri2[5]), \
(tri2[2], tri2[3], tri2[4], tri2[5], tri2[0], tri2[1]), \
(tri2[4], tri2[5], tri2[0], tri2[1], tri2[2], tri2[3])] {
if side_1 == side_2 && (angle_1_A, angle_1_B) == (angle_2_A, angle_2_B) {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
if angle_1_A == angle_2_A {
loop_flg, exe_flg := ele1_equal_ele2(side_1_X, side_2_X, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(side_1_Y, side_2_Y, loop_flg, exe_flg);
} else {
loop_flg, exe_flg := ele1_equal_ele2(side_1_X, side_2_Y, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(side_1_Y, side_2_X, loop_flg, exe_flg);
}
}
}
}
}
}
}
return triangle_lst, exe_flg;
}
def side_angle_side(triangle_lst, exe_flg) {
loop_flg := True;
while loop_flg {
loop_flg := False;
for tri1 in triangle_lst.values() {
for tri2 in triangle_lst.values() {
if tri1 == tri2 {
continue;
}
for side_1_A, angle_1, side_1_B, angle_1_X, side_1_C, angle_1_Y in [(tri1[1], tri1[2], tri1[3], tri1[4], tri1[5], tri1[0]), \
(tri1[3], tri1[4], tri1[5], tri1[0], tri1[1], tri1[2]), \
(tri1[5], tri1[0], tri1[1], tri1[2], tri1[3], tri1[4])] {
for side_2_A, angle_2, side_2_B, angle_2_X, side_2_C, angle_2_Y in [(tri2[1], tri2[2], tri2[3], tri2[4], tri2[5], tri2[0]), \
(tri2[3], tri2[4], tri2[5], tri2[0], tri2[1], tri2[2]), \
(tri2[5], tri2[0], tri2[1], tri2[2], tri2[3], tri2[4])] {
if angle_1 == angle_2 and (side_1_A, side_1_B) == (side_2_A, side_2_B) {
loop_flg, exe_flg := ele1_equal_ele2(side_1_C, side_2_C, loop_flg, exe_flg);
if side_1_A == side_2_A {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_X, angle_2_X, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_Y, angle_2_Y, loop_flg, exe_flg);
} else {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_X, angle_2_Y, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_Y, angle_2_X, loop_flg, exe_flg);
}
}
}
}
}
}
}
return triangle_lst, exe_flg;
}
def side_side_side(triangle_lst, exe_flg) {
loop_flg := True;
while loop_flg {
loop_flg := False;
for tri1 in triangle_lst.values() {
for tri2 in triangle_lst.values() {
if tri1 == tri2 {
continue;
}
angle_1_A, side_1_A, angle_1_B, side_1_B, angle_1_C, side_1_C := tri1;
angle_2_A, side_2_A, angle_2_B, side_2_B, angle_2_C, side_2_C := tri2;
if (side_1_A, side_1_B, side_1_C) == (side_2_A, side_2_B, side_2_C) {
if side_1_A == side_2_A {
if side_1_B == side_2_B {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_A, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_B, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
} elif side_1_B == side_2_C {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_B, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_A, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
}
} elif side_1_A == side_2_B {
if side_1_B == side_2_A {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_C, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_B, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_A, loop_flg, exe_flg);
} elif side_1_B == side_2_C {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_B, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_C, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_A, loop_flg, exe_flg);
}
} elif side_1_A == side_2_C {
if side_1_B == side_2_A {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_C, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_A, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_B, loop_flg, exe_flg);
} elif side_1_B == side_2_B {
loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_A, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_C, loop_flg, exe_flg);
loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_B, loop_flg, exe_flg);
}
}
}
}
}
}
return triangle_lst, exe_flg;
}
def triangle_theorem_loop(triangle_lst) {
exe_flg := True;
while exe_flg:
exe_flg := False;
triangle_lst, exe_flg := isosceles_angle_check(triangle_lst, exe_flg);
triangle_lst, exe_flg := isosceles_side_check(triangle_lst, exe_flg);
triangle_lst, exe_flg := two_angle_check(triangle_lst, exe_flg);
triangle_lst, exe_flg := angle_side_angle(triangle_lst, exe_flg);
triangle_lst, exe_flg := side_angle_side(triangle_lst, exe_flg);
triangle_lst, exe_flg := side_side_side(triangle_lst, exe_flg);
return triangle_lst;
}
triangle_lst := triangle_theorem_loop(triangle_lst);