tnode 0.0.0 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tnode.rb +98 -14
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93248f7cb8d5019ed4509edff46e1bc95d8ce593bfaa2f5358fcf87754257144
4
- data.tar.gz: 03bb7c311605111f2c8f8ce93ae698548c942a7bd74db7e18ef0c082bc841212
3
+ metadata.gz: 31c82cfdf9d0b03e794553ada962ee3a1bed80421939bcaf455cb5d434c74f26
4
+ data.tar.gz: 329c673910cfe946af01c839e50add3bcbcfc83b2b3b2362876e1cdff7c54f20
5
5
  SHA512:
6
- metadata.gz: d4c61cb15cb6396dbb67a1e655dfc86ea9b952033b2dfac7a8ba28f089ffaf361bcd3978d2ac62d6e876a98e5283393c495e8c51a5971026d785447557b8ec80
7
- data.tar.gz: 788557d15716a52773be284d3171d0632a353a652a9fcba2cd965df36af064870e9298bd097bbe5e7addbd548d0b5ccb2ca9fba71f3686187a345a667fc054dc
6
+ metadata.gz: 8c7a9cbe1216ab6db072014ecf6e3e6ad0060b58b7ea49edff99f64ae3fa76538d7f3e1df4c1f4eda2fb236ff869bfe513462aa36601155f0b076275a8ffe02b
7
+ data.tar.gz: dc2aad78d813c103280d2170944535f71da7755293c559ae3f8d8bf8d93d42f5af121474be9c22b069e05f434a83cc62f1af8432bd5b43eb33d06383909d4c8e
data/lib/tnode.rb CHANGED
@@ -1,43 +1,102 @@
1
1
  class Tnode
2
- attr_accessor :data, :links
2
+ attr_accessor :data, :links, :trav_links
3
3
 
4
4
  def initialize(data)
5
5
  @data = data
6
6
  @links = []
7
+ @trav_links = []
7
8
  end
8
9
 
9
10
  def insert(data)
10
- @links << Tnode.new(data)
11
+ new_node = Tnode.new(data)
12
+ @links << new_node
13
+ new_node.links << self
14
+ end
15
+
16
+ def init_trav_links
17
+ re_init_trav_links(nil)
18
+ end
19
+
20
+ def re_init_trav_links(parent)
21
+ @trav_links = links.clone
22
+ trav_links.delete(parent)
23
+ trav_links.each do |child|
24
+ child.trav_links.delete(self)
25
+ child.re_init_trav_links(self)
26
+ end
11
27
  end
12
28
 
13
29
  def traverse_dfs
30
+ init_trav_links
31
+ re_traverse_dfs
32
+ end
33
+
34
+ def re_traverse_dfs
14
35
  traverse_dfs_arr = [data]
15
- unless links.empty?
16
- links.each do |child|
17
- traverse_dfs_arr += child.traverse_dfs
36
+ unless trav_links.empty?
37
+ trav_links.each do |child|
38
+ traverse_dfs_arr += child.re_traverse_dfs
18
39
  end
19
40
  end
20
41
  traverse_dfs_arr
21
42
  end
22
43
 
23
44
  def traverse_bfs
45
+ init_trav_links
24
46
  traverse_bfs_arr = [data]
25
- @traverse_bfs_q = links.clone
47
+ @traverse_bfs_q = trav_links.clone
26
48
  until @traverse_bfs_q.empty?
27
49
  traverse_bfs_arr << @traverse_bfs_q.first.data
28
- @traverse_bfs_q += @traverse_bfs_q.shift.links
50
+ @traverse_bfs_q += @traverse_bfs_q.shift.trav_links
29
51
  end
30
52
  traverse_bfs_arr
31
53
  end
32
54
 
55
+ def print_struct
56
+ init_trav_links
57
+ re_print_struct
58
+ end
59
+
60
+ # '├── '
61
+ # '│ '
62
+ # '└── '
63
+ # ' '
64
+ def re_print_struct(depth = 0, prefs = [])
65
+ puts data if depth == 0
66
+
67
+ # prefixes
68
+ trav_links.each_with_index do |child, i|
69
+ prefs.each do |pref|
70
+ print pref
71
+ end
72
+ if i == trav_links.size - 1 # is last?
73
+ prefs.push ' ' unless child.trav_links.empty? # has childs
74
+ print '└── '
75
+ puts child.data
76
+ child.re_print_struct(depth + 1, prefs) unless child.trav_links.empty?
77
+ prefs.pop
78
+ else
79
+ prefs.push '│ ' unless child.trav_links.empty? # has childs
80
+ print '├── '
81
+ puts child.data
82
+ child.re_print_struct(depth + 1, prefs) unless child.trav_links.empty?
83
+ end
84
+ end
85
+ end
86
+
33
87
  def tree_find(key_data)
88
+ init_trav_links
89
+ re_tree_find(key_data)
90
+ end
91
+
92
+ def re_tree_find(key_data)
34
93
  target_node = nil
35
94
  if key_data == data
36
95
  return self
37
96
  else
38
- unless links.empty?
39
- links.each do |child|
40
- target_node = child.tree_find(key_data)
97
+ unless trav_links.empty?
98
+ trav_links.each do |child|
99
+ target_node = child.re_tree_find(key_data)
41
100
  return target_node unless target_node.nil?
42
101
  end
43
102
  end
@@ -47,21 +106,46 @@ class Tnode
47
106
  end
48
107
 
49
108
  def remove_node(key_data)
50
- links.each do |child|
109
+ init_trav_links
110
+ re_remove_node(key_data)
111
+ end
112
+
113
+ def re_remove_node(key_data)
114
+ trav_links.each do |child|
51
115
  if child.data == key_data
52
116
  links.delete(child)
53
117
  return
54
118
  else
55
- child.remove_node(key_data)
119
+ child.re_remove_node(key_data)
56
120
  end
57
121
  end
58
122
  end
59
123
 
60
- def tree_apart(tnode)
61
- traverse.intersection(tnode.traverse).empty?
124
+ def apart?(another)
125
+ traverse_dfs.intersection(another.traverse_dfs).empty?
126
+ end
127
+
128
+ def tree_inter(another)
129
+ traverse_dfs.intersection(another.traverse_dfs)
62
130
  end
63
131
 
64
132
  def insert_under(key_data, data)
65
133
  tree_find(key_data).insert(data)
66
134
  end
135
+
136
+ def insert_tnode_under(key_data, newnode)
137
+ tree_find(key_data).links << newnode
138
+ newnode.links << tree_find(key_data)
139
+ end
140
+
141
+ def merge(another)
142
+ internodes = tree_inter(another)
143
+ if internodes.count == 1
144
+ another.tree_find(internodes.first).data = nil
145
+ another.tree_find(nil).links.each do |child|
146
+ child.remove_node(nil)
147
+ insert_tnode_under(internodes.first, child)
148
+ end
149
+ end
150
+ end
67
151
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tnode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rurika Misaka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-09 00:00:00.000000000 Z
11
+ date: 2022-06-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: My data structure homework
14
14
  email: goblinmaiden1931@gmail.com
@@ -19,7 +19,7 @@ files:
19
19
  - lib/tnode.rb
20
20
  homepage:
21
21
  licenses:
22
- - GLWTPL
22
+ - Nonstandard
23
23
  metadata: {}
24
24
  post_install_message:
25
25
  rdoc_options: []