Skip to content

Commit

Permalink
sort literals in a non-linear term when generating OPB/WBO files
Browse files Browse the repository at this point in the history
  • Loading branch information
msakai committed Jun 20, 2015
1 parent 54e36d4 commit 8fade4f
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
-------
* parse* functions fails if the parser does not consume all of the inputs
* generate '#product=', 'sizeproduct=' and '#soft=' in header line of OPB/WBO files
* sort literals in a non-linear term when generating OPB/WBO files
4 changes: 3 additions & 1 deletion src/Data/PseudoBoolean/Builder.hs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ import Prelude hiding (sum)
import qualified Data.DList as DList
import qualified Data.IntSet as IntSet
import qualified Data.Set as Set
import Data.List (sortBy)
import Data.Monoid hiding (Sum (..))
import Data.Ord
import Data.String
import Text.Printf
import Data.PseudoBoolean.Types
Expand Down Expand Up @@ -75,7 +77,7 @@ showWeightedTerm :: (Monoid a, IsString a) => WeightedTerm -> a
showWeightedTerm (c, lits) = foldr (\f g -> f <> fromString " " <> g) mempty (x:xs)
where
x = if c >= 0 then fromString "+" <> fromString (show c) else fromString (show c)
xs = map showLit lits
xs = map showLit $ sortBy (comparing abs) lits

showLit :: (Monoid a, IsString a) => Lit -> a
showLit lit = if lit > 0 then v else fromString "~" <> v
Expand Down
4 changes: 3 additions & 1 deletion src/Data/PseudoBoolean/ByteStringBuilder.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@ import qualified Prelude
import Prelude hiding (sum)
import qualified Data.IntSet as IntSet
import qualified Data.Set as Set
import Data.List (sortBy)
import Data.Monoid hiding (Sum (..))
import qualified Data.ByteString.Lazy as BS
import Data.ByteString.Builder (Builder, intDec, integerDec, char7, string7, hPutBuilder, toLazyByteString)
import Data.Ord
import System.IO
import Data.PseudoBoolean.Types

Expand Down Expand Up @@ -81,7 +83,7 @@ showWeightedTerm :: WeightedTerm -> Builder
showWeightedTerm (c, lits) = foldr (\f g -> f <> char7 ' ' <> g) mempty (x:xs)
where
x = if c >= 0 then char7 '+' <> integerDec c else integerDec c
xs = map showLit lits
xs = map showLit $ sortBy (comparing abs) lits

showLit :: Lit -> Builder
showLit lit = if lit > 0 then v else char7 '~' <> v
Expand Down

0 comments on commit 8fade4f

Please sign in to comment.