fork download
  1. import Control.Applicative -- this is needed for <$> as the ideone Haskell version ist not up-to date
  2.  
  3. main = putStr(show test)
  4.  
  5. t=1<3
  6. e%((t,f):r)=or((e<$>t)++map(not.e)f)&&e%r
  7. e%_=t
  8. u v b e s|s==v=b|t=e s
  9. s e[]c=1<0
  10. s e(v:w)c=e%c||s(u v t e)w c||s(u v(1<0)e)w c
  11. g v[]=v
  12. g v((t,f):r)=g(v++[x|x<-t++f,notElem x v])r
  13.  
  14. isSat = g[]>>=s(\x->t)
  15.  
  16. test = (isSat[(["A","B"],[])] == True)
  17. && (isSat[([],["B"]),(["A","B"],[])] == True)
  18. && (isSat[([],["B"]),(["B"],[])] == False)
  19. && (isSat[(["P"],["Q","R"]),(["Q","R"],["P"]),(["Q"],["P","R"])] == True)
  20. && (isSat[([],["P"]),(["S"],[]),(["R"],["P"]),(["U"],["Q"]),(["X"],["R"]),(["Q"],["S"]),([],["P","U"]),(["W"],["Q","U"])] == True)
  21. && (isSat[([],["P","Q"]),(["Q","P"],[]),(["P"],["Q"]),(["Q"],["P"])] == False)
  22. && (isSat[(["P"],[]),([],["P","S"]),(["P","T"],[]),(["Q"],["R"]),([],["R","S"]),([],["P","Q","R"]),([],["P"])] == False)
Success #stdin #stdout 0s 4700KB
stdin
Standard input is empty
stdout
True