Start work on crafting/combinations

This commit is contained in:
2021-12-02 00:50:29 +00:00
parent ce06845278
commit 85ededc158
28 changed files with 189 additions and 112 deletions
+50
View File
@@ -0,0 +1,50 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Combine.Combinations
where
--import Dodge.Data
import Dodge.Combine.Data
import Data.Bifunctor
import qualified Data.IntMap.Strict as IM
--import qualified Data.IntSet as IS
import qualified Data.Map.Strict as M
import Control.Monad
import Data.Maybe
combineList :: IM.IntMap ItemCombineType -> [([Int],ItemCombineType)]
combineList m = mapMaybe (pushoutmaybe . second (combine . toMultiset) . unzip)
. powlist
$ IM.toList m
where
pushoutmaybe (_,Nothing) = Nothing
pushoutmaybe (x,Just y) = Just (x,y)
powlist :: [a] -> [[a]]
powlist = filterM (const [True,False])
combine :: M.Map ItemCombineType Int -> Maybe ItemCombineType
combine m = lookup m combinations
toMultiset :: Ord a => [a] -> M.Map a Int
toMultiset = foldr (uncurry $ M.insertWith (+)) M.empty . map (,1)
combinations :: [(M.Map ItemCombineType Int, ItemCombineType)]
combinations = map (first toMultiset)
[ ( [ TPistol, TPipe, THardware ] , TRifle )
, ( [ NoCombineType ] , TPistol )
, ( [ TRifle, THardware ] , TPistol )
, ( [ TPistol, TPistol, THardware ] , TSpreadGun 2 )
, ( [ TSpreadGun 2, TPistol, THardware ] , TSpreadGun 3 )
, ( [ TSpreadGun 3, TPistol, THardware ] , TSpreadGun 4 )
, ( [ TSpreadGun 4, TPistol, THardware ] , TSpreadGun 5 )
, ( [ TPistol, TAutoGun, THardware ] , TLtAutoGun )
, ( [ TLtAutoGun, TPipe, THardware ] , TAutoGun )
, ( [ TRifle, TRifle, THardware ] , TMultGun 2 )
, ( [ TMultGun 2, TRifle, THardware ] , TMultGun 3 )
, ( [ TMultGun 3, TRifle, THardware ] , TMultGun 4 )
, ( [ TMultGun 4, TRifle, THardware ] , TMultGun 5 )
, ( [ TLtAutoGun, TPipe, THardware ] , TAutoGun )
, ( [ TPistol, TTube, THardware] , TLauncher 1 )
, ( [ TLauncher 1, TTube, TPistol, THardware] , TLauncher 2)
, ( [ TLauncher 2, TTube, TPistol, THardware] , TLauncher 3)
]
+10 -4
View File
@@ -1,10 +1,13 @@
module Dodge.Combine.Data
(ItemType (..)
(ItemCombineType (..)
)
where
data ItemType
data ItemCombineType
= TPipe
| TBigTube
| NoCombineType
| TLongPipe
| TVeryLongPipe
| TTube
| TPlate
| TMChip
| TMagnet
@@ -14,11 +17,13 @@ data ItemType
| TNailbox
| TPlank
| TPrism
| TIronBar
| TLightSensor
| TSoundSensor
| THeatSensor
| TCopperWire
| TEmptyCan
| TEmptyTin
| TPistol
| TAutoGun
| TRifle
@@ -29,8 +34,9 @@ data ItemType
| TSpreadGun Int
| TLauncher Int
| TBattery
| TFuelCell
| TPortableFusion
| TAutoFiringMech
| TFiringMech
| TTargetingModule
deriving (Eq,Ord)
deriving (Eq,Ord,Show)