-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThe Computer as Master Mind Export JSON.py
More file actions
53 lines (38 loc) · 1.25 KB
/
The Computer as Master Mind Export JSON.py
File metadata and controls
53 lines (38 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import sys
#~ pip install anytree
from anytree import AnyNode, Node, PreOrderIter
from anytree.importer import JsonImporter, DictImporter
from anytree.exporter import JsonExporter
def nodenamefunc(node):
if len(node.ancestors) == 0:
return node.name
Name = ""
for i, anc in enumerate(node.ancestors):
if i == 0:
Name += anc.name
else:
Name += f":{anc.AnswerIdx}/{anc.name}"
return Name + f":{node.AnswerIdx}/{node.name}"
def edgeattrfunc(node, child):
return f'label="{GetBWStringLinear(child.AnswerIdx)}"'
def Export(Tree, FileName):
Exp = JsonExporter()
with open(FileName, "w") as f:
Exp.write(Tree, f)
################### Main ###################
#~ Some helpers for indexing
filename = "The Computer as Master Mind Helpers.py"
with open(filename, "rb") as source_file:
code = compile(source_file.read(), filename, "exec")
exec(code)
#~ Import it from file
Imp = JsonImporter(DictImporter(nodecls=Node))
with open("ClassicMastermindTree.json", "r") as f:
Root = Imp.read(f)
#~ Delete unnecessary attributes
for Node in PreOrderIter(Root):
delattr(Node, "Codes")
delattr(Node, "Pattern")
print(Root)
Export(Root, "ClassicMastermindTreeVis.json")
print("Done.")