Last active
July 31, 2023 22:35
-
-
Save jakelevi1996/db0e307905aa5aab86f793227d2be597 to your computer and use it in GitHub Desktop.
Make tables and trees for recursive functions defined in Chapter 5 of GEB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_fm(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("f_n", width=10, title="F(n)"), | |
util.Column("m_n", width=10, title="M(n)"), | |
util.Column("m_f_n", width=10, title="M(F(n))"), | |
util.Column("f_m_n", width=10, title="F(M(n))"), | |
printer=printer, | |
) | |
f = {0: 1} | |
m = {0: 0} | |
table.update(n=0, f_n=f[0], m_n=m[0]) | |
for n in range(1, n_max + 1): | |
m[n] = n - f[m[n - 1]] | |
f[n] = n - m[f[n - 1]] | |
table.update(n=n, f_n=f[n], m_n=m[n], m_f_n=m[f[n]], f_m_n=f[m[n]]) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_fm.txt", ".") | |
table = diagram_fm(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("m_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("f_n")) | |
tree.print_tree_dict(tree_dict, 2, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | F(n) | M(n) | M(F(n)) | F(M(n)) | |
---------- | ---------- | ---------- | ---------- | ---------- | |
0 | 1 | 0 | | | |
1 | 1 | 0 | 0 | 1 | |
2 | 2 | 1 | 1 | 1 | |
3 | 2 | 2 | 1 | 2 | |
4 | 3 | 2 | 2 | 2 | |
5 | 3 | 3 | 2 | 2 | |
6 | 4 | 4 | 2 | 3 | |
7 | 5 | 4 | 3 | 3 | |
8 | 5 | 5 | 3 | 3 | |
9 | 6 | 6 | 4 | 4 | |
10 | 6 | 6 | 4 | 4 | |
11 | 7 | 7 | 4 | 5 | |
12 | 8 | 7 | 5 | 5 | |
13 | 8 | 8 | 5 | 5 | |
14 | 9 | 9 | 6 | 6 | |
15 | 9 | 9 | 6 | 6 | |
16 | 10 | 10 | 6 | 6 | |
17 | 11 | 11 | 7 | 7 | |
18 | 11 | 11 | 7 | 7 | |
19 | 12 | 12 | 7 | 8 | |
20 | 13 | 12 | 8 | 8 | |
21 | 13 | 13 | 8 | 8 | |
22 | 14 | 14 | 9 | 9 | |
23 | 14 | 14 | 9 | 9 | |
24 | 15 | 15 | 9 | 9 | |
25 | 16 | 16 | 10 | 10 | |
26 | 16 | 16 | 10 | 10 | |
27 | 17 | 17 | 11 | 11 | |
28 | 17 | 17 | 11 | 11 | |
29 | 18 | 18 | 11 | 11 | |
30 | 19 | 19 | 12 | 12 | |
31 | 19 | 19 | 12 | 12 | |
32 | 20 | 20 | 12 | 13 | |
33 | 21 | 20 | 13 | 13 | |
34 | 21 | 21 | 13 | 13 | |
35 | 22 | 22 | 14 | 14 | |
36 | 22 | 22 | 14 | 14 | |
37 | 23 | 23 | 14 | 14 | |
38 | 24 | 24 | 15 | 15 | |
39 | 24 | 24 | 15 | 15 | |
40 | 25 | 25 | 16 | 16 | |
41 | 25 | 25 | 16 | 16 | |
42 | 26 | 26 | 16 | 16 | |
43 | 27 | 27 | 17 | 17 | |
44 | 27 | 27 | 17 | 17 | |
45 | 28 | 28 | 17 | 17 | |
46 | 29 | 29 | 18 | 18 | |
47 | 29 | 29 | 18 | 18 | |
48 | 30 | 30 | 19 | 19 | |
49 | 30 | 30 | 19 | 19 | |
50 | 31 | 31 | 19 | 19 | |
51 | 32 | 32 | 20 | 20 | |
52 | 32 | 32 | 20 | 20 | |
53 | 33 | 33 | 20 | 21 | |
54 | 34 | 33 | 21 | 21 | |
55 | 34 | 34 | 21 | 21 | |
56 | 35 | 35 | 22 | 22 | |
57 | 35 | 35 | 22 | 22 | |
58 | 36 | 36 | 22 | 22 | |
59 | 37 | 37 | 23 | 23 | |
60 | 37 | 37 | 23 | 23 | |
61 | 38 | 38 | 24 | 24 | |
62 | 38 | 38 | 24 | 24 | |
63 | 39 | 39 | 24 | 24 | |
64 | 40 | 40 | 25 | 25 | |
65 | 40 | 40 | 25 | 25 | |
66 | 41 | 41 | 25 | 25 | |
67 | 42 | 42 | 26 | 26 | |
68 | 42 | 42 | 26 | 26 | |
69 | 43 | 43 | 27 | 27 | |
70 | 43 | 43 | 27 | 27 | |
71 | 44 | 44 | 27 | 27 | |
72 | 45 | 45 | 28 | 28 | |
73 | 45 | 45 | 28 | 28 | |
74 | 46 | 46 | 29 | 29 | |
75 | 46 | 46 | 29 | 29 | |
76 | 47 | 47 | 29 | 29 | |
77 | 48 | 48 | 30 | 30 | |
78 | 48 | 48 | 30 | 30 | |
79 | 49 | 49 | 30 | 30 | |
80 | 50 | 50 | 31 | 31 | |
81 | 50 | 50 | 31 | 31 | |
82 | 51 | 51 | 32 | 32 | |
83 | 51 | 51 | 32 | 32 | |
84 | 52 | 52 | 32 | 32 | |
85 | 53 | 53 | 33 | 33 | |
86 | 53 | 53 | 33 | 33 | |
87 | 54 | 54 | 33 | 34 | |
88 | 55 | 54 | 34 | 34 | |
89 | 55 | 55 | 34 | 34 | |
90 | 56 | 56 | 35 | 35 | |
91 | 56 | 56 | 35 | 35 | |
92 | 57 | 57 | 35 | 35 | |
93 | 58 | 58 | 36 | 36 | |
94 | 58 | 58 | 36 | 36 | |
95 | 59 | 59 | 37 | 37 | |
96 | 59 | 59 | 37 | 37 | |
97 | 60 | 60 | 37 | 37 | |
98 | 61 | 61 | 38 | 38 | |
99 | 61 | 61 | 38 | 38 | |
100 | 62 | 62 | 38 | 38 | |
89 90 91 92 93 94 95 96 97 98 99 100 | |
| | | | | | | | | | | | | |
| ------ | ------ ------ | ------ | | |
| | | | | | | | | |
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| --------- | --------- --------- | ------ | ------ ------ | ------ ------ | ------ | ------ ------ | ------ ------ | |
| | | | | | | | | | | | | | | | | | | | | | |
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
| | | | | | | | | | | | | | | | | | | | | | |
| ------------ | ---------- --------- | --------- | --------- --------- | --------- ----------- | |
| | | | | | | | | | | | | | |
21 22 23 24 25 26 27 28 29 30 31 32 33 | |
| | | | | | | | | | | | | | |
| --------------------- | ------------ ------------ | ------------ ----------------- | |
| | | | | | | | | |
13 14 15 16 17 18 19 20 | |
| | | | | | | | | |
| ------------------------------ | --------------------- ----------------------------- | |
| | | | | | |
8 9 10 11 12 | |
| | | | | | |
| ------------------------------------- --------------------------------------------- | |
| | | | |
5 6 7 | |
| | | | |
| ---------------------------------------------------------------------------- | |
| | | |
3 4 | |
| | | |
------------------------------------------------------------------------------------------------ | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| | |
90 91 92 93 94 95 96 97 98 99 100 | |
| | | | | | | | | | | | |
------ | ------ ------ | ------ | | |
| | | | | | | | |
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
--------- | --------- --------- | ------ | ------ ------ | ------ ------ | ------ | ------ ------ | ------ | ------ | |
| | | | | | | | | | | | | | | | | | | | | | |
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | |
| | | | | | | | | | | | | | | | | | | | | | |
------------ | ---------- --------- | --------- | --------- --------- | --------- | -------- | |
| | | | | | | | | | | | | | |
22 23 24 25 26 27 28 29 30 31 32 33 34 | |
| | | | | | | | | | | | | | |
--------------------- | ------------ ------------ | ------------ | ------------ | |
| | | | | | | | | |
14 15 16 17 18 19 20 21 | |
| | | | | | | | | |
------------------------------ | --------------------- | ----------------- | |
| | | | | | |
9 10 11 12 13 | |
| | | | | | |
------------------------------------- | ----------------------------- | |
| | | | |
6 7 8 | |
| | | | |
| --------------------------------------------- | |
| | | |
4 5 | |
| | | |
---------------------------------------------------------------------------- | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_g(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("t_n", width=10, title="Type(n)"), | |
util.Column("g_n", width=10, title="G(n)"), | |
util.Column("t_g_n", width=10, title="Type(G(n))"), | |
util.Column("g_g_n", width=10, title="G(G(n))"), | |
util.Column("t_g_g_n", width=10, title="Type(G(G(n)))"), | |
printer=printer, | |
) | |
g = {0: 0} | |
t = {0: "?", 1: "L"} | |
table.update(n=0, g_n=g[0], g_g_n=g[g[0]]) | |
for n in range(1, n_max + 1): | |
g[n] = n - g[g[n - 1]] | |
if t[n - 1] == "L": | |
t[n] = "R" | |
elif t[g[n]] == "R": | |
t[n] = "M" | |
else: | |
t[n] = "L" | |
assert g[n] - g[n - 1] == (0 if (t[n - 1] == "L") else 1) | |
assert g[g[n]] - g[g[n - 1]] == (1 if (t[n] == "L") else 0) | |
table.update( | |
n=n, | |
t_n=t[n], | |
g_n=g[n], | |
t_g_n=t[g[n]], | |
g_g_n=g[g[n]], | |
t_g_g_n=t[g[g[n]]], | |
) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_g.txt", ".") | |
table = diagram_g(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("g_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | Type(n) | G(n) | Type(G(n)) | G(G(n)) | Type(G(G(n))) | |
---------- | ---------- | ---------- | ---------- | ---------- | ------------- | |
0 | | 0 | | 0 | | |
1 | L | 1 | L | 1 | L | |
2 | R | 1 | L | 1 | L | |
3 | M | 2 | R | 1 | L | |
4 | L | 3 | M | 2 | R | |
5 | R | 3 | M | 2 | R | |
6 | L | 4 | L | 3 | M | |
7 | R | 4 | L | 3 | M | |
8 | M | 5 | R | 3 | M | |
9 | L | 6 | L | 4 | L | |
10 | R | 6 | L | 4 | L | |
11 | M | 7 | R | 4 | L | |
12 | L | 8 | M | 5 | R | |
13 | R | 8 | M | 5 | R | |
14 | L | 9 | L | 6 | L | |
15 | R | 9 | L | 6 | L | |
16 | M | 10 | R | 6 | L | |
17 | L | 11 | M | 7 | R | |
18 | R | 11 | M | 7 | R | |
19 | L | 12 | L | 8 | M | |
20 | R | 12 | L | 8 | M | |
21 | M | 13 | R | 8 | M | |
22 | L | 14 | L | 9 | L | |
23 | R | 14 | L | 9 | L | |
24 | M | 15 | R | 9 | L | |
25 | L | 16 | M | 10 | R | |
26 | R | 16 | M | 10 | R | |
27 | L | 17 | L | 11 | M | |
28 | R | 17 | L | 11 | M | |
29 | M | 18 | R | 11 | M | |
30 | L | 19 | L | 12 | L | |
31 | R | 19 | L | 12 | L | |
32 | M | 20 | R | 12 | L | |
33 | L | 21 | M | 13 | R | |
34 | R | 21 | M | 13 | R | |
35 | L | 22 | L | 14 | L | |
36 | R | 22 | L | 14 | L | |
37 | M | 23 | R | 14 | L | |
38 | L | 24 | M | 15 | R | |
39 | R | 24 | M | 15 | R | |
40 | L | 25 | L | 16 | M | |
41 | R | 25 | L | 16 | M | |
42 | M | 26 | R | 16 | M | |
43 | L | 27 | L | 17 | L | |
44 | R | 27 | L | 17 | L | |
45 | M | 28 | R | 17 | L | |
46 | L | 29 | M | 18 | R | |
47 | R | 29 | M | 18 | R | |
48 | L | 30 | L | 19 | L | |
49 | R | 30 | L | 19 | L | |
50 | M | 31 | R | 19 | L | |
51 | L | 32 | M | 20 | R | |
52 | R | 32 | M | 20 | R | |
53 | L | 33 | L | 21 | M | |
54 | R | 33 | L | 21 | M | |
55 | M | 34 | R | 21 | M | |
56 | L | 35 | L | 22 | L | |
57 | R | 35 | L | 22 | L | |
58 | M | 36 | R | 22 | L | |
59 | L | 37 | M | 23 | R | |
60 | R | 37 | M | 23 | R | |
61 | L | 38 | L | 24 | M | |
62 | R | 38 | L | 24 | M | |
63 | M | 39 | R | 24 | M | |
64 | L | 40 | L | 25 | L | |
65 | R | 40 | L | 25 | L | |
66 | M | 41 | R | 25 | L | |
67 | L | 42 | M | 26 | R | |
68 | R | 42 | M | 26 | R | |
69 | L | 43 | L | 27 | L | |
70 | R | 43 | L | 27 | L | |
71 | M | 44 | R | 27 | L | |
72 | L | 45 | M | 28 | R | |
73 | R | 45 | M | 28 | R | |
74 | L | 46 | L | 29 | M | |
75 | R | 46 | L | 29 | M | |
76 | M | 47 | R | 29 | M | |
77 | L | 48 | L | 30 | L | |
78 | R | 48 | L | 30 | L | |
79 | M | 49 | R | 30 | L | |
80 | L | 50 | M | 31 | R | |
81 | R | 50 | M | 31 | R | |
82 | L | 51 | L | 32 | M | |
83 | R | 51 | L | 32 | M | |
84 | M | 52 | R | 32 | M | |
85 | L | 53 | L | 33 | L | |
86 | R | 53 | L | 33 | L | |
87 | M | 54 | R | 33 | L | |
88 | L | 55 | M | 34 | R | |
89 | R | 55 | M | 34 | R | |
90 | L | 56 | L | 35 | L | |
91 | R | 56 | L | 35 | L | |
92 | M | 57 | R | 35 | L | |
93 | L | 58 | M | 36 | R | |
94 | R | 58 | M | 36 | R | |
95 | L | 59 | L | 37 | M | |
96 | R | 59 | L | 37 | M | |
97 | M | 60 | R | 37 | M | |
98 | L | 61 | L | 38 | L | |
99 | R | 61 | L | 38 | L | |
100 | M | 62 | R | 38 | L | |
90 91 92 93 94 95 96 97 98 99 100 | |
| | | | | | | | | | | | |
------ | ------ ------ | ------ | | |
| | | | | | | | |
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
--------- | --------- --------- | ------ | ------ ------ | ------ ------ | ------ | ------ ------ | ------ | ------ | |
| | | | | | | | | | | | | | | | | | | | | | |
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | |
| | | | | | | | | | | | | | | | | | | | | | |
------------ | ---------- --------- | --------- | --------- --------- | --------- --------- | | |
| | | | | | | | | | | | | | |
22 23 24 25 26 27 28 29 30 31 32 33 34 | |
| | | | | | | | | | | | | | |
--------------------- | ------------ ------------ | ------------ | ------------ | |
| | | | | | | | | |
14 15 16 17 18 19 20 21 | |
| | | | | | | | | |
------------------------------ | --------------------- --------------------- | | |
| | | | | | |
9 10 11 12 13 | |
| | | | | | |
------------------------------------- | ------------------------------- | |
| | | | |
6 7 8 | |
| | | | |
------------------------------------------------------ | | |
| | | |
4 5 | |
| | | |
----------------------------------------------------------------------------------- | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_g_flipped(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("t_n", width=10, title="Type(n)"), | |
util.Column("g_n", width=10, title="G(n)"), | |
util.Column("t_g_n", width=10, title="Type(G(n))"), | |
util.Column("g_g_n", width=10, title="G(G(n))"), | |
util.Column("t_g_g_n", width=10, title="Type(G(G(n)))"), | |
printer=printer, | |
) | |
g = {0: 0, 1: 1, 2: 1, 3: 2} | |
t = {2: "?", 3: "M"} | |
for n in range(4): | |
table.update(n=n, g_n=g[n], g_g_n=g[g[n]]) | |
for n in range(4, n_max + 1): | |
g[n] = n + 1 - g[g[n - 1] + 1] | |
if t[n - 1] == "L": | |
t[n] = "R" | |
elif t[g[n]] == "L": | |
t[n] = "M" | |
else: | |
t[n] = "L" | |
if n > 4: | |
assert g[n] - g[n - 1] == (0 if (t[n - 1] == "L") else 1) | |
assert g[g[n]] - g[g[n - 1]] == (1 if (t[n - 1] == "R") else 0) | |
assert g[g[n]] - g[g[n - 1]] == (1 if (t[n - 2] == "L") else 0) | |
assert g[g[n]] - g[g[n - 1]] == 1 - (g[n - 1] - g[n - 2]) | |
assert g[g[n]] + g[n - 1] - n == g[g[n - 1]] + g[n - 2] - (n - 1) | |
assert g[n - 1] == n - g[g[n]] | |
assert g[g[n]] == g[g[n - 2] + 1] | |
assert g[n] == n + 1 - g[g[n - 1] + 1] | |
table.update( | |
n=n, | |
t_n=t[n], | |
g_n=g[n], | |
t_g_n=t[g[n]], | |
g_g_n=g[g[n]], | |
t_g_g_n=t[g[g[n]]], | |
) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_g_flipped.txt", ".") | |
table = diagram_g_flipped(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("g_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | Type(n) | G(n) | Type(G(n)) | G(G(n)) | Type(G(G(n))) | |
---------- | ---------- | ---------- | ---------- | ---------- | ------------- | |
0 | | 0 | | 0 | | |
1 | | 1 | | 1 | | |
2 | | 1 | | 1 | | |
3 | | 2 | | 1 | | |
4 | L | 3 | M | 2 | ? | |
5 | R | 3 | M | 2 | ? | |
6 | M | 4 | L | 3 | M | |
7 | L | 5 | R | 3 | M | |
8 | R | 5 | R | 3 | M | |
9 | L | 6 | M | 4 | L | |
10 | R | 6 | M | 4 | L | |
11 | M | 7 | L | 5 | R | |
12 | L | 8 | R | 5 | R | |
13 | R | 8 | R | 5 | R | |
14 | M | 9 | L | 6 | M | |
15 | L | 10 | R | 6 | M | |
16 | R | 10 | R | 6 | M | |
17 | L | 11 | M | 7 | L | |
18 | R | 11 | M | 7 | L | |
19 | M | 12 | L | 8 | R | |
20 | L | 13 | R | 8 | R | |
21 | R | 13 | R | 8 | R | |
22 | L | 14 | M | 9 | L | |
23 | R | 14 | M | 9 | L | |
24 | M | 15 | L | 10 | R | |
25 | L | 16 | R | 10 | R | |
26 | R | 16 | R | 10 | R | |
27 | M | 17 | L | 11 | M | |
28 | L | 18 | R | 11 | M | |
29 | R | 18 | R | 11 | M | |
30 | L | 19 | M | 12 | L | |
31 | R | 19 | M | 12 | L | |
32 | M | 20 | L | 13 | R | |
33 | L | 21 | R | 13 | R | |
34 | R | 21 | R | 13 | R | |
35 | M | 22 | L | 14 | M | |
36 | L | 23 | R | 14 | M | |
37 | R | 23 | R | 14 | M | |
38 | L | 24 | M | 15 | L | |
39 | R | 24 | M | 15 | L | |
40 | M | 25 | L | 16 | R | |
41 | L | 26 | R | 16 | R | |
42 | R | 26 | R | 16 | R | |
43 | L | 27 | M | 17 | L | |
44 | R | 27 | M | 17 | L | |
45 | M | 28 | L | 18 | R | |
46 | L | 29 | R | 18 | R | |
47 | R | 29 | R | 18 | R | |
48 | M | 30 | L | 19 | M | |
49 | L | 31 | R | 19 | M | |
50 | R | 31 | R | 19 | M | |
51 | L | 32 | M | 20 | L | |
52 | R | 32 | M | 20 | L | |
53 | M | 33 | L | 21 | R | |
54 | L | 34 | R | 21 | R | |
55 | R | 34 | R | 21 | R | |
56 | L | 35 | M | 22 | L | |
57 | R | 35 | M | 22 | L | |
58 | M | 36 | L | 23 | R | |
59 | L | 37 | R | 23 | R | |
60 | R | 37 | R | 23 | R | |
61 | M | 38 | L | 24 | M | |
62 | L | 39 | R | 24 | M | |
63 | R | 39 | R | 24 | M | |
64 | L | 40 | M | 25 | L | |
65 | R | 40 | M | 25 | L | |
66 | M | 41 | L | 26 | R | |
67 | L | 42 | R | 26 | R | |
68 | R | 42 | R | 26 | R | |
69 | M | 43 | L | 27 | M | |
70 | L | 44 | R | 27 | M | |
71 | R | 44 | R | 27 | M | |
72 | L | 45 | M | 28 | L | |
73 | R | 45 | M | 28 | L | |
74 | M | 46 | L | 29 | R | |
75 | L | 47 | R | 29 | R | |
76 | R | 47 | R | 29 | R | |
77 | L | 48 | M | 30 | L | |
78 | R | 48 | M | 30 | L | |
79 | M | 49 | L | 31 | R | |
80 | L | 50 | R | 31 | R | |
81 | R | 50 | R | 31 | R | |
82 | M | 51 | L | 32 | M | |
83 | L | 52 | R | 32 | M | |
84 | R | 52 | R | 32 | M | |
85 | L | 53 | M | 33 | L | |
86 | R | 53 | M | 33 | L | |
87 | M | 54 | L | 34 | R | |
88 | L | 55 | R | 34 | R | |
89 | R | 55 | R | 34 | R | |
90 | M | 56 | L | 35 | M | |
91 | L | 57 | R | 35 | M | |
92 | R | 57 | R | 35 | M | |
93 | L | 58 | M | 36 | L | |
94 | R | 58 | M | 36 | L | |
95 | M | 59 | L | 37 | R | |
96 | L | 60 | R | 37 | R | |
97 | R | 60 | R | 37 | R | |
98 | L | 61 | M | 38 | L | |
99 | R | 61 | M | 38 | L | |
100 | M | 62 | L | 39 | R | |
90 91 92 93 94 95 96 97 98 99 100 | |
| | | | | | | | | | | | |
| ------ ------ | ------ ------ | | |
| | | | | | | | |
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
-------- | -------- | ------ ------ | ------ | ------ ------ | ------ ------ | ------ | ------ ------ | ------ | |
| | | | | | | | | | | | | | | | | | | | | | |
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | |
| | | | | | | | | | | | | | | | | | | | | | |
| ------------ ----------- | -------- -------- | -------- | -------- -------- | -------- | |
| | | | | | | | | | | | | | |
22 23 24 25 26 27 28 29 30 31 32 33 34 | |
| | | | | | | | | | | | | | |
-------------------- | ------------ | ------------ ------------ | ------------ | |
| | | | | | | | | |
14 15 16 17 18 19 20 21 | |
| | | | | | | | | |
| --------------------- -------------------- | -------------------- | |
| | | | | | |
9 10 11 12 13 | |
| | | | | | |
---------------------------------------------- | ------------------------------- | |
| | | | |
6 7 8 | |
| | | | |
| --------------------------------------------------- | |
| | | |
4 5 | |
| | | |
----------------------------------------------------------------------------------------- | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_h(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("t_n", width=10, title="Type(n)"), | |
util.Column("h_n", width=10, title="H(n)"), | |
util.Column("t_h_n", width=10, title="Type(H(n))"), | |
util.Column("h_h_n", width=10, title="H(H(n))"), | |
util.Column("t_h_h_n", width=10, title="Type(H(H(n)))"), | |
util.Column("h_h_h_n", width=10, title="H(H(H(n)))"), | |
util.Column("t_h_h_h_n", width=10, title="Type(H(H(H(n))))"), | |
printer=printer, | |
) | |
h = {0: 0} | |
t = {0: "?", 1: "L"} | |
table.update(n=0, h_n=h[0], h_h_n=h[h[0]], h_h_h_n=h[h[h[0]]]) | |
for n in range(1, n_max + 1): | |
h[n] = n - h[h[h[n - 1]]] | |
if t[n - 1] == "L": | |
t[n] = "R" | |
elif t[h[n]] == "R": | |
t[n] = "M" | |
elif t[h[n]] == "M": | |
t[n] = "N" | |
else: | |
t[n] = "L" | |
assert h[n] - h[n - 1] == (0 if (t[n - 1] == "L") else 1) | |
assert h[h[h[n]]] - h[h[h[n - 1]]] == (1 if (t[n] == "L") else 0) | |
table.update( | |
n=n, | |
t_n=t[n], | |
h_n=h[n], | |
t_h_n=t[h[n]], | |
h_h_n=h[h[n]], | |
t_h_h_n=t[h[h[n]]], | |
h_h_h_n=h[h[h[n]]], | |
t_h_h_h_n=t[h[h[h[n]]]], | |
) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_h.txt", ".") | |
table = diagram_h(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("h_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | Type(n) | H(n) | Type(H(n)) | H(H(n)) | Type(H(H(n))) | H(H(H(n))) | Type(H(H(H(n)))) | |
---------- | ---------- | ---------- | ---------- | ---------- | ------------- | ---------- | ---------------- | |
0 | | 0 | | 0 | | 0 | | |
1 | L | 1 | L | 1 | L | 1 | L | |
2 | R | 1 | L | 1 | L | 1 | L | |
3 | M | 2 | R | 1 | L | 1 | L | |
4 | N | 3 | M | 2 | R | 1 | L | |
5 | L | 4 | N | 3 | M | 2 | R | |
6 | R | 4 | N | 3 | M | 2 | R | |
7 | L | 5 | L | 4 | N | 3 | M | |
8 | R | 5 | L | 4 | N | 3 | M | |
9 | M | 6 | R | 4 | N | 3 | M | |
10 | L | 7 | L | 5 | L | 4 | N | |
11 | R | 7 | L | 5 | L | 4 | N | |
12 | M | 8 | R | 5 | L | 4 | N | |
13 | N | 9 | M | 6 | R | 4 | N | |
14 | L | 10 | L | 7 | L | 5 | L | |
15 | R | 10 | L | 7 | L | 5 | L | |
16 | M | 11 | R | 7 | L | 5 | L | |
17 | N | 12 | M | 8 | R | 5 | L | |
18 | L | 13 | N | 9 | M | 6 | R | |
19 | R | 13 | N | 9 | M | 6 | R | |
20 | L | 14 | L | 10 | L | 7 | L | |
21 | R | 14 | L | 10 | L | 7 | L | |
22 | M | 15 | R | 10 | L | 7 | L | |
23 | N | 16 | M | 11 | R | 7 | L | |
24 | L | 17 | N | 12 | M | 8 | R | |
25 | R | 17 | N | 12 | M | 8 | R | |
26 | L | 18 | L | 13 | N | 9 | M | |
27 | R | 18 | L | 13 | N | 9 | M | |
28 | M | 19 | R | 13 | N | 9 | M | |
29 | L | 20 | L | 14 | L | 10 | L | |
30 | R | 20 | L | 14 | L | 10 | L | |
31 | M | 21 | R | 14 | L | 10 | L | |
32 | N | 22 | M | 15 | R | 10 | L | |
33 | L | 23 | N | 16 | M | 11 | R | |
34 | R | 23 | N | 16 | M | 11 | R | |
35 | L | 24 | L | 17 | N | 12 | M | |
36 | R | 24 | L | 17 | N | 12 | M | |
37 | M | 25 | R | 17 | N | 12 | M | |
38 | L | 26 | L | 18 | L | 13 | N | |
39 | R | 26 | L | 18 | L | 13 | N | |
40 | M | 27 | R | 18 | L | 13 | N | |
41 | N | 28 | M | 19 | R | 13 | N | |
42 | L | 29 | L | 20 | L | 14 | L | |
43 | R | 29 | L | 20 | L | 14 | L | |
44 | M | 30 | R | 20 | L | 14 | L | |
45 | N | 31 | M | 21 | R | 14 | L | |
46 | L | 32 | N | 22 | M | 15 | R | |
47 | R | 32 | N | 22 | M | 15 | R | |
48 | L | 33 | L | 23 | N | 16 | M | |
49 | R | 33 | L | 23 | N | 16 | M | |
50 | M | 34 | R | 23 | N | 16 | M | |
51 | L | 35 | L | 24 | L | 17 | N | |
52 | R | 35 | L | 24 | L | 17 | N | |
53 | M | 36 | R | 24 | L | 17 | N | |
54 | N | 37 | M | 25 | R | 17 | N | |
55 | L | 38 | L | 26 | L | 18 | L | |
56 | R | 38 | L | 26 | L | 18 | L | |
57 | M | 39 | R | 26 | L | 18 | L | |
58 | N | 40 | M | 27 | R | 18 | L | |
59 | L | 41 | N | 28 | M | 19 | R | |
60 | R | 41 | N | 28 | M | 19 | R | |
61 | L | 42 | L | 29 | L | 20 | L | |
62 | R | 42 | L | 29 | L | 20 | L | |
63 | M | 43 | R | 29 | L | 20 | L | |
64 | N | 44 | M | 30 | R | 20 | L | |
65 | L | 45 | N | 31 | M | 21 | R | |
66 | R | 45 | N | 31 | M | 21 | R | |
67 | L | 46 | L | 32 | N | 22 | M | |
68 | R | 46 | L | 32 | N | 22 | M | |
69 | M | 47 | R | 32 | N | 22 | M | |
70 | L | 48 | L | 33 | L | 23 | N | |
71 | R | 48 | L | 33 | L | 23 | N | |
72 | M | 49 | R | 33 | L | 23 | N | |
73 | N | 50 | M | 34 | R | 23 | N | |
74 | L | 51 | L | 35 | L | 24 | L | |
75 | R | 51 | L | 35 | L | 24 | L | |
76 | M | 52 | R | 35 | L | 24 | L | |
77 | N | 53 | M | 36 | R | 24 | L | |
78 | L | 54 | N | 37 | M | 25 | R | |
79 | R | 54 | N | 37 | M | 25 | R | |
80 | L | 55 | L | 38 | L | 26 | L | |
81 | R | 55 | L | 38 | L | 26 | L | |
82 | M | 56 | R | 38 | L | 26 | L | |
83 | N | 57 | M | 39 | R | 26 | L | |
84 | L | 58 | N | 40 | M | 27 | R | |
85 | R | 58 | N | 40 | M | 27 | R | |
86 | L | 59 | L | 41 | N | 28 | M | |
87 | R | 59 | L | 41 | N | 28 | M | |
88 | M | 60 | R | 41 | N | 28 | M | |
89 | L | 61 | L | 42 | L | 29 | L | |
90 | R | 61 | L | 42 | L | 29 | L | |
91 | M | 62 | R | 42 | L | 29 | L | |
92 | N | 63 | M | 43 | R | 29 | L | |
93 | L | 64 | N | 44 | M | 30 | R | |
94 | R | 64 | N | 44 | M | 30 | R | |
95 | L | 65 | L | 45 | N | 31 | M | |
96 | R | 65 | L | 45 | N | 31 | M | |
97 | M | 66 | R | 45 | N | 31 | M | |
98 | L | 67 | L | 46 | L | 32 | N | |
99 | R | 67 | L | 46 | L | 32 | N | |
100 | M | 68 | R | 46 | L | 32 | N | |
89 90 91 92 93 94 95 96 97 98 99 100 | |
| | | | | | | | | | | | | |
------ | | ------ ------ | ------ | | |
| | | | | | | | | |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
--------- | | --------- --------- | ------ | | ------ | | ------ ------ | | ------ ------ | | |
| | | | | | | | | | | | | | | | | | | | |
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
| | | | | | | | | | | | | | | | | | | | |
---------- | | ---------- --------- | --------- | | --------- | | --------- | |
| | | | | | | | | | | | | | |
29 30 31 32 33 34 35 36 37 38 39 40 41 | |
| | | | | | | | | | | | | | |
------------- | | ---------- ---------- | ---------- | | | |
| | | | | | | | | | |
20 21 22 23 24 25 26 27 28 | |
| | | | | | | | | | |
--------------------- | | ------------- ------------- | | |
| | | | | | | |
14 15 16 17 18 19 | |
| | | | | | | |
------------------------------ | | --------------------- | |
| | | | | |
10 11 12 13 | |
| | | | | |
------------------------------------ | | | |
| | | | |
7 8 9 | |
| | | | |
--------------------------------------------- | | |
| | | |
5 6 | |
| | | |
--------------------------------------------------------------- | |
| | |
4 | |
| | |
| | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_h_flipped(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("t_n", width=10, title="Type(n)"), | |
util.Column("h_n", width=10, title="H(n)"), | |
util.Column("t_h_n", width=10, title="Type(H(n))"), | |
util.Column("h_h_n", width=10, title="H(H(n))"), | |
util.Column("t_h_h_n", width=10, title="Type(H(H(n)))"), | |
util.Column("h_h_h_n", width=10, title="H(H(H(n)))"), | |
util.Column("t_h_h_h_n", width=10, title="Type(H(H(H(n))))"), | |
printer=printer, | |
) | |
h = {0: 0, 1: 1, 2: 1, 3: 2, 4: 3} | |
t = {2: "?", 3: "?", 4: "N"} | |
for n in range(5): | |
table.update(n=n, h_n=h[n], h_h_n=h[h[n]], h_h_h_n=h[h[h[n]]]) | |
for n in range(5, n_max + 1): | |
h[n] = n + 1 - h[h[h[n - 1] + 1]] | |
if t[n - 1] == "L": | |
t[n] = "R" | |
elif t[h[n]] == "L": | |
t[n] = "M" | |
elif t[h[n]] == "M": | |
t[n] = "N" | |
else: | |
t[n] = "L" | |
if n > 5: | |
assert h[n] - h[n-1] == (0 if (t[n-1] == "L") else 1) | |
assert h[h[h[n]]] - h[h[h[n-1]]] == (1 if (t[n-1] == "R") else 0) | |
assert h[h[h[n]]] - h[h[h[n-1]]] == (1 if (t[n-2] == "L") else 0) | |
assert h[h[h[n]]] - h[h[h[n-1]]] == 1 - (h[n-1] - h[n-2]) | |
assert h[h[h[n]]] + h[n-1] - n == h[h[h[n-1]]] + h[n-2] - (n-1) | |
assert h[n-1] == n - h[h[h[n]]] | |
assert h[h[h[n]]] == h[h[h[n-2] + 1]] | |
assert h[n] == n + 1 - h[h[h[n-1] + 1]] | |
table.update( | |
n=n, | |
t_n=t[n], | |
h_n=h[n], | |
t_h_n=t[h[n]], | |
h_h_n=h[h[n]], | |
t_h_h_n=t[h[h[n]]], | |
h_h_h_n=h[h[h[n]]], | |
t_h_h_h_n=t[h[h[h[n]]]], | |
) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_h_flipped.txt", ".") | |
table = diagram_h_flipped(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("h_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | Type(n) | H(n) | Type(H(n)) | H(H(n)) | Type(H(H(n))) | H(H(H(n))) | Type(H(H(H(n)))) | |
---------- | ---------- | ---------- | ---------- | ---------- | ------------- | ---------- | ---------------- | |
0 | | 0 | | 0 | | 0 | | |
1 | | 1 | | 1 | | 1 | | |
2 | | 1 | | 1 | | 1 | | |
3 | | 2 | | 1 | | 1 | | |
4 | | 3 | | 2 | | 1 | | |
5 | L | 4 | N | 3 | ? | 2 | ? | |
6 | R | 4 | N | 3 | ? | 2 | ? | |
7 | M | 5 | L | 4 | N | 3 | ? | |
8 | L | 6 | R | 4 | N | 3 | ? | |
9 | R | 6 | R | 4 | N | 3 | ? | |
10 | N | 7 | M | 5 | L | 4 | N | |
11 | M | 8 | L | 6 | R | 4 | N | |
12 | L | 9 | R | 6 | R | 4 | N | |
13 | R | 9 | R | 6 | R | 4 | N | |
14 | L | 10 | N | 7 | M | 5 | L | |
15 | R | 10 | N | 7 | M | 5 | L | |
16 | N | 11 | M | 8 | L | 6 | R | |
17 | M | 12 | L | 9 | R | 6 | R | |
18 | L | 13 | R | 9 | R | 6 | R | |
19 | R | 13 | R | 9 | R | 6 | R | |
20 | M | 14 | L | 10 | N | 7 | M | |
21 | L | 15 | R | 10 | N | 7 | M | |
22 | R | 15 | R | 10 | N | 7 | M | |
23 | L | 16 | N | 11 | M | 8 | L | |
24 | R | 16 | N | 11 | M | 8 | L | |
25 | N | 17 | M | 12 | L | 9 | R | |
26 | M | 18 | L | 13 | R | 9 | R | |
27 | L | 19 | R | 13 | R | 9 | R | |
28 | R | 19 | R | 13 | R | 9 | R | |
29 | N | 20 | M | 14 | L | 10 | N | |
30 | M | 21 | L | 15 | R | 10 | N | |
31 | L | 22 | R | 15 | R | 10 | N | |
32 | R | 22 | R | 15 | R | 10 | N | |
33 | M | 23 | L | 16 | N | 11 | M | |
34 | L | 24 | R | 16 | N | 11 | M | |
35 | R | 24 | R | 16 | N | 11 | M | |
36 | L | 25 | N | 17 | M | 12 | L | |
37 | R | 25 | N | 17 | M | 12 | L | |
38 | N | 26 | M | 18 | L | 13 | R | |
39 | M | 27 | L | 19 | R | 13 | R | |
40 | L | 28 | R | 19 | R | 13 | R | |
41 | R | 28 | R | 19 | R | 13 | R | |
42 | L | 29 | N | 20 | M | 14 | L | |
43 | R | 29 | N | 20 | M | 14 | L | |
44 | N | 30 | M | 21 | L | 15 | R | |
45 | M | 31 | L | 22 | R | 15 | R | |
46 | L | 32 | R | 22 | R | 15 | R | |
47 | R | 32 | R | 22 | R | 15 | R | |
48 | N | 33 | M | 23 | L | 16 | N | |
49 | M | 34 | L | 24 | R | 16 | N | |
50 | L | 35 | R | 24 | R | 16 | N | |
51 | R | 35 | R | 24 | R | 16 | N | |
52 | M | 36 | L | 25 | N | 17 | M | |
53 | L | 37 | R | 25 | N | 17 | M | |
54 | R | 37 | R | 25 | N | 17 | M | |
55 | L | 38 | N | 26 | M | 18 | L | |
56 | R | 38 | N | 26 | M | 18 | L | |
57 | N | 39 | M | 27 | L | 19 | R | |
58 | M | 40 | L | 28 | R | 19 | R | |
59 | L | 41 | R | 28 | R | 19 | R | |
60 | R | 41 | R | 28 | R | 19 | R | |
61 | M | 42 | L | 29 | N | 20 | M | |
62 | L | 43 | R | 29 | N | 20 | M | |
63 | R | 43 | R | 29 | N | 20 | M | |
64 | L | 44 | N | 30 | M | 21 | L | |
65 | R | 44 | N | 30 | M | 21 | L | |
66 | N | 45 | M | 31 | L | 22 | R | |
67 | M | 46 | L | 32 | R | 22 | R | |
68 | L | 47 | R | 32 | R | 22 | R | |
69 | R | 47 | R | 32 | R | 22 | R | |
70 | L | 48 | N | 33 | M | 23 | L | |
71 | R | 48 | N | 33 | M | 23 | L | |
72 | N | 49 | M | 34 | L | 24 | R | |
73 | M | 50 | L | 35 | R | 24 | R | |
74 | L | 51 | R | 35 | R | 24 | R | |
75 | R | 51 | R | 35 | R | 24 | R | |
76 | N | 52 | M | 36 | L | 25 | N | |
77 | M | 53 | L | 37 | R | 25 | N | |
78 | L | 54 | R | 37 | R | 25 | N | |
79 | R | 54 | R | 37 | R | 25 | N | |
80 | M | 55 | L | 38 | N | 26 | M | |
81 | L | 56 | R | 38 | N | 26 | M | |
82 | R | 56 | R | 38 | N | 26 | M | |
83 | L | 57 | N | 39 | M | 27 | L | |
84 | R | 57 | N | 39 | M | 27 | L | |
85 | N | 58 | M | 40 | L | 28 | R | |
86 | M | 59 | L | 41 | R | 28 | R | |
87 | L | 60 | R | 41 | R | 28 | R | |
88 | R | 60 | R | 41 | R | 28 | R | |
89 | N | 61 | M | 42 | L | 29 | N | |
90 | M | 62 | L | 43 | R | 29 | N | |
91 | L | 63 | R | 43 | R | 29 | N | |
92 | R | 63 | R | 43 | R | 29 | N | |
93 | M | 64 | L | 44 | N | 30 | M | |
94 | L | 65 | R | 44 | N | 30 | M | |
95 | R | 65 | R | 44 | N | 30 | M | |
96 | L | 66 | N | 45 | M | 31 | L | |
97 | R | 66 | N | 45 | M | 31 | L | |
98 | N | 67 | M | 46 | L | 32 | R | |
99 | M | 68 | L | 47 | R | 32 | R | |
100 | L | 69 | R | 47 | R | 32 | R | |
89 90 91 92 93 94 95 96 97 98 99 100 | |
| | | | | | | | | | | | | |
| | ------ | ------ ------ | | | | |
| | | | | | | | | | |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| -------- -------- | | ------ ------ | | ------ | | ------ | ------ ------ | | ------ | |
| | | | | | | | | | | | | | | | | | | | |
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
| | | | | | | | | | | | | | | | | | | | |
--------- | | -------- | | -------- | -------- -------- | | -------- | |
| | | | | | | | | | | | | | |
29 30 31 32 33 34 35 36 37 38 39 40 41 | |
| | | | | | | | | | | | | | |
| | ------------ | --------- --------- | | --------- | |
| | | | | | | | | | |
20 21 22 23 24 25 26 27 28 | |
| | | | | | | | | | |
| -------------------- ------------- | | ------------- | |
| | | | | | | |
14 15 16 17 18 19 | |
| | | | | | | |
----------------------------- | | --------------------- | |
| | | | | |
10 11 12 13 | |
| | | | | |
| | ------------------------------ | |
| | | | |
7 8 9 | |
| | | | |
| ----------------------------------------- | |
| | | |
5 6 | |
| | | |
----------------------------------------------------------------------- | |
| | |
4 | |
| | |
| | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_j(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("j_n", width=10, title="J(n)"), | |
util.Column("j_j_n", width=10, title="J(J(n))"), | |
util.Column("j_j_j_n", width=10, title="J(J(J(n)))"), | |
util.Column("j_j_j_j_n", width=10, title="J(J(J(J(n))))"), | |
printer=printer, | |
) | |
j = {0: 0} | |
table.update( | |
n=0, | |
j_n=j[0], | |
j_j_n=j[j[0]], | |
j_j_j_n=j[j[j[0]]], | |
j_j_j_j_n=j[j[j[j[0]]]], | |
) | |
for n in range(1, n_max + 1): | |
j[n] = n - j[j[j[j[n - 1]]]] | |
table.update( | |
n=n, | |
j_n=j[n], | |
j_j_n=j[j[n]], | |
j_j_j_n=j[j[j[n]]], | |
j_j_j_j_n=j[j[j[j[n]]]], | |
) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_j.txt", ".") | |
table = diagram_j(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("j_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | J(n) | J(J(n)) | J(J(J(n))) | J(J(J(J(n)))) | |
---------- | ---------- | ---------- | ---------- | ------------- | |
0 | 0 | 0 | 0 | 0 | |
1 | 1 | 1 | 1 | 1 | |
2 | 1 | 1 | 1 | 1 | |
3 | 2 | 1 | 1 | 1 | |
4 | 3 | 2 | 1 | 1 | |
5 | 4 | 3 | 2 | 1 | |
6 | 5 | 4 | 3 | 2 | |
7 | 5 | 4 | 3 | 2 | |
8 | 6 | 5 | 4 | 3 | |
9 | 6 | 5 | 4 | 3 | |
10 | 7 | 5 | 4 | 3 | |
11 | 8 | 6 | 5 | 4 | |
12 | 8 | 6 | 5 | 4 | |
13 | 9 | 6 | 5 | 4 | |
14 | 10 | 7 | 5 | 4 | |
15 | 11 | 8 | 6 | 5 | |
16 | 11 | 8 | 6 | 5 | |
17 | 12 | 8 | 6 | 5 | |
18 | 13 | 9 | 6 | 5 | |
19 | 14 | 10 | 7 | 5 | |
20 | 15 | 11 | 8 | 6 | |
21 | 15 | 11 | 8 | 6 | |
22 | 16 | 11 | 8 | 6 | |
23 | 17 | 12 | 8 | 6 | |
24 | 18 | 13 | 9 | 6 | |
25 | 19 | 14 | 10 | 7 | |
26 | 19 | 14 | 10 | 7 | |
27 | 20 | 15 | 11 | 8 | |
28 | 20 | 15 | 11 | 8 | |
29 | 21 | 15 | 11 | 8 | |
30 | 22 | 16 | 11 | 8 | |
31 | 23 | 17 | 12 | 8 | |
32 | 24 | 18 | 13 | 9 | |
33 | 24 | 18 | 13 | 9 | |
34 | 25 | 19 | 14 | 10 | |
35 | 25 | 19 | 14 | 10 | |
36 | 26 | 19 | 14 | 10 | |
37 | 27 | 20 | 15 | 11 | |
38 | 27 | 20 | 15 | 11 | |
39 | 28 | 20 | 15 | 11 | |
40 | 29 | 21 | 15 | 11 | |
41 | 30 | 22 | 16 | 11 | |
42 | 31 | 23 | 17 | 12 | |
43 | 31 | 23 | 17 | 12 | |
44 | 32 | 24 | 18 | 13 | |
45 | 32 | 24 | 18 | 13 | |
46 | 33 | 24 | 18 | 13 | |
47 | 34 | 25 | 19 | 14 | |
48 | 34 | 25 | 19 | 14 | |
49 | 35 | 25 | 19 | 14 | |
50 | 36 | 26 | 19 | 14 | |
51 | 37 | 27 | 20 | 15 | |
52 | 37 | 27 | 20 | 15 | |
53 | 38 | 27 | 20 | 15 | |
54 | 39 | 28 | 20 | 15 | |
55 | 40 | 29 | 21 | 15 | |
56 | 41 | 30 | 22 | 16 | |
57 | 41 | 30 | 22 | 16 | |
58 | 42 | 31 | 23 | 17 | |
59 | 42 | 31 | 23 | 17 | |
60 | 43 | 31 | 23 | 17 | |
61 | 44 | 32 | 24 | 18 | |
62 | 44 | 32 | 24 | 18 | |
63 | 45 | 32 | 24 | 18 | |
64 | 46 | 33 | 24 | 18 | |
65 | 47 | 34 | 25 | 19 | |
66 | 47 | 34 | 25 | 19 | |
67 | 48 | 34 | 25 | 19 | |
68 | 49 | 35 | 25 | 19 | |
69 | 50 | 36 | 26 | 19 | |
70 | 51 | 37 | 27 | 20 | |
71 | 51 | 37 | 27 | 20 | |
72 | 52 | 37 | 27 | 20 | |
73 | 53 | 38 | 27 | 20 | |
74 | 54 | 39 | 28 | 20 | |
75 | 55 | 40 | 29 | 21 | |
76 | 55 | 40 | 29 | 21 | |
77 | 56 | 41 | 30 | 22 | |
78 | 56 | 41 | 30 | 22 | |
79 | 57 | 41 | 30 | 22 | |
80 | 58 | 42 | 31 | 23 | |
81 | 58 | 42 | 31 | 23 | |
82 | 59 | 42 | 31 | 23 | |
83 | 60 | 43 | 31 | 23 | |
84 | 61 | 44 | 32 | 24 | |
85 | 61 | 44 | 32 | 24 | |
86 | 62 | 44 | 32 | 24 | |
87 | 63 | 45 | 32 | 24 | |
88 | 64 | 46 | 33 | 24 | |
89 | 65 | 47 | 34 | 25 | |
90 | 65 | 47 | 34 | 25 | |
91 | 66 | 47 | 34 | 25 | |
92 | 67 | 48 | 34 | 25 | |
93 | 68 | 49 | 35 | 25 | |
94 | 69 | 50 | 36 | 26 | |
95 | 69 | 50 | 36 | 26 | |
96 | 70 | 51 | 37 | 27 | |
97 | 70 | 51 | 37 | 27 | |
98 | 71 | 51 | 37 | 27 | |
99 | 72 | 52 | 37 | 27 | |
100 | 73 | 53 | 38 | 27 | |
96 97 98 99 100 | |
| | | | | | |
------ | | | | |
| | | | | |
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
--------- | | | ------ ------ | ------ | | ------ | | | ------ | | | ------ | |
| | | | | | | | | | | | | | | | | | | | |
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | |
| | | | | | | | | | | | | | | | | | | | |
---------- | | | --------- --------- | --------- | | --------- | | | | |
| | | | | | | | | | | | | | | |
37 38 39 40 41 42 43 44 45 46 47 48 49 50 | |
| | | | | | | | | | | | | | | |
----------- | | | ---------- ---------- | ---------- | | | |
| | | | | | | | | | | |
27 28 29 30 31 32 33 34 35 36 | |
| | | | | | | | | | | |
----------- | | | ----------- ----------- | | |
| | | | | | | | |
20 21 22 23 24 25 26 | |
| | | | | | | | |
------------- | | | ------------- | |
| | | | | | |
15 16 17 18 19 | |
| | | | | | |
--------------------- | | | | |
| | | | | |
11 12 13 14 | |
| | | | | |
------------------------------ | | | |
| | | | |
8 9 10 | |
| | | | |
----------------------------------------- | | |
| | | |
6 7 | |
| | | |
---------------------------------------------------- | |
| | |
5 | |
| | |
| | |
| | |
4 | |
| | |
| | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util | |
import tree | |
def diagram_j_flipped(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("j_n", width=10, title="J(n)"), | |
util.Column("j_j_n", width=10, title="J(J(n))"), | |
util.Column("j_j_j_n", width=10, title="J(J(J(n)))"), | |
util.Column("j_j_j_j_n", width=10, title="J(J(J(J(n))))"), | |
printer=printer, | |
) | |
j = {0: 0, 1: 1, 2: 1, 3: 2, 4: 3, 5: 4} | |
for n in range(6): | |
table.update( | |
n=n, | |
j_n=j[n], | |
j_j_n=j[j[n]], | |
j_j_j_n=j[j[j[n]]], | |
j_j_j_j_n=j[j[j[j[n]]]], | |
) | |
for n in range(6, n_max + 1): | |
j[n] = n + 1 - j[j[j[j[n - 1] + 1]]] | |
table.update( | |
n=n, | |
j_n=j[n], | |
j_j_n=j[j[n]], | |
j_j_j_n=j[j[j[n]]], | |
j_j_j_j_n=j[j[j[j[n]]]], | |
) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_j_flipped.txt", ".") | |
table = diagram_j_flipped(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("j_n")) | |
tree.print_tree_dict(tree_dict, 1, printer) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | J(n) | J(J(n)) | J(J(J(n))) | J(J(J(J(n)))) | |
---------- | ---------- | ---------- | ---------- | ------------- | |
0 | 0 | 0 | 0 | 0 | |
1 | 1 | 1 | 1 | 1 | |
2 | 1 | 1 | 1 | 1 | |
3 | 2 | 1 | 1 | 1 | |
4 | 3 | 2 | 1 | 1 | |
5 | 4 | 3 | 2 | 1 | |
6 | 5 | 4 | 3 | 2 | |
7 | 5 | 4 | 3 | 2 | |
8 | 6 | 5 | 4 | 3 | |
9 | 7 | 5 | 4 | 3 | |
10 | 7 | 5 | 4 | 3 | |
11 | 8 | 6 | 5 | 4 | |
12 | 9 | 7 | 5 | 4 | |
13 | 10 | 7 | 5 | 4 | |
14 | 10 | 7 | 5 | 4 | |
15 | 11 | 8 | 6 | 5 | |
16 | 12 | 9 | 7 | 5 | |
17 | 13 | 10 | 7 | 5 | |
18 | 14 | 10 | 7 | 5 | |
19 | 14 | 10 | 7 | 5 | |
20 | 15 | 11 | 8 | 6 | |
21 | 15 | 11 | 8 | 6 | |
22 | 16 | 12 | 9 | 7 | |
23 | 17 | 13 | 10 | 7 | |
24 | 18 | 14 | 10 | 7 | |
25 | 19 | 14 | 10 | 7 | |
26 | 19 | 14 | 10 | 7 | |
27 | 20 | 15 | 11 | 8 | |
28 | 21 | 15 | 11 | 8 | |
29 | 21 | 15 | 11 | 8 | |
30 | 22 | 16 | 12 | 9 | |
31 | 22 | 16 | 12 | 9 | |
32 | 23 | 17 | 13 | 10 | |
33 | 24 | 18 | 14 | 10 | |
34 | 25 | 19 | 14 | 10 | |
35 | 26 | 19 | 14 | 10 | |
36 | 26 | 19 | 14 | 10 | |
37 | 27 | 20 | 15 | 11 | |
38 | 28 | 21 | 15 | 11 | |
39 | 29 | 21 | 15 | 11 | |
40 | 29 | 21 | 15 | 11 | |
41 | 30 | 22 | 16 | 12 | |
42 | 31 | 22 | 16 | 12 | |
43 | 31 | 22 | 16 | 12 | |
44 | 32 | 23 | 17 | 13 | |
45 | 32 | 23 | 17 | 13 | |
46 | 33 | 24 | 18 | 14 | |
47 | 34 | 25 | 19 | 14 | |
48 | 35 | 26 | 19 | 14 | |
49 | 36 | 26 | 19 | 14 | |
50 | 36 | 26 | 19 | 14 | |
51 | 37 | 27 | 20 | 15 | |
52 | 38 | 28 | 21 | 15 | |
53 | 39 | 29 | 21 | 15 | |
54 | 40 | 29 | 21 | 15 | |
55 | 40 | 29 | 21 | 15 | |
56 | 41 | 30 | 22 | 16 | |
57 | 42 | 31 | 22 | 16 | |
58 | 43 | 31 | 22 | 16 | |
59 | 43 | 31 | 22 | 16 | |
60 | 44 | 32 | 23 | 17 | |
61 | 45 | 32 | 23 | 17 | |
62 | 45 | 32 | 23 | 17 | |
63 | 46 | 33 | 24 | 18 | |
64 | 46 | 33 | 24 | 18 | |
65 | 47 | 34 | 25 | 19 | |
66 | 48 | 35 | 26 | 19 | |
67 | 49 | 36 | 26 | 19 | |
68 | 50 | 36 | 26 | 19 | |
69 | 50 | 36 | 26 | 19 | |
70 | 51 | 37 | 27 | 20 | |
71 | 51 | 37 | 27 | 20 | |
72 | 52 | 38 | 28 | 21 | |
73 | 53 | 39 | 29 | 21 | |
74 | 54 | 40 | 29 | 21 | |
75 | 55 | 40 | 29 | 21 | |
76 | 55 | 40 | 29 | 21 | |
77 | 56 | 41 | 30 | 22 | |
78 | 57 | 42 | 31 | 22 | |
79 | 58 | 43 | 31 | 22 | |
80 | 59 | 43 | 31 | 22 | |
81 | 59 | 43 | 31 | 22 | |
82 | 60 | 44 | 32 | 23 | |
83 | 61 | 45 | 32 | 23 | |
84 | 62 | 45 | 32 | 23 | |
85 | 62 | 45 | 32 | 23 | |
86 | 63 | 46 | 33 | 24 | |
87 | 64 | 46 | 33 | 24 | |
88 | 64 | 46 | 33 | 24 | |
89 | 65 | 47 | 34 | 25 | |
90 | 65 | 47 | 34 | 25 | |
91 | 66 | 48 | 35 | 26 | |
92 | 67 | 49 | 36 | 26 | |
93 | 68 | 50 | 36 | 26 | |
94 | 69 | 50 | 36 | 26 | |
95 | 69 | 50 | 36 | 26 | |
96 | 70 | 51 | 37 | 27 | |
97 | 71 | 51 | 37 | 27 | |
98 | 71 | 51 | 37 | 27 | |
99 | 72 | 52 | 38 | 28 | |
100 | 72 | 52 | 38 | 28 | |
96 97 98 99 100 | |
| | | | | | |
| ------ ------ | |
| | | | |
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
-------- | | | ------ | | | ------ | | ------ | ------ ------ | | | ------ | |
| | | | | | | | | | | | | | | | | | | | |
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | |
| | | | | | | | | | | | | | | | | | | | |
| | | -------- | | -------- | -------- -------- | | | -------- | |
| | | | | | | | | | | | | | | |
37 38 39 40 41 42 43 44 45 46 47 48 49 50 | |
| | | | | | | | | | | | | | | |
| | --------- | --------- --------- | | | --------- | |
| | | | | | | | | | | |
27 28 29 30 31 32 33 34 35 36 | |
| | | | | | | | | | | |
| ------------- ---------- | | | ---------- | |
| | | | | | | | |
20 21 22 23 24 25 26 | |
| | | | | | | | |
--------------------- | | | ------------- | |
| | | | | | |
15 16 17 18 19 | |
| | | | | | |
| | | --------------------- | |
| | | | | |
11 12 13 14 | |
| | | | | |
| | ------------------------------ | |
| | | | |
8 9 10 | |
| | | | |
| ---------------------------------------- | |
| | | |
6 7 | |
| | | |
-------------------------------------------------------- | |
| | |
5 | |
| | |
| | |
| | |
4 | |
| | |
| | |
| | |
3 | |
| | |
| | |
| | |
2 | |
| | |
| | |
| | |
1 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jutility import util, plotting | |
import tree | |
def diagram_recursive_chaos(n_max, printer): | |
table = util.Table( | |
util.Column("n", width=10, title="n"), | |
util.Column("q_n", width=10, title="Q(n)"), | |
util.Column("dq", width=10, title="Q(n) - Q(n-1)"), | |
util.Column("rq", ".3f", width=10, title="n / Q(n)"), | |
printer=printer, | |
) | |
q = {0: 1, 1: 1} | |
table.update(n=0, q_n=q[0]) | |
table.update(n=1, q_n=q[1]) | |
for n in range(2, n_max + 1): | |
q[n] = q[n - q[n - 1]] + q[n - q[n - 2]] | |
table.update(n=n, q_n=q[n], dq=(q[n] - q[n - 1]), rq=(n / q[n])) | |
return table | |
if __name__ == "__main__": | |
printer = util.Printer("diagram_recursive_chaos.txt", ".") | |
table = diagram_recursive_chaos(100, printer) | |
tree_dict = tree.list_to_tree_dict(table.get_data("q_n")) | |
tree.print_tree_dict(tree_dict, 3, printer) | |
plotting.plot( | |
plotting.Line(*table.get_data("n", "rq"), c="b"), | |
plot_name="n/Q(n) in chaotic sequence", | |
dir_name=".", | |
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
n | Q(n) | Q(n) - Q(n-1) | n / Q(n) | |
---------- | ---------- | ------------- | ---------- | |
0 | 1 | | | |
1 | 1 | | | |
2 | 2 | 1 | 1.000 | |
3 | 3 | 1 | 1.000 | |
4 | 3 | 0 | 1.333 | |
5 | 4 | 1 | 1.250 | |
6 | 5 | 1 | 1.200 | |
7 | 5 | 0 | 1.400 | |
8 | 6 | 1 | 1.333 | |
9 | 6 | 0 | 1.500 | |
10 | 6 | 0 | 1.667 | |
11 | 8 | 2 | 1.375 | |
12 | 8 | 0 | 1.500 | |
13 | 8 | 0 | 1.625 | |
14 | 10 | 2 | 1.400 | |
15 | 9 | -1 | 1.667 | |
16 | 10 | 1 | 1.600 | |
17 | 11 | 1 | 1.545 | |
18 | 11 | 0 | 1.636 | |
19 | 12 | 1 | 1.583 | |
20 | 12 | 0 | 1.667 | |
21 | 12 | 0 | 1.750 | |
22 | 12 | 0 | 1.833 | |
23 | 16 | 4 | 1.438 | |
24 | 14 | -2 | 1.714 | |
25 | 14 | 0 | 1.786 | |
26 | 16 | 2 | 1.625 | |
27 | 16 | 0 | 1.688 | |
28 | 16 | 0 | 1.750 | |
29 | 16 | 0 | 1.812 | |
30 | 20 | 4 | 1.500 | |
31 | 17 | -3 | 1.824 | |
32 | 17 | 0 | 1.882 | |
33 | 20 | 3 | 1.650 | |
34 | 21 | 1 | 1.619 | |
35 | 19 | -2 | 1.842 | |
36 | 20 | 1 | 1.800 | |
37 | 22 | 2 | 1.682 | |
38 | 21 | -1 | 1.810 | |
39 | 22 | 1 | 1.773 | |
40 | 23 | 1 | 1.739 | |
41 | 23 | 0 | 1.783 | |
42 | 24 | 1 | 1.750 | |
43 | 24 | 0 | 1.792 | |
44 | 24 | 0 | 1.833 | |
45 | 24 | 0 | 1.875 | |
46 | 24 | 0 | 1.917 | |
47 | 32 | 8 | 1.469 | |
48 | 24 | -8 | 2.000 | |
49 | 25 | 1 | 1.960 | |
50 | 30 | 5 | 1.667 | |
51 | 28 | -2 | 1.821 | |
52 | 26 | -2 | 2.000 | |
53 | 30 | 4 | 1.767 | |
54 | 30 | 0 | 1.800 | |
55 | 28 | -2 | 1.964 | |
56 | 32 | 4 | 1.750 | |
57 | 30 | -2 | 1.900 | |
58 | 32 | 2 | 1.812 | |
59 | 32 | 0 | 1.844 | |
60 | 32 | 0 | 1.875 | |
61 | 32 | 0 | 1.906 | |
62 | 40 | 8 | 1.550 | |
63 | 33 | -7 | 1.909 | |
64 | 31 | -2 | 2.065 | |
65 | 38 | 7 | 1.711 | |
66 | 35 | -3 | 1.886 | |
67 | 33 | -2 | 2.030 | |
68 | 39 | 6 | 1.744 | |
69 | 40 | 1 | 1.725 | |
70 | 37 | -3 | 1.892 | |
71 | 38 | 1 | 1.868 | |
72 | 40 | 2 | 1.800 | |
73 | 39 | -1 | 1.872 | |
74 | 40 | 1 | 1.850 | |
75 | 39 | -1 | 1.923 | |
76 | 42 | 3 | 1.810 | |
77 | 40 | -2 | 1.925 | |
78 | 41 | 1 | 1.902 | |
79 | 43 | 2 | 1.837 | |
80 | 44 | 1 | 1.818 | |
81 | 43 | -1 | 1.884 | |
82 | 43 | 0 | 1.907 | |
83 | 46 | 3 | 1.804 | |
84 | 44 | -2 | 1.909 | |
85 | 45 | 1 | 1.889 | |
86 | 47 | 2 | 1.830 | |
87 | 47 | 0 | 1.851 | |
88 | 46 | -1 | 1.913 | |
89 | 48 | 2 | 1.854 | |
90 | 48 | 0 | 1.875 | |
91 | 48 | 0 | 1.896 | |
92 | 48 | 0 | 1.917 | |
93 | 48 | 0 | 1.938 | |
94 | 48 | 0 | 1.958 | |
95 | 64 | 16 | 1.484 | |
96 | 41 | -23 | 2.341 | |
97 | 52 | 11 | 1.865 | |
98 | 54 | 2 | 1.815 | |
99 | 56 | 2 | 1.768 | |
100 | 48 | -8 | 2.083 | |
95 86 87 99 98 | |
| | | | | | |
| ------ | | | |
| | | | | |
64 47 56 58 59 60 61 66 50 53 54 57 63 67 65 71 70 68 73 75 76 79 81 82 80 84 85 83 88 89 90 91 92 93 94 100 62 69 72 74 77 78 96 97 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| ----------------------------- | ---------------- ------ ------ | ----------- | ----------- ------ | ------ ------------------------------- --------------------- ------ | | |
| | | | | | | | | | | | | | | | | | |
31 32 35 30 33 36 34 38 37 39 42 43 44 45 46 48 49 40 41 52 51 55 | |
| | | | | | | | | | | | | | | | | | | | | | | |
---------------------- | ------------------------ -------- ----------- ------------------------------------------------------------- | ------------------ | ------ | |
| | | | | | | | | | | |
17 18 19 20 21 22 24 25 23 26 27 28 29 | |
| | | | | | | | | | | | | | |
------------------------------- ------------------------------------------------------------- --------------------------------------------------- -------------------------------------- | |
| | | | | |
11 12 13 15 14 16 | |
| | | | | | | |
------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | |
| | | | |
8 9 10 | |
| | | | |
--------------------------------------------------------------------------------------------------------------------------------------------------- | |
| | |
6 7 | |
| | | |
----------------------------------------------------------------------------------------------------------------------------------- | |
| | |
5 | |
| | |
| | |
| | |
4 | |
| | |
| | |
| | |
3 | |
| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def list_to_tree_dict(data_list): | |
tree_dict = {i: data for i, data in enumerate(data_list)} | |
return tree_dict | |
class Node: | |
def __init__(self, value, parent_node=None): | |
self.value = value | |
self.parent_node = parent_node | |
if parent_node is not None: | |
parent_node.children.append(self) | |
self.children = [] | |
self.pre_space = 0 | |
def is_leaf(self): | |
return (len(self.children) == 0) | |
def min_subtree_pos(self): | |
if self.is_leaf(): | |
bound = self.pre_space | |
else: | |
bound = min(child.min_subtree_pos() for child in self.children) | |
return bound | |
def max_subtree_pos(self): | |
if self.is_leaf(): | |
bound = self.pre_space | |
else: | |
bound = max(child.max_subtree_pos() for child in self.children) | |
return bound | |
def min_child_pos(self): | |
return min(child.pre_space for child in self.children) | |
def max_child_pos(self): | |
return max(child.pre_space for child in self.children) | |
def shift_subtree_pos(self, n): | |
self.pre_space += n | |
for child in self.children: | |
child.shift_subtree_pos(n) | |
def __repr__(self): | |
return "%s -> %s" % (self.parent_node.value, self.value) | |
def print_tree_dict(tree_dict, root, printer, num_space=2): | |
max_len = max(len(str(data)) for data in tree_dict.keys()) | |
item_width = max_len + num_space | |
reverse_dict = {v: [] for v in tree_dict.values()} | |
for k, v in tree_dict.items(): | |
reverse_dict[v].append(k) | |
root_node = Node(root, Node(None, None)) | |
level_list_list = [[root_node]] | |
leaf_list = [ | |
Node(leaf, root_node) | |
for leaf in reverse_dict[root] | |
if leaf != root | |
] | |
while len(leaf_list) > 0: | |
level_list_list.append(leaf_list) | |
leaf_list = [ | |
Node(leaf, parent) | |
for parent in leaf_list | |
if parent.value in reverse_dict | |
for leaf in reverse_dict[parent.value] | |
] | |
for level_list in reversed(level_list_list): | |
pre_space = 0 | |
for node in level_list: | |
subtree_min_pos = node.min_subtree_pos() | |
subtree_width = node.max_subtree_pos() - subtree_min_pos | |
if subtree_min_pos < pre_space: | |
node.shift_subtree_pos(pre_space - subtree_min_pos) | |
if not node.is_leaf(): | |
min_child_pos = node.min_child_pos() | |
max_child_pos = node.max_child_pos() | |
node.pre_space = (min_child_pos + max_child_pos) // 2 | |
pre_space += subtree_width + item_width | |
for i, level_list in enumerate(reversed(level_list_list)): | |
for line_type in ["-", "|1", "v", "|2"]: | |
pos = 0 | |
for node in level_list: | |
if line_type in ["-", "|1"] and node.is_leaf(): | |
continue | |
if line_type in ["|1", "|2", "v"]: | |
s = str(node.value) if (line_type == "v") else "|" | |
s_pos = node.pre_space | |
else: | |
min_child_pos = node.min_child_pos() | |
max_child_pos = node.max_child_pos() | |
c = "-" if (len(node.children) > 1) else "|" | |
s = c * (max_child_pos - min_child_pos + 1) | |
s_pos = min_child_pos | |
pad_len = s_pos - pos | |
s = s.ljust(item_width) | |
s = s.rjust(pad_len + len(s)) | |
printer(s, end="") | |
pos += len(s) | |
printer(end="\n") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment