2023-01-03 11:32
Problem details at Project Euler problem 63 page.
module Euler063Test (euler63suite) where
import Prelude
import Effect.Aff (Milliseconds(..), delay)
import Euler063 (euler63)
import Test.Unit (TestSuite, suite, test)
import Test.Unit.Assert as Assert
euler63suite :: TestSuite
euler63suite =
suite "Euler 63" do
test "Real" do
delay (Milliseconds 0.0)
Assert.equal 49 (euler63 30)
module Euler063 where
import Prelude
import Control.Alternative (guard)
import Data.Array (length, range)
import Data.Array.NonEmpty as NA
import Data.BigInt (digitsInBase, fromInt, pow)
euler63 :: Int -> Int
euler63 n = length do
let r = fromInt <$> range 1 n
b <- r
e <- r
let p = pow b e
ds = (digitsInBase 10 p).value
dc = NA.length ds
guard $ fromInt dc == e
pure p