() :: (Int,Int) -> (Int,Int) -> Bool (z1,s1) (z2,s2) = -- Der -Operator liefert genau dann "Wahr", wenn sich (z1,s1) und (z2,s2) nicht bedrohen, d.h. ( abs(s1 - s2) > 1 -- min 1 feld zwischen 2 Bällen || abs(z1 - z2) > 1) loesungen :: [ ( (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int), (Int, Int) ) ] loesungen = do f1 <- [ (z,s) | z <- [1], s <- [9]] f2 <- [ (z,s) | z <- [2], s <- [4]] f3 <- [ (z,s) | z <- [3], s <- [11]] f5 <- [ (z,s) | z <- [5], s <- [15]] -- erste zeile b1_1 <- [ (z,s) | z <- [1], s <- [1..15], (z,s) f1, (z,s) f2 ] -- b1_2 <- [ (z,s) | z <- [1], s <- [1..15], (z,s) > b1_1, (z,s) f1, (z,s) f2, (z,s) b1_1 ] -- -- zweiten Zeile b2_1 <- [ (z,s) | z <- [2], s <- [1..15], (z,s) f1, (z,s) f2, (z,s) f3, (z,s) b1_1, (z,s) b1_2, (z,s) /= (2,14) ] -- b2_2 <- [ (z,s) | z <- [2], s <- [1..15], (z,s) > b2_1, (z,s) f1, (z,s) f2, (z,s) f3, (z,s) b1_1, (z,s) b1_2, (z,s) b2_1, (z,s) /= (2,14) ] -- --dritte zeile b3_1 <- [ (z,s) | z <- [3], s <- [1..15], (z,s) f2, (z,s) f3, (z,s) b2_1, (z,s) b2_2 ] -- b3_2 <- [ (z,s) | z <- [3], s <- [1..15], (z,s) > b3_1, (z,s) f2, (z,s) f3, (z,s) b2_1, (z,s) b2_2, (z,s) b3_1 ] -- -- vierte Zeile b4_1 <- [ (z,s) | z <- [4], s <- [1..15], (z,s) f3, (z,s) f5, (z,s) b3_1, (z,s) b3_2 ] -- b4_2 <- [ (z,s) | z <- [4], s <- [1..15], (z,s) > b4_1, (z,s) f3, (z,s) f5, (z,s) b3_1, (z,s) b3_2, (z,s) b4_1 ] -- b4_3 <- [ (z,s) | z <- [4], s <- [1..15], (z,s) > b4_2, (z,s) f3, (z,s) f5, (z,s) b3_1, (z,s) b3_2, (z,s) b4_1, (z,s) b4_2 ] -- -- fünfte zeile b5_1 <- [ (z,s) | z <- [5], s <- [1..15], (z,s) f5, (z,s) b4_1, (z,s) b4_2, (z,s) b4_3, (z,s) /= (5,6) ] -- b5_2 <- [ (z,s) | z <- [5], s <- [1..15], (z,s) > b5_1, (z,s) f5, (z,s) b4_1, (z,s) b4_2, (z,s) b4_3, (z,s) b5_1, (z,s) /= (5,6) ] -- return (b1_1, b1_2, f1, b2_1, b2_2, f2, b3_1, b3_2, f3, b4_1, b4_2, b4_3, b5_1, b5_2, f5) -- Das ist ein Lösungstupel, für das alle obigen Bedingungen erfüllt sind. main = mapM_ print loesungen -- Ausgabe der Lösungen in der Form -- ((1,1),(2,5),(3,8),(4,6),(5,3),(6,7),(7,2),(8,4)) -- ((1,1),(2,6),(3,8),(4,3),(5,7),(6,4),(7,2),(8,5)) -- ((1,1),(2,7),(3,4),(4,6),(5,8),(6,2),(7,5),(8,3)) -- ...