Cartesian 0.2.1 → 0.2.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.
- data/lib/URL desafio.txt +1 -0
- data/lib/cartesian.rb +44 -4
- metadata +3 -2
data/lib/URL desafio.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
http://www.ic.unicamp.br/~vignatti/desafio2.html
|
data/lib/cartesian.rb
CHANGED
|
@@ -43,11 +43,19 @@ module Cartesian
|
|
|
43
43
|
#
|
|
44
44
|
# [1,2].cartesian %w(A B) #=> [[1, "A"], [1, "B"], [2, "A"], [2, "B"]]
|
|
45
45
|
#
|
|
46
|
-
|
|
46
|
+
# optional parameter {:flatten => true}
|
|
47
|
+
#
|
|
48
|
+
def Cartesian.product(first, second, params={})
|
|
49
|
+
params[:flatten] ||= true
|
|
50
|
+
|
|
47
51
|
result = []
|
|
48
52
|
first.each do |a|
|
|
49
53
|
second.each do |b|
|
|
50
|
-
|
|
54
|
+
if params[:flatten] == true
|
|
55
|
+
result << [a, b].flatten
|
|
56
|
+
else
|
|
57
|
+
result << [a, b]
|
|
58
|
+
end
|
|
51
59
|
end
|
|
52
60
|
end
|
|
53
61
|
result
|
|
@@ -55,8 +63,8 @@ module Cartesian
|
|
|
55
63
|
|
|
56
64
|
# Cartesian.product for mixin.
|
|
57
65
|
#
|
|
58
|
-
def cartesian(other)
|
|
59
|
-
Cartesian.product(self, other)
|
|
66
|
+
def cartesian(other, params={})
|
|
67
|
+
Cartesian.product(self, other, params)
|
|
60
68
|
end
|
|
61
69
|
|
|
62
70
|
# Behaves as product, except for the elements are joined.
|
|
@@ -106,6 +114,38 @@ module Cartesian
|
|
|
106
114
|
def x(other)
|
|
107
115
|
CartesianIterator.new(self, other)
|
|
108
116
|
end
|
|
117
|
+
|
|
118
|
+
# Concise way of iterating multi-dimensionally
|
|
119
|
+
# over the same array or range.
|
|
120
|
+
#
|
|
121
|
+
# For instance,
|
|
122
|
+
#
|
|
123
|
+
# for x,y,z in [0,1]**3
|
|
124
|
+
# puts [x, y, z].join(',')
|
|
125
|
+
# end
|
|
126
|
+
#
|
|
127
|
+
# produces the following output
|
|
128
|
+
#
|
|
129
|
+
# 0,0,0
|
|
130
|
+
# 0,0,1
|
|
131
|
+
# 0,1,0
|
|
132
|
+
# 0,1,1
|
|
133
|
+
# 1,0,0
|
|
134
|
+
# 1,0,1
|
|
135
|
+
# 1,1,0
|
|
136
|
+
# 1,1,1
|
|
137
|
+
#
|
|
138
|
+
# It also works with Range objects.
|
|
139
|
+
#
|
|
140
|
+
def **(fixnum)
|
|
141
|
+
return self if fixnum <= 1
|
|
142
|
+
iter = CartesianIterator.new(self, self)
|
|
143
|
+
(fixnum-2).times do
|
|
144
|
+
iter.x(self)
|
|
145
|
+
end
|
|
146
|
+
iter
|
|
147
|
+
end
|
|
148
|
+
alias :power! :**
|
|
109
149
|
end
|
|
110
150
|
|
|
111
151
|
class Array
|
metadata
CHANGED
|
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: Cartesian
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: 0.2.
|
|
7
|
-
date: 2007-01-
|
|
6
|
+
version: 0.2.3
|
|
7
|
+
date: 2007-01-13 00:00:00 -03:00
|
|
8
8
|
summary: The Cartesian module provide methods for the calculation of the cartesian producted between two enumberable objects. It can also be easily mixed in into any enumberable class, i.e. any class with Enumerable module mixed in.
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|
|
@@ -33,6 +33,7 @@ files:
|
|
|
33
33
|
- tests/tc_cartesian.rb
|
|
34
34
|
- lib/cartesian.rb
|
|
35
35
|
- lib/cartesian_iterator.rb
|
|
36
|
+
- lib/URL desafio.txt
|
|
36
37
|
test_files:
|
|
37
38
|
- tests/tc_cartesian.rb
|
|
38
39
|
rdoc_options: []
|