Skip to content

Instantly share code, notes, and snippets.

@davingee
Last active March 7, 2016 18:31
Show Gist options
  • Save davingee/2b54d24f77042df69062 to your computer and use it in GitHub Desktop.
Save davingee/2b54d24f77042df69062 to your computer and use it in GitHub Desktop.
module Boolean
end
TrueClass.send :include, Boolean
FalseClass.send :include, Boolean
true.is_a?(Boolean) #=> true
module ArrayExtensions
def rpermute( possibilities = self.uniq.count, p_array = [], index = 0 )
0.upto( possibilities - 1 ) do |i|
p_array[ index ] = i
if index < self.count - 1 # && !self.first.is_a?(Boolean)
self.rpermute( possibilities, p_array, index + 1 )
else
result = Array.new
0.upto( self.count - 1 ) do |j|
result[ j ] = self[ p_array[ j ] ]
end
pp result
end
end
end
end
module IntegerExtensions
def truth_table_array
( 0...self ).map{ |i| [ true, false ] }.flatten
end
end
Array.send :include, ArrayExtensions
Integer.send :include, IntegerExtensions
# no uniq pairs one can just count
a = [ 0, 1 ]
a.rpermute
[0, 0]
[0, 1]
[1, 0]
[1, 1]
a = [ 1, 2, 3 ]
a.rpermute
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 1]
[1, 2, 2]
[1, 2, 3]
[1, 3, 1]
[1, 3, 2]
[1, 3, 3]
[2, 1, 1]
[2, 1, 2]
[2, 1, 3]
[2, 2, 1]
[2, 2, 2]
[2, 2, 3]
[2, 3, 1]
[2, 3, 2]
[2, 3, 3]
[3, 1, 1]
[3, 1, 2]
[3, 1, 3]
[3, 2, 1]
[3, 2, 2]
[3, 2, 3]
[3, 3, 1]
[3, 3, 2]
[3, 3, 3]
# only 2 possibilities from all uniq pairs
number = 0
number.truth_table_array.rpermute
no output
number = 2
number.truth_table_array.rpermute
[true, true, true, true]
[true, true, true, false]
[true, true, false, true]
[true, true, false, false]
[true, false, true, true]
[true, false, true, false]
[true, false, false, true]
[true, false, false, false]
[false, true, true, true]
[false, true, true, false]
[false, true, false, true]
[false, true, false, false]
[false, false, true, true]
[false, false, true, false]
[false, false, false, true]
[false, false, false, false]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment