First perfect square in base n with n unique digits: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Applicative formulation of `digits` turns out, FWIW, to be a little faster.) |
|||
Line 799: | Line 799: | ||
import qualified Data.Set as Set |
import qualified Data.Set as Set |
||
import Text.Printf (printf) |
import Text.Printf (printf) |
||
digits :: Integral a => a -> a -> [a] |
digits :: Integral a => a -> a -> [a] |
||
digits b = unfoldr |
digits b = unfoldr |
||
(((>>) . guard . (0 /=)) <*> (pure . ((,) <$> (`mod` b) <*> (`div` b)))) |
|||
sequenceForBaseN :: Integral a => a -> [a] |
sequenceForBaseN :: Integral a => a -> [a] |
||
sequenceForBaseN |
sequenceForBaseN |
||
b = unfoldr (\(v, n) -> Just (v, (v + n, n + 2))) (i ^ 2, i * 2 + 1) |
b = unfoldr (\(v, n) -> Just (v, (v + n, n + 2))) (i ^ 2, i * 2 + 1) |
||
where |
where |
||
i = succ |
i = succ (round $ sqrt (realToFrac (b ^ pred b))) |
||
searchSequence :: Integral a => a -> Maybe a |
searchSequence :: Integral a => a -> Maybe a |
||
searchSequence |
searchSequence |
||
Line 814: | Line 815: | ||
where |
where |
||
digitsSet = Set.fromList [0 .. pred b] |
digitsSet = Set.fromList [0 .. pred b] |
||
display :: Integer -> Integer -> String |
display :: Integer -> Integer -> String |
||
display b = |
display b n = map (intToDigit . fromIntegral) $ reverse $ digits b n |
||
main :: IO () |
main :: IO () |
||
main = mapM_ |
main = mapM_ |