我正在尝试使用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
我本来想使用递归来做到这一点,但我真的不知道该怎么做才能使每个组合恰好出现一次。
答案 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