построить динамически растущую таблицу истинности с рубином - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь построить динамическую таблицу истинности, используя 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 голосов
/ 23 марта 2019

Это довольно грубый подход, но обратите внимание, что ваша таблица истинности для данного 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...