用红宝石建立一个动态的真值表

时间:2019-03-22 15:31:38

标签: ruby

我正在尝试使用ruby构建动态的真值表。

例如,给定3,则应输出以下内容:

create_table(3):

T T T

T T F

T F T

T F F

F T T

F T F

F F T

F F F

我本来想使用递归来做到这一点,但我真的不知道该怎么做才能使每个组合恰好出现一次。

1 个答案:

答案 0 :(得分:0)

这是一种蛮力的方法,但是请注意,给定n的真值表与数字0...2**n的位值相对应。

def create_table(n)
  (2**n).times do |i|
    n.times { |shift| print "#{(i >> shift) & 1 == 0 ? 'T' : 'F'} " }
    puts
  end
end

create_table 3

更多红宝石色,并且无疑更快:

def create_table(n)
  %w{T F}.repeated_permutation(n).to_a.each { |perm| puts perm.join(' ') }
end