Proper divisors: Difference between revisions
→{{header|AppleScript}}: Simpler closures, updated primitives
(→{{header|AppleScript}}: Simpler closures, updated primitives) |
|||
Line 297:
<lang AppleScript>-- properDivisors :: Int -> [Int]
on properDivisors(n)
script mf▼
-- isFactor :: Int -> Bool ▼
on isFactor(x)▼
(n of my closure) mod x = 0▼
end isFactor▼
-- integerQuotient :: Int -> Int▼
on integerQuotient(x)▼
((n of my closure) / x) as integer▼
end integerQuotient▼
end script▼
if n = 1 then
{1}
Line 315 ⟶ 303:
set intRoot to realRoot as integer
set blnPerfectSquare to intRoot = realRoot
▲ -- isFactor :: Int -> Bool
on lambda(x)
end lambda
-- Factors up to square root of n,
set lows to filter
-- and quotients of these factors beyond the square root,
▲ -- integerQuotient :: Int -> Int
on lambda(x)
end lambda
-- excluding n itself (last item)
items 1 thru -2 of (lows & map
items (1 + (blnPerfectSquare as integer)) thru -1 of reverse of lows))
end if
Line 327 ⟶ 330:
-- TEST
-- numberAndDivisors :: Int -> [Int]▼
on numberAndDivisors(n)▼
{num:n, divisors:properDivisors(n)}▼
-- maxDivisorCount :: Record -> Int -> Record▼
set intDivisors to length of properDivisors(n)▼
if intDivisors ≥ divisors of a then▼
{num:n, divisors:intDivisors}▼
▲ a
end if▼
end maxDivisorCount▼
on run
▲ -- numberAndDivisors :: Int -> [Int]
▲ {num:n, divisors:properDivisors(n)}
end lambda
▲ -- maxDivisorCount :: Record -> Int -> Record
on lambda(a, n)
▲ set intDivisors to length of properDivisors(n)
▲ if intDivisors ≥ divisors of a then
▲ {num:n, divisors:intDivisors}
▲ else
a
▲ end if
end lambda
▲ end script
{oneToTen:map(numberAndDivisors, ¬
Line 415 ⟶ 420:
end script
end mReturn
▲ property lambda : f
▲ end script
</lang>
|