Untitled

 avatar
unknown
haskell
5 months ago
797 B
6
Indexable
import Data.List (nub, permutations)
import Data.Char (toLower)
import Data.List (intersect)


-- Convert number to digits
toDigits :: Int -> [Int]
toDigits n = map (read . pure) (show n)

-- Square a number
square :: Int -> Int 
square n = n * n

-- Count unique elements
uniqueCount :: [Int] -> Int
uniqueCount = length . nub



hasThreeDistinctDigits :: Int -> Bool
hasThreeDistinctDigits = (==3) . uniqueCount . toDigits . square


generator2 :: [(Int,Int,Int,Int,Int,Int,Int,Int)]
generator2 = 
    [ (a1,a2,a3,a4,a5,a6,a7,a8) | 
        let candidates = filter hasThreeDistinctDigits [10..31],
        let validPerms = filter (\xs -> head (drop 3 xs) == minimum xs) (permutations candidates),
        [a1,a2,a3,a4,a5,a6,a7,a8] <- take 8 <$> validPerms
    ]
	
Editor is loading...
Leave a Comment