h='able to fly'
i="(not )?(#{h}|\\w+)"
o=->s{n=Regexp.new(i+" (is also|are) "+i).match s
[[n[2],!n[1]],[n[5],!n[4]]]}
c=e=!z=[]
w=->r{z.member?(r)||(z<<(a,b=r)
c|=a[0]==b[0]&&a[1]!=b[1]
w[[[b[0],!b[1]],[a[0],!a[1]]]]
z.map{|q|q[1]==r[0]&&w[[q[0],r[1]]]})}
y=->x{z.member?([[p='Pigs',!e],[h,x]])}
f=->x{x.split(?.).map{|s|w[o[s]]}
c|y[!e]?'Yes':y[e]?'No':'Maybe'}
def assert_equal(x, y)
fail "Not equal: <#{x.inspect}> != <#{y.inspect}>" if x != y
puts "OK."
end
test=->(text, exp){
c=!z=[] # (re) initialization needed for multiple test runs
assert_equal(f[text], exp)
}
test['Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.', 'No']
test['Pigs are old. Everything that is not able to fly is also not old.', 'Yes']
test['Everything that is sweet is also not old. Everything that is intelligent is also blue.', 'Maybe']
test['Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.', 'Yes']
test['Pigs are very smart. Pigs are able to fly.', 'Yes'] # <-- any answer accepted here
aD0nYWJsZSB0byBmbHknCmk9Iihub3QgKT8oI3tofXxcXHcrKSIKbz0tPnN7bj1SZWdleHAubmV3KGkrIiAoaXMgYWxzb3xhcmUpICIraSkubWF0Y2ggcwpbW25bMl0sIW5bMV1dLFtuWzVdLCFuWzRdXV19CmM9ZT0hej1bXQp3PS0+cnt6Lm1lbWJlcj8ocil8fCh6PDwoYSxiPXIpCmN8PWFbMF09PWJbMF0mJmFbMV0hPWJbMV0Kd1tbW2JbMF0sIWJbMV1dLFthWzBdLCFhWzFdXV1dCnoubWFwe3xxfHFbMV09PXJbMF0mJndbW3FbMF0sclsxXV1dfSl9Cnk9LT54e3oubWVtYmVyPyhbW3A9J1BpZ3MnLCFlXSxbaCx4XV0pfQpmPS0+eHt4LnNwbGl0KD8uKS5tYXB7fHN8d1tvW3NdXX0KY3x5WyFlXT8nWWVzJzp5W2VdPydObyc6J01heWJlJ30KCgpkZWYgYXNzZXJ0X2VxdWFsKHgsIHkpCiAgZmFpbCAiTm90IGVxdWFsOiA8I3t4Lmluc3BlY3R9PiAhPSA8I3t5Lmluc3BlY3R9PiIgaWYgeCAhPSB5CiAgcHV0cyAiT0suIgplbmQKdGVzdD0tPih0ZXh0LCBleHApewogIGM9IXo9W10gIyAocmUpIGluaXRpYWxpemF0aW9uIG5lZWRlZCBmb3IgbXVsdGlwbGUgdGVzdCBydW5zCiAgYXNzZXJ0X2VxdWFsKGZbdGV4dF0sIGV4cCkKfQoKdGVzdFsnUGlncyBhcmUgZ3JlZW4uIEV2ZXJ5dGhpbmcgdGhhdCBpcyBncmVlbiBpcyBhbHNvIGludGVsbGlnZW50LiBFdmVyeXRoaW5nIHRoYXQgaXMgYWJsZSB0byBmbHkgaXMgYWxzbyBub3QgaW50ZWxsaWdlbnQuJywgJ05vJ10KdGVzdFsnUGlncyBhcmUgb2xkLiBFdmVyeXRoaW5nIHRoYXQgaXMgbm90IGFibGUgdG8gZmx5IGlzIGFsc28gbm90IG9sZC4nLCAnWWVzJ10KdGVzdFsnRXZlcnl0aGluZyB0aGF0IGlzIHN3ZWV0IGlzIGFsc28gbm90IG9sZC4gRXZlcnl0aGluZyB0aGF0IGlzIGludGVsbGlnZW50IGlzIGFsc28gYmx1ZS4nLCAnTWF5YmUnXQp0ZXN0WydQaWdzIGFyZSBub3QgYWJsZSB0byBmbHkuIEV2ZXJ5dGhpbmcgdGhhdCBpcyByZWQgaXMgYWxzbyBzd2VldC4gRXZlcnl0aGluZyB0aGF0IGlzIHN3ZWV0IGlzIGFsc28gbm90IHJlZC4nLCAnWWVzJ10KdGVzdFsnUGlncyBhcmUgdmVyeSBzbWFydC4gUGlncyBhcmUgYWJsZSB0byBmbHkuJywgJ1llcyddICMgPC0tIGFueSBhbnN3ZXIgYWNjZXB0ZWQgaGVyZQo=