ruby - 用 ruby 构建一个动态增长的真值表
问题描述
我正在尝试使用 ruby 构建动态真值表。
例如,给定 3,它应该输出:
创建表(3):
TTT
TTF
TFT
TFF
光纤到户
FTF
快速傅里叶变换
FFF
我正在考虑使用递归来做到这一点,但我真的不知道如何做到这一点,以使每个组合只出现一次。
解决方案
这是一种相当蛮力的方法,但请注意,给定的真值表n
对应于 numbers 的位值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