Get rid of teamownerId since rejoin feature makes it virtually useless, as you cannot rely on it anymore. Should fix recently experienced server crashes.
module Test whereimport Control.Monadimport Data.Wordimport qualified Data.IntSet as ISdata OP = Sum | Mul | Sub deriving ShowgenOps :: Int -> [[OP]]genOps 1 = [[Sum], [Mul], [Sub]]genOps n = [a : as | a <- [Sum, Mul, Sub], as <- genOps (n - 1)]genPos :: Int -> Int -> [[Int]]genPos m 1 = map (:[]) [-m..m - 1]genPos m n = [a : as | a <- [-m..m - 1], as <- genPos m (n - 1)]hash :: [Int] -> [OP] -> [Int] -> Inthash poss op s = foldl applyOp s' (zip ss op) where applyOp v (n, Sum) = (v + n) `mod` 256 applyOp v (n, Mul) = (v * n) `mod` 256 applyOp v (n, Sub) = (v - n) `mod` 256 (s' : ss) = map (\p -> if p >= 0 then s !! p else s !! (l + p)) poss l = length stest = do a <- liftM lines getContents let w = minimum $ map length a let opsNum = 4 let opsList = genOps (opsNum - 1) let posList = genPos w opsNum let target = length a let wordsList = map (map fromEnum) a let hashedSize = IS.size . IS.fromList print $ length a putStrLn . unlines . map show $ filter (\l -> fst l == length a) $ [(hs, (p, o)) | p <- posList, o <- opsList, let hs = hashedSize . map (hash p o) $ wordsList]didIunderstand' = do a <- liftM lines getContents print $ length a print . IS.size . IS.fromList . map (testHash . map fromEnum) $ a where testHash s = let l = length s in ( (s !! (l - 2) * s !! 1) + s !! (l - 1) - s !! 0 ) `mod` 256