27 lines
569 B
Ruby
27 lines
569 B
Ruby
loop do
|
|
print "\ninput a boolean expression (e.g. 'a & b'): "
|
|
expr = gets.strip.downcase
|
|
break if expr.empty?
|
|
|
|
vars = expr.scan(/\p{Alpha}+/)
|
|
if vars.empty?
|
|
puts "no variables detected in your boolean expression"
|
|
next
|
|
end
|
|
|
|
vars.each {|v| print "#{v}\t"}
|
|
puts "| #{expr}"
|
|
|
|
prefix = []
|
|
suffix = []
|
|
vars.each do |v|
|
|
prefix << "[false, true].each do |#{v}|"
|
|
suffix << "end"
|
|
end
|
|
|
|
body = vars.inject("puts ") {|str, v| str + "#{v}.to_s + '\t' + "}
|
|
body += '"| " + eval(expr).to_s'
|
|
|
|
eval (prefix + [body] + suffix).join("\n")
|
|
end
|