public
Created

Haskell solution for CodeChef - Ambiguous Permutations

  • Download Gist
permutations.hs
Haskell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import Control.Monad
import Data.List
import Data.Maybe
import System.Exit
 
main = do
-- get the number for this case, and exit if it's equal to 0
n <- liftM read getLine :: IO (Int)
when (n == 0) exitSuccess
-- read the input and calculate the answer
rawInput <- liftM words getLine :: IO [String]
let p = map read rawInput :: [Int]
putStrLn $ solve p n
-- recurse
main
solve :: [Int] -> Int -> String
solve p n
| p == inverse p n = "ambiguous"
| otherwise = "not ambiguous"
 
-- convert a list of numbers into its inverse permutation
inverse :: [Int] -> Int -> [Int]
inverse p n = f [1..n]
where f [] = []
f (x:xs) = (fromJust $ findIndex (==x) p) + 1 : f xs

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.