-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtree.php
More file actions
126 lines (100 loc) · 2.35 KB
/
tree.php
File metadata and controls
126 lines (100 loc) · 2.35 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
54
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/php
<?php
$examples = array();
$examples [] = "john";
$examples [] = "job";
$examples [] = "joe";
$examples [] = "andrew";
$examples [] = "andy";
$examples [] = "timmy";
$examples [] = "jack";
$examples [] = "joan";
$examples [] = "table";
$examples [] = "chair";
$examples [] = "light";
$input = file_get_contents("wordlist");
$input = trim($input);
$dataA = explode("\n", $input);
foreach ($dataA as $data)
{
$examples[] = $data;
}
$tree = array('count' => 0);
foreach ($examples as $example)
{
store_in_tree($tree, $example);
}
//print_r($tree);
//die();
//assume tree count has more than max
$searchTree = array();
$searchTree[] = array();
$highestCount = 0;
$maxCount = 150;
$highestNode = array();
//Keep searching search queue
while(count($searchTree) > 0)
{
$nextNode = array_pop($searchTree);
echo "\n\n\nNext node " . print_loc($nextNode). "\n";
//If over max, add children and move on
if (locpointer($nextNode)['count'] >= $maxCount)
{
echo "Count too big, adding children\n";
//Add children to searchtree
foreach (locpointer($nextNode) as $childKey => $nodeChild)
{
if ($childKey == "count")
{
continue;
}
$currentLoc = $nextNode;
$currentLoc[] = $childKey;
$searchTree[] = $currentLoc;
}
continue;
}
//Find highest count
echo "Node count: " . locpointer($nextNode)['count'] . "\n";
if (locpointer($nextNode)['count'] > $highestCount)
{
$highestCount = locpointer($nextNode)['count'];
$highestNode = $nextNode;
echo "highest count now $highestCount with node " . print_loc($highestNode) . "\n";
}
echo "end of loop, count of searchTree: " . count($searchTree) . "\n";
}
echo "And the winner is : " . print_loc($highestNode). " with count of $highestCount with the limit count being $maxCount\n";
function locpointer($loc)
{
global $tree;
$pointer = &$tree;
foreach ($loc as $char)
{
$pointer = &$pointer[$char];
}
return $pointer;
}
function print_loc($loc)
{
$output = '$tree';
foreach ($loc as $index)
{
$output .= '[' . $index . ']';
}
return $output;
}
function store_in_tree(&$tree, $inputString)
{
$strArray = str_split($inputString);
$pointer = &$tree;
foreach ($strArray as $key => $char)
{
if (!isset($pointer[$char]))
{
$pointer[$char] = array('count' => 0);
}
$pointer['count'] ++;
$pointer = &$pointer[$char];
}
}