首页 > 解决方案 > 用 ruby​​ 构建一个动态增长的真值表

问题描述

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

例如,给定 3,它应该输出:

创建表(3):

TTT

TTF

TFT

TFF

光纤到户

FTF

快速傅里叶变换

FFF

我正在考虑使用递归来做到这一点,但我真的不知道如何做到这一点,以使每个组合只出现一次。

标签: ruby

解决方案


这是一种相当蛮力的方法,但请注意,给定的真值表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

推荐阅读