TechRacer: Fix gears not spawning on turn start when player pressed control right at start
The activationStage was horribly programmed and heavily relied on timer. There was a sweet spot
at turn start that if you managed to push a key right at the start of turn, you skip the Ready
phase and the activationStage would advance, causing the gear spawning code to be skipped.
This fix greatly simplies the spawning phase.
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