aboutsummaryrefslogtreecommitdiff
path: root/haskell/024-lexicographic_premutations.hs
diff options
context:
space:
mode:
Diffstat (limited to 'haskell/024-lexicographic_premutations.hs')
-rw-r--r--haskell/024-lexicographic_premutations.hs21
1 files changed, 21 insertions, 0 deletions
diff --git a/haskell/024-lexicographic_premutations.hs b/haskell/024-lexicographic_premutations.hs
new file mode 100644
index 0000000..5db0aaa
--- /dev/null
+++ b/haskell/024-lexicographic_premutations.hs
@@ -0,0 +1,21 @@
+-- Lexicographic permutations
+--
+-- Problem 24
+-- A permutation is an ordered arrangement of objects. For example, 3124 is one possible
+-- permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically
+-- or alphabetically, we call it lexicographic order. The lexicographic permutations of
+-- 0, 1 and 2 are:
+--
+-- 012 021 102 120 201 210
+--
+-- What is the millionth lexicographic permutation of the digits
+-- 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
+
+
+import Data.Char(chr,ord)
+
+main = print (foldr (\x acc -> chr (ord '0' + x) : acc) "" ((permutations' [0..9]) !! 999999))
+
+permutations' :: [Int] -> [[Int]]
+permutations' [x] = [[x]]
+permutations' xs = concat [[x : p | p <- permutations' (filter (x/=) xs)] | x <- xs]