victory 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b16cdc713345fce798e6fc148c348cac1b0f0d0e0e108c9fa5d57f6ea1c287af
4
- data.tar.gz: 8ea12344ad30454d80bf0117ed4473fe760f7cbd30aac7731e0d6fc9d5f81696
3
+ metadata.gz: fe96b696eb08e49451fb624e64d2c1f04de540e2cfdc5b655bcf431841d0b603
4
+ data.tar.gz: 41fd068c0a3175b6546e3d1fd20308e4563f75137f5dda4884d59d5c5fd27a34
5
5
  SHA512:
6
- metadata.gz: 674bec3c86ced7d31427151b8988970c0f7cf79d061f0c1a3c28f7ee5474ffd8db4694b2125ed4d26131ce869e16f1db0e897526a5db62f3b597bb9dda9ca9b5
7
- data.tar.gz: e4b93c1c9809b4c094f847392d9b4caf08277afb9dcacfe1c166c513bbd5991a025800f54d0d48fe10a7f1d63878cbf827636c47189433882802dd7f399dbaeb
6
+ metadata.gz: 4152e88b2c6201a435b6c2124d8ce7a5202e4fbe5766c156edacd17a2bd1f29a7ad188177c7318b6e69ae436ab3ed86c0d4415f22cc660e911e405b791185835
7
+ data.tar.gz: 31ee4fc4e2acd3e347c0b7c47c65fccbe90ccf3da35159569883ef904f9197b71dd0b2d9ce4c32875b71bd3aa19f9ece1786955438329c4d2987a591911abe40
data/USAGE.md CHANGED
@@ -11,6 +11,7 @@ In this markdown you will see the usage of all the datastructures and algorithms
11
11
  * [OpenStruct](#openstruct)
12
12
  * [Tuple](#tuple)
13
13
  * [Graph](#graph)
14
+ * [IOHelpers](#io-helpers)
14
15
 
15
16
  <a name="array" />
16
17
 
@@ -174,7 +175,70 @@ dg.to_s
174
175
  # => "(1-2)(1-6)(2-3)(2-4)(4-5)(6-4)"
175
176
  ```
176
177
 
178
+ ### Dijkstra's algorithm
179
+ ```ruby
180
+ g = Containers::Graph[1,2, 1,3, 2,4, 4,5, 3,5]
181
+ weights = {[1,2] => 2, [2,4] => 1, [4,5] => 1, [1,3] => 1, [3,5] => 5}
182
+ g.dijkstra_shortest_paths(weights, 1)
183
+ # => {1=>[1], 2=>[1, 2], 3=>[1, 3], 4=>[1, 2, 4], 5=>[1, 2, 4, 5]}
184
+ g.dijkstra_shortest_path(weights, 1, 5)
185
+ # => [1, 2, 4, 5]
186
+ ```
187
+
188
+ ### Bellman Ford's algorithm
189
+ ```ruby
190
+ g = Containers::Graph[1,2, 1,3, 2,4, 4,5, 3,5]
191
+ weights = {[1,2] => 2, [2,4] => 1, [4,5] => 1, [1,3] => 1, [3,5] => 5}
192
+ g.bellman_ford_shortest_paths(weights, 1)
193
+ # => {1=>[1], 2=>[1, 2], 3=>[1, 3], 4=>[1, 2, 4], 5=>[1, 2, 4, 5]}
194
+ ```
195
+
196
+ ### Topological sort
197
+ ```ruby
198
+ g = Containers::Graph[1,2, 1,3, 2,4, 4,5, 3,5]
199
+ g.topsort_iterator.to_a
200
+ # => [1, 3, 2, 4, 5]
201
+ ```
202
+
203
+ <a name="io-helpers" />
204
+
205
+ ## IO Helpers
206
+
207
+ ### Reader
208
+ Can read from `file` or `string`.
209
+ ```ruby
210
+ Reader.file("a")
211
+ # => ["1,2,3", "4,5,6", "7,8,9"]
212
+ Reader.file("a", col_sep: ",")
213
+ # => [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]
214
+ Reader.file("a", col_sep: ",", as: "i")
215
+ # => [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
216
+ Reader.file("a", col_sep: ",", mapper: ->(x) {x.to_i * x.to_i})
217
+ # => [[1, 4, 9], [16, 25, 36], [49, 64, 81]]
218
+ Reader.string("0.1#0.2#0.3", line_sep: "#", as: 'r')
219
+ # => [(1/10), (1/5), (3/10)]
220
+ ```
221
+ Supported types for `as` are:
222
+ * `s` for string (default)
223
+ * `i` for integer
224
+ * `f` for float
225
+ * `r` for rational
226
+ * `c` for complex
227
+ * `sym` for symbol
228
+
229
+ ### Writer
230
+ Can write to `file` or `string`.
231
+ ```ruby
232
+ a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
233
+ Writer.string(a, line_sep: '@', col_sep: '.')
234
+ # => "1.2.3@4.5.6@7.8.9"
235
+ Writer.string(a, line_sep: "\n", col_sep: ' ', mapper: ->(x) {"0,#{x}"})
236
+ # => "0,1 0,2 0,3\n0,4 0,5 0,6\n0,7 0,8 0,9"
237
+ Writer.file("b", a, line_sep: "\n", col_sep: ' ', mapper: ->x {"0,#{x}"})
238
+ ```
239
+
177
240
  # Other useful links
178
241
 
179
242
  * https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/
180
243
  * https://github.com/sagivo/algorithms
244
+ * https://github.com/SciRuby/rb-gsl
@@ -0,0 +1,38 @@
1
+ module IOHelpers
2
+ class Reader
3
+ def self.file(path, options = {})
4
+ line_sep = options[:line_sep] || "\n"
5
+ lines = File.readlines(path, line_sep, chomp: true)
6
+ map_lines(lines, options)
7
+ end
8
+
9
+ def self.string(str, options = {})
10
+ line_sep = options[:line_sep] || "\n"
11
+ lines = str.split(line_sep)
12
+ map_lines(lines, options)
13
+ end
14
+
15
+ def self.stream(path)
16
+ IO.foreach(path).lazy
17
+ end
18
+
19
+ def self.map_lines(lines, options)
20
+ col_sep = options[:col_sep]
21
+ as = options[:as] || 's'
22
+ mapper = options[:mapper]
23
+ if col_sep
24
+ lines.map { |line| line.split(col_sep).map { |col| map_element(col, as, mapper) } }
25
+ else
26
+ lines.map { |line| map_element(line, as, mapper) }
27
+ end
28
+ end
29
+
30
+ def self.map_element(element, as, mapper)
31
+ if mapper
32
+ mapper.call(element)
33
+ else
34
+ element.method("to_#{as}").call
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ module IOHelpers
2
+ class Writer
3
+ def self.file(path, data, options = {})
4
+ File.write(path, string(data, options))
5
+ end
6
+
7
+ def self.string(data, options = {})
8
+ line_sep = options[:line_sep] || "\n"
9
+ col_sep = options[:col_sep]
10
+ mapper = options[:mapper] || ->(x) { x.to_s }
11
+ if col_sep
12
+ data.map { |line| line.map(&mapper).join(col_sep) }.join(line_sep)
13
+ else
14
+ data.map(&mapper).join(line_sep)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module Victory
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: victory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnold Szederjesi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-16 00:00:00.000000000 Z
11
+ date: 2019-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -166,6 +166,8 @@ files:
166
166
  - lib/containers/trie.rb
167
167
  - lib/containers/tuple.rb
168
168
  - lib/include_rgl.rb
169
+ - lib/io_helpers/reader.rb
170
+ - lib/io_helpers/writer.rb
169
171
  - lib/victory.rb
170
172
  - lib/victory/version.rb
171
173
  - victory.gemspec