compsci 0.1.0.1 → 0.1.1.1
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.
- checksums.yaml +4 -4
- data/Rakefile +7 -2
- data/VERSION +1 -1
- data/compsci.gemspec +5 -0
- data/examples/binary_tree.rb +2 -2
- data/lib/compsci/names.rb +0 -76
- data/lib/compsci/names/greek.rb +83 -0
- data/lib/compsci/timer.rb +0 -1
- data/lib/compsci/tree.rb +4 -2
- data/test/names.rb +1 -0
- metadata +72 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4f7afa18fdbd091cf4fed0668fe59204f8f05fa
|
4
|
+
data.tar.gz: c123e0795298ac870f4b769f97818144e50a6f74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9072889f4e3404d945686c1dccf2818d3fd359354f7b78fa42562ecb380918abc9899cacf14ce7e1e4c29b31542b1ba0c57b8f1f15b058b12132302fc77f8f99
|
7
|
+
data.tar.gz: adb4c6ec9b7b23ebc5781204db5fb1062826ee19426f8c7e3ad1098c362c535cdc0e5b71c60abe9b009ed66f4ef317b3bffa36c4f8fdbda84d37fac3555f6788
|
data/Rakefile
CHANGED
@@ -31,7 +31,7 @@ metrics_tasks = []
|
|
31
31
|
begin
|
32
32
|
require 'flog_task'
|
33
33
|
FlogTask.new do |t|
|
34
|
-
t.threshold =
|
34
|
+
t.threshold = 800
|
35
35
|
t.dirs = ['lib']
|
36
36
|
t.verbose = true
|
37
37
|
end
|
@@ -79,7 +79,12 @@ def rprof_sh(script, args = '', rprof_args = '')
|
|
79
79
|
lib_sh ['ruby-prof', rprof_args, script, '--', args].join(' ')
|
80
80
|
end
|
81
81
|
|
82
|
-
scripts = [
|
82
|
+
scripts = [
|
83
|
+
"examples/binary_tree.rb",
|
84
|
+
"examples/complete_tree.rb",
|
85
|
+
"examples/heap.rb",
|
86
|
+
"examples/tree.rb",
|
87
|
+
]
|
83
88
|
|
84
89
|
desc "Run ruby-prof on examples/"
|
85
90
|
task "ruby-prof" => "loadavg" do
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1.1
|
data/compsci.gemspec
CHANGED
@@ -15,6 +15,11 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.files += Dir['test/**/*.rb']
|
16
16
|
s.files += Dir['examples/**/*.rb']
|
17
17
|
|
18
|
+
s.add_development_dependency "buildar" "~> 3.0"
|
18
19
|
s.add_development_dependency "minitest", "~> 5.0"
|
19
20
|
s.add_development_dependency "rake", "~> 0"
|
21
|
+
s.add_development_dependency "flog", "~> 0"
|
22
|
+
s.add_development_dependency "flay", "~> 0"
|
23
|
+
s.add_development_dependency "roodi", "~> 0"
|
24
|
+
s.add_development_dependency "ruby-prof", "~> 0"
|
20
25
|
end
|
data/examples/binary_tree.rb
CHANGED
@@ -13,7 +13,7 @@ EOF
|
|
13
13
|
count = 0
|
14
14
|
start = Timer.now
|
15
15
|
start_1k = Timer.now
|
16
|
-
tree =
|
16
|
+
tree = BinaryTree.new ChildNode, rand(99)
|
17
17
|
|
18
18
|
loop {
|
19
19
|
count += 1
|
@@ -50,7 +50,7 @@ EOF
|
|
50
50
|
vals = Array.new(30) { rand 99 }
|
51
51
|
p vals
|
52
52
|
|
53
|
-
tree =
|
53
|
+
tree = BinaryTree.new ChildNode, vals.shift
|
54
54
|
tree.push vals.shift until vals.empty?
|
55
55
|
puts tree
|
56
56
|
|
data/lib/compsci/names.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
module CompSci
|
3
2
|
module Names
|
4
3
|
WW1 = [:apples, :butter, :charlie, :duff, :edward, :freddy, :george,
|
@@ -53,80 +52,5 @@ module CompSci
|
|
53
52
|
end
|
54
53
|
names[pos]
|
55
54
|
end
|
56
|
-
|
57
|
-
module Greek
|
58
|
-
UPPER = [*'Α'..'Ρ', *'Σ'..'Ω']
|
59
|
-
LOWER = [*('α'..'ρ'), *('σ'..'ω')]
|
60
|
-
SYMBOLS = [:alpha, :beta, :gamma, :delta, :epsilon, :zeta, :eta, :theta,
|
61
|
-
:iota, :kappa, :lambda, :mu, :nu, :xi, :omicron, :pi, :rho,
|
62
|
-
:sigma, :tau, :upsilon, :phi, :chi, :psi, :omega]
|
63
|
-
|
64
|
-
# e.g. { alpha: ['Α', 'α'] ...
|
65
|
-
CHAR_MAP = {}
|
66
|
-
SYMBOLS.each_with_index { |sym, i| CHAR_MAP[sym] = [UPPER[i], LOWER[i]] }
|
67
|
-
|
68
|
-
LATIN_SYMBOLS = {
|
69
|
-
a: :alpha,
|
70
|
-
b: :beta,
|
71
|
-
c: :gamma,
|
72
|
-
d: :delta,
|
73
|
-
e: :epsilon,
|
74
|
-
f: :zeta,
|
75
|
-
g: :eta,
|
76
|
-
h: :theta,
|
77
|
-
i: :iota,
|
78
|
-
j: :xi, # use for j, q and w
|
79
|
-
k: :kappa,
|
80
|
-
l: :lambda,
|
81
|
-
m: :mu,
|
82
|
-
n: :nu,
|
83
|
-
# nonesuch: => :xi,
|
84
|
-
o: :omicron,
|
85
|
-
p: :pi,
|
86
|
-
q: :xi, # use for j, q and w
|
87
|
-
r: :rho,
|
88
|
-
s: :sigma,
|
89
|
-
t: :tau,
|
90
|
-
u: :upsilon,
|
91
|
-
v: :phi,
|
92
|
-
w: :xi, # use for j, q and w
|
93
|
-
x: :chi,
|
94
|
-
y: :psi,
|
95
|
-
z: :omega,
|
96
|
-
}
|
97
|
-
SYMBOLS26 = LATIN_SYMBOLS.values
|
98
|
-
|
99
|
-
def self.upper(latin_str)
|
100
|
-
CHAR_MAP.fetch(self.sym(latin_str)).first
|
101
|
-
end
|
102
|
-
|
103
|
-
def self.lower(latin_str)
|
104
|
-
CHAR_MAP.fetch(self.sym(latin_str)).last
|
105
|
-
end
|
106
|
-
|
107
|
-
def self.sym(val)
|
108
|
-
case val
|
109
|
-
when String
|
110
|
-
if val.match %r{\A\d+\z}
|
111
|
-
val = val.to_i
|
112
|
-
if val >= 0 and val < SYMBOLS.size
|
113
|
-
SYMBOLS[val]
|
114
|
-
else
|
115
|
-
raise "val #{val} not in range (#{SYMBOLS.size})"
|
116
|
-
end
|
117
|
-
else
|
118
|
-
LATIN_SYMBOLS.fetch val[0].downcase.to_sym
|
119
|
-
end
|
120
|
-
when Integer
|
121
|
-
if val >= 0 and val < SYMBOLS.size
|
122
|
-
SYMBOLS[val]
|
123
|
-
else
|
124
|
-
raise "val #{val} not in range (#{SYMBOLS.size})"
|
125
|
-
end
|
126
|
-
else
|
127
|
-
raise "unexpected val #{val} (#{val.class})"
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
55
|
end
|
132
56
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module CompSci
|
4
|
+
module Names
|
5
|
+
module Greek
|
6
|
+
UPPER = [*'Α'..'Ρ', *'Σ'..'Ω']
|
7
|
+
LOWER = [*('α'..'ρ'), *('σ'..'ω')]
|
8
|
+
SYMBOLS = [:alpha, :beta, :gamma, :delta, :epsilon, :zeta, :eta, :theta,
|
9
|
+
:iota, :kappa, :lambda, :mu, :nu, :xi, :omicron, :pi, :rho,
|
10
|
+
:sigma, :tau, :upsilon, :phi, :chi, :psi, :omega]
|
11
|
+
|
12
|
+
# e.g. { alpha: ['Α', 'α'] ...
|
13
|
+
CHAR_MAP = {}
|
14
|
+
SYMBOLS.each_with_index { |sym, i| CHAR_MAP[sym] = [UPPER[i], LOWER[i]] }
|
15
|
+
|
16
|
+
LATIN_SYMBOLS = {
|
17
|
+
a: :alpha,
|
18
|
+
b: :beta,
|
19
|
+
c: :gamma,
|
20
|
+
d: :delta,
|
21
|
+
e: :epsilon,
|
22
|
+
f: :zeta,
|
23
|
+
g: :eta,
|
24
|
+
h: :theta,
|
25
|
+
i: :iota,
|
26
|
+
j: :xi, # use for j, q and w
|
27
|
+
k: :kappa,
|
28
|
+
l: :lambda,
|
29
|
+
m: :mu,
|
30
|
+
n: :nu,
|
31
|
+
# nonesuch: => :xi,
|
32
|
+
o: :omicron,
|
33
|
+
p: :pi,
|
34
|
+
q: :xi, # use for j, q and w
|
35
|
+
r: :rho,
|
36
|
+
s: :sigma,
|
37
|
+
t: :tau,
|
38
|
+
u: :upsilon,
|
39
|
+
v: :phi,
|
40
|
+
w: :xi, # use for j, q and w
|
41
|
+
x: :chi,
|
42
|
+
y: :psi,
|
43
|
+
z: :omega,
|
44
|
+
}
|
45
|
+
SYMBOLS26 = LATIN_SYMBOLS.values
|
46
|
+
|
47
|
+
def self.upper(latin_str)
|
48
|
+
CHAR_MAP.fetch(self.sym(latin_str)).first
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.lower(latin_str)
|
52
|
+
CHAR_MAP.fetch(self.sym(latin_str)).last
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.sym(val)
|
56
|
+
case val
|
57
|
+
when String
|
58
|
+
if val.match %r{\A\d+\z}
|
59
|
+
# treat positive integer strings as positive integers
|
60
|
+
val = val.to_i
|
61
|
+
if val >= 0 and val < SYMBOLS.size
|
62
|
+
SYMBOLS[val]
|
63
|
+
else
|
64
|
+
raise "val #{val} not in range (#{SYMBOLS.size})"
|
65
|
+
end
|
66
|
+
else
|
67
|
+
# map the first character to a greek symbol
|
68
|
+
LATIN_SYMBOLS.fetch val[0].downcase.to_sym
|
69
|
+
end
|
70
|
+
when Integer
|
71
|
+
if val >= 0 and val < SYMBOLS.size
|
72
|
+
# map the integer to a greek symbol
|
73
|
+
SYMBOLS[val]
|
74
|
+
else
|
75
|
+
raise "val #{val} not in range (#{SYMBOLS.size})"
|
76
|
+
end
|
77
|
+
else
|
78
|
+
raise "unexpected val #{val} (#{val.class})"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/compsci/timer.rb
CHANGED
data/lib/compsci/tree.rb
CHANGED
@@ -100,12 +100,14 @@ module CompSci
|
|
100
100
|
def display(width: 80)
|
101
101
|
count = 0
|
102
102
|
str = ''
|
103
|
-
self.bf_search { |
|
103
|
+
self.bf_search { |node|
|
104
104
|
count += 1
|
105
105
|
level = Math.log(count, 2).floor
|
106
106
|
block_width = width / (2**level)
|
107
|
+
val = node.to_s
|
107
108
|
str += "\n" if 2**level == count and count > 1
|
108
|
-
|
109
|
+
space = [(block_width + val.size) / 2, val.size + 1].max
|
110
|
+
str += val.ljust(space, ' ').rjust(block_width, ' ')
|
109
111
|
false # keep searching to visit every node
|
110
112
|
}
|
111
113
|
str
|
data/test/names.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compsci
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Hull
|
@@ -10,6 +10,20 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2017-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: buildar~> 3.0
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: minitest
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,62 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: flog
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: flay
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: roodi
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: ruby-prof
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
41
111
|
description: Trees, Heaps, Timers, Error fitting, etc
|
42
112
|
email:
|
43
113
|
executables: []
|
@@ -58,6 +128,7 @@ files:
|
|
58
128
|
- lib/compsci/fit.rb
|
59
129
|
- lib/compsci/heap.rb
|
60
130
|
- lib/compsci/names.rb
|
131
|
+
- lib/compsci/names/greek.rb
|
61
132
|
- lib/compsci/node.rb
|
62
133
|
- lib/compsci/timer.rb
|
63
134
|
- lib/compsci/tree.rb
|