First perfect square in base n with n unique digits: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 792: | Line 792: | ||
Base 28: 58a3ckp3n4cqd7² = 1023456cgjbirqedhp98kmoan7fl in 911.059s |
Base 28: 58a3ckp3n4cqd7² = 1023456cgjbirqedhp98kmoan7fl in 911.059s |
||
</pre> |
</pre> |
||
=={{header|Haskell}}== |
|||
{{trans|F#}} |
|||
<lang haskell>import Control.Monad (guard) |
|||
import Data.List (find, unfoldr) |
|||
import Data.Char (intToDigit) |
|||
import qualified Data.Set as Set |
|||
import Text.Printf (printf) |
|||
digits :: Integral a => a -> a -> [a] |
|||
digits b = unfoldr (\d -> guard (d /= 0) >> pure (d `mod` b, d `div` b)) |
|||
sequenceForBaseN :: Integral a => a -> [a] |
|||
sequenceForBaseN |
|||
b = unfoldr (\(v, n) -> Just (v, (v + n, n + 2))) (i ^ 2, i * 2 + 1) |
|||
where |
|||
i = succ (round $ sqrt (realToFrac (b ^ pred b))) |
|||
searchSequence :: Integral a => a -> Maybe a |
|||
searchSequence |
|||
b = find (\x -> Set.fromList (digits b x) == digitsSet) (sequenceForBaseN b) |
|||
where |
|||
digitsSet = Set.fromList [0 .. pred b] |
|||
display :: Integer -> Integer -> String |
|||
display b n = map (intToDigit . fromIntegral) $ reverse $ digits b n |
|||
main :: IO () |
|||
main = mapM_ |
|||
(\b -> case searchSequence b of |
|||
Just n -> printf |
|||
"Base %2d: %8s² -> %16s\n" |
|||
b |
|||
(display b (squareRootValue n)) |
|||
(display b n) |
|||
Nothing -> pure ()) |
|||
[2 .. 16] |
|||
where |
|||
squareRootValue = round . sqrt . realToFrac</lang> |
|||
{{out}} |
|||
<pre>Base 2: 10² -> 100 |
|||
Base 3: 22² -> 2101 |
|||
Base 4: 33² -> 3201 |
|||
Base 5: 243² -> 132304 |
|||
Base 6: 523² -> 452013 |
|||
Base 7: 1431² -> 2450361 |
|||
Base 8: 3344² -> 13675420 |
|||
Base 9: 11642² -> 136802574 |
|||
Base 10: 32043² -> 1026753849 |
|||
Base 11: 111453² -> 1240a536789 |
|||
Base 12: 3966b9² -> 124a7b538609 |
|||
Base 13: 3828943² -> 10254773ca86b9 |
|||
Base 14: 3a9db7c² -> 10269b8c57d3a4 |
|||
Base 15: 1012b857² -> 102597bace836d4 |
|||
Base 16: 404a9d9b² -> 1025648cfea37bd9</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |
||
<lang> |
<lang> |