Skip to content

Instantly share code, notes, and snippets.

@Jofairden
Last active February 14, 2018 14:52
Show Gist options
  • Save Jofairden/8d1f335a9b4977ea772b8cce213c8260 to your computer and use it in GitHub Desktop.
Save Jofairden/8d1f335a9b4977ea772b8cce213c8260 to your computer and use it in GitHub Desktop.
Calculate the magic number of length = 9 in Haskell
-- Calculate the magic number of length = 9
-- with numbers ranging from 1 to 9, and each number can only occur once
-- and each section of k length is divisable by k
del :: Eq a => [a] -> [a] -> [a]
del xs ys = [y| y <- ys, not(elem y xs)]
magicNumber :: [Int]
magicNumber = [var8 |
x1 <- [1..9],
x2 <- (del [x1] [2,4..8]),
let var1 =, mod var1 2 == 0,
x3 <- (del [x1,x2] [1..9]),
let var2 = var1 * 10 + x3, mod var2 3 == 0,
x4 <- (del [x1,x2,x3] [2,4..8]),
let var3 = var2 * 10 + x4, mod var3 4 == 0,
x5 <- (del [x1,x2,x3,x4] [5]),
let var4 = var3 * 10 + x5, mod var4 5 == 0,
x6 <- (del [x1,x2,x3,x4,x5] [2,4..8]),
let var5 = var4 * 10 + x6, mod var5 6 == 0,
x7 <- (del [x1,x2,x3,x4,x5,x6] [1..9]),
let var6 = var5 * 10 + x7, mod var6 7 == 0,
x8 <- (del [x1,x2,x3,x4,x5,x6,x7] [2,4..8]),
let var7 = var6 * 10 + x8, mod var7 8 == 0,
x9 <- (del [x1,x2,x3,x4,x5,x6,x7,x8] [1..9]),
let var8 = var7 * 10 + x9, mod var8 9 == 0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment