Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,133 @@
|
|||
on jacobsthalNumbers(variant, n)
|
||||
-- variant: text containing "Lucas", "oblong", or "prime" — or none of these.
|
||||
-- n: length of output sequence required.
|
||||
|
||||
-- The two Jacobsthal numbers preceding the current 'j'. Initially the first two in the sequence.
|
||||
set {anteprev, prev} to {0, 1}
|
||||
-- Default plug-in script. Its handler simply appends the current 'j' to the output.
|
||||
script o
|
||||
property output : {anteprev, prev}
|
||||
on append(dummy, j)
|
||||
set end of output to j
|
||||
end append
|
||||
end script
|
||||
|
||||
-- If a variant sequence is specified, change the first value or substitute
|
||||
-- a script whose handler decides the values to append to the output.
|
||||
ignoring case
|
||||
if (variant contains "Lucas") then
|
||||
set anteprev to 2
|
||||
set o's output's first item to anteprev
|
||||
else if (variant contains "oblong") then
|
||||
script
|
||||
property output : {0}
|
||||
on append(prev, j)
|
||||
set end of output to prev * j
|
||||
end append
|
||||
end script
|
||||
set o to result
|
||||
else if (variant contains "prime") then
|
||||
script
|
||||
property output : {}
|
||||
on append(dummy, j)
|
||||
if (isPrime(j)) then set end of output to j
|
||||
end append
|
||||
end script
|
||||
set o to result
|
||||
end if
|
||||
end ignoring
|
||||
|
||||
-- Work through the Jacobsthal process until the required output length is obtained.
|
||||
repeat until ((count o's output) = n)
|
||||
set j to anteprev + anteprev + prev
|
||||
tell o to append(prev, j)
|
||||
set anteprev to prev
|
||||
set prev to j
|
||||
end repeat
|
||||
|
||||
return o's output
|
||||
end jacobsthalNumbers
|
||||
|
||||
on isPrime(n)
|
||||
if (n < 3) then return (n is 2)
|
||||
if (n mod 2 is 0) then return false
|
||||
repeat with i from 3 to (n ^ 0.5) div 1 by 2
|
||||
if (n mod i is 0) then return false
|
||||
end repeat
|
||||
return true
|
||||
end isPrime
|
||||
|
||||
-- Task and presentation of results!:
|
||||
on intToText(n)
|
||||
set txt to ""
|
||||
repeat until (n < 100000000)
|
||||
set txt to text 2 thru 9 of (100000000 + (n mod 100000000) div 1 as text) & txt
|
||||
set n to n div 100000000
|
||||
end repeat
|
||||
return (n as integer as text) & txt
|
||||
end intToText
|
||||
|
||||
on chopList(theList, sublistLen)
|
||||
script o
|
||||
property lst : theList
|
||||
property output : {}
|
||||
end script
|
||||
|
||||
set listLen to (count o's lst)
|
||||
repeat with i from 1 to listLen by sublistLen
|
||||
set j to i + sublistLen - 1
|
||||
if (j > listLen) then set j to listLen
|
||||
set end of o's output to items i thru j of o's lst
|
||||
end repeat
|
||||
return o's output
|
||||
end chopList
|
||||
|
||||
on matrixToText(matrix, w)
|
||||
script o
|
||||
property matrix : missing value
|
||||
property row : missing value
|
||||
end script
|
||||
|
||||
set o's matrix to matrix
|
||||
set padding to " "
|
||||
repeat with r from 1 to (count o's matrix)
|
||||
set o's row to o's matrix's item r
|
||||
repeat with i from 1 to (count o's row)
|
||||
set o's row's item i to text -w thru end of (padding & o's row's item i)
|
||||
end repeat
|
||||
set o's matrix's item r to join(o's row, "")
|
||||
end repeat
|
||||
|
||||
return join(o's matrix, linefeed)
|
||||
end matrixToText
|
||||
|
||||
on join(lst, delim)
|
||||
set astid to AppleScript's text item delimiters
|
||||
set AppleScript's text item delimiters to delim
|
||||
set txt to lst as text
|
||||
set AppleScript's text item delimiters to astid
|
||||
return txt
|
||||
end join
|
||||
|
||||
on task()
|
||||
set output to {"First 30 Jacobsthal Numbers:", "First 30 Jacobsthal-Lucas Numbers:", ¬
|
||||
"First 20 Jacobsthal oblong Numbers:", "First 11 Jacobsthal Primes:"}
|
||||
set results to {jacobsthalNumbers("", 30), jacobsthalNumbers("Lucas", 30), ¬
|
||||
jacobsthalNumbers("oblong", 20), jacobsthalNumbers("prime", 11)}
|
||||
repeat with i from 1 to 4
|
||||
set thisSequence to item i of results
|
||||
repeat with j in thisSequence
|
||||
set j's contents to intToText(j)
|
||||
end repeat
|
||||
if (i < 4) then
|
||||
set theLines to chopList(thisSequence, 10)
|
||||
else
|
||||
set theLines to chopList(thisSequence, 6)
|
||||
end if
|
||||
set item i of output to item i of output & linefeed & matrixToText(theLines, (count end of thisSequence) + 1)
|
||||
end repeat
|
||||
|
||||
return join(output, linefeed & linefeed)
|
||||
end task
|
||||
|
||||
task()
|
||||
Loading…
Add table
Add a link
Reference in a new issue