Class: Array
Overview
Adding some functionality (permutations) and syntactic sugar to array
Instance Method Summary collapse
- #/(l) ⇒ Object
- #add?(x) ⇒ Boolean
- #each_char(&block) ⇒ Object
- #permutations ⇒ Object
- #powerset ⇒ Object
- #proper_subsets ⇒ Object
- #triples ⇒ Object
- #tuples ⇒ Object
Instance Method Details
#/(l) ⇒ Object
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/monkey_patching.rb', line 83 def /(l) res = [] each_with_index do |x,i| res << [] if i % l == 0 res.last << x end res end |
#add?(x) ⇒ Boolean
46 47 48 49 50 51 52 53 54 |
# File 'lib/monkey_patching.rb', line 46 def add?(x) if x unless include? x push(x).sort end end self end |
#each_char(&block) ⇒ Object
94 95 96 |
# File 'lib/monkey_patching.rb', line 94 def each_char(&block) each &block end |
#permutations ⇒ Object
76 77 78 79 80 81 |
# File 'lib/monkey_patching.rb', line 76 def permutations return [self] if size < 2 perm = [] each { |e| (self - [e]).permutations.each { |p| perm << ([e] + p) } } perm end |
#powerset ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/monkey_patching.rb', line 56 def powerset ret = self.inject([[]]) do |acc, x| res = [] acc.each { |s| res << s; res << ([x]+s).sort } res end ret.sort do |s1,s2| if s1.size == s2.size s1 <=> s2 else s1.size <=> s2.size end end end |
#proper_subsets ⇒ Object
72 73 74 |
# File 'lib/monkey_patching.rb', line 72 def proper_subsets powerset.select { |s| s.size > 0 and s.size < size } end |
#triples ⇒ Object
39 40 41 42 43 44 |
# File 'lib/monkey_patching.rb', line 39 def triples res = [] tuples.each { |a,b| self.each { |c| res << [a,b,c] } } res end |
#tuples ⇒ Object
32 33 34 35 36 37 |
# File 'lib/monkey_patching.rb', line 32 def tuples res = [] self.each { |a| self.each { |b| res << [a,b] } } res end |