-- Compute the first guess which one will lead to the 
-- maximum number of possible answers leaving.
firstGuess :: GameState -> ([String],Int)
firstGuess gs
    = foldr (\x acc -> 
            let num = maxSameOutput $ sameOutputs (Set.toList x) (delete x allChord)
            in 
            if num < snd acc then ((Set.toList x),num) else acc
            ) ([""],length allChord) gs
firstGuess :: GameState -> ([String],Int)
firstGuess gs
    = foldr (\x acc -> 
            let num = maxSameOutput $ sameOutputs (Set.toList x) (delete x allChord)
            in 
            if num < snd acc then ((Set.toList x),num) else acc
            ) ([""],length allChord) gs
firstGuess gs
    = foldr (\x acc -> 
            let num = maxSameOutput $ sameOutputs (Set.toList x) (delete x allChord)
            in 
            if num < snd acc then ((Set.toList x),num) else acc
            ) ([""],length allChord) gs