haskell solution
secret = "opscodesucks"
hangman :: Int -> Char -> String -> (Int, String)
hangman tries guess word
| guess `elem` word = (tries, filter (guess /=) word)
| otherwise = (tries-1, word)
printHangman :: String -> String -> String
printHangman hiddenChars [] = []
printHangman hiddenChars (x:xs)
| x `elem` hiddenChars = '_' : printHangman hiddenChars xs
| otherwise = x : printHangman hiddenChars xs
playHangman :: String -> Int -> IO Bool
playHangman [] _ = do return True
playHangman _ 0 = do return False
playHangman word tries = do
putStrLn $ printHangman word secret
putStrLn $ "Tries left: " ++ show tries
putStr "Enter a letter: "
guess <- getLine
let (triesAfter, stillHidden) = hangman tries (head guess) word
playHangman stillHidden triesAfter
main :: IO ()
main = do
win <- playHangman secret 7
if win then putStrLn "You win" else putStrLn "You lose"